Santa sabe si su formulario de contacto usa PHPMailer

PHPMailer, una de las clases más utilizadas para enviar correos electrónicos PHP, tiene una vulnerabilidad significativa en versiones menores a 5.2.18 (versión actual). El investigador de seguridad [Dawid Golunski] Recientemente emitió una advertencia limitada, alegando que PHPMailer sufre una falla crítica que podría llevar a un atacante a realizar la ejecución remota de código en el contexto del usuario del servidor web. PHPMailer es utilizado por varios proyectos de código abierto, entre ellos: WordPress, Drupal, 1CRM, SugarCRM, Yii y Joomla. Se ha lanzado una solución y PHPMailer anima a todos los usuarios a actualizar sus sistemas.

Para desencadenar esta vulnerabilidad (CVE-2016-10033), parece que el atacante solo necesita hacer que el programa en línea envíe un correo electrónico utilizando la clase vulnerable PHPMailer. Dependiendo de la aplicación en sí, esto se puede lograr de varias maneras, como formularios de contacto / comentarios, formularios de registro, restablecimiento de correo electrónico de contraseña, etc.

Después de un análisis rápido de las diferencias, encontramos que el código vulnerable parece estar en las siguientes líneas de class.phpmailer.php:

Versión 5.2.17

if (!empty($this->Sender)) {
  $params = sprintf('-f%s', $this->Sender);
}
if ($this->Sender != '' and !ini_get('safe_mode')) {
  $old_from = ini_get('sendmail_from');
  ini_set('sendmail_from', $this->Sender);
}

Versión 5.2.18

if (!empty($this->Sender) and $this->validateAddress($this->Sender)) {
  $params = sprintf('-f%s', escapeshellarg($this->Sender));
}
if (!empty($this->Sender) and !ini_get('safe_mode') and $this->validateAddress($this->Sender)) {
  $old_from = ini_get('sendmail_from');
  ini_set('sendmail_from', $this->Sender);
}

Del código anterior podemos tener una idea de dónde proviene el error. El explorador [Dawid Golunski] afirma que ha desarrollado un concepto de prueba de ejecución remota de código (RCE) funcional y que lo publicará más adelante, para que los usuarios tengan tiempo de actualizar sus sistemas.

Entonces ... administradores, ¿a qué están esperando? Ve y actualiza, si Santa no está dormido, tú tampoco ...

  • bthy dice:

    parece posible incluir entradas arbitrarias en el archivo php ini, reemplazando declaraciones anteriores ..?

    • James dice:

      Ningún ini_set es solo una modificación en tiempo de ejecución, está bien y es de esperar.

      El problema que están tratando de "resolver" es que el argumento -f agregado a params se transmite a la línea de comando de sendmail mediante la función mail () de PHP (phpMailer puede usar mail () o puede comunicarse a través de SMTP directamente, mail () Es más común).

      Si no verifica que la dirección del remitente sea una dirección de correo electrónico real, puede permitirle inyectar opciones arbitrarias a la línea de comando de sendmail, obviamente no es bueno, pero realmente no es tan importante en este caso, porque estos parámetros adicionales se transmiten internamente a escapeshellcmd, por lo que hay protección allí contra permitir la ejecución arbitraria de comandos que no sean sendmail.

      (http://php.net/manual/en/function.mail.php)
      "Este parámetro escapa a escapeshellcmd () internamente para deshabilitar un comando. Escapeshellcmd () evita la ejecución de un comando, pero permite agregar parámetros adicionales. Por razones de seguridad, se recomienda al usuario que borre este parámetro para evitar agregar parámetros no deseados al comando de shell ".

      • Sam Pizzey dice:

        > Realmente no es tan importante en este caso, porque estos parámetros adicionales se transmiten internamente a escapeshellcmd, por lo que existe protección contra el permiso de ejecución arbitraria de comandos distintos de sendmail.

        Sin embargo, si realmente usa sendmail (a diferencia de Exim o Postfix o de manera similar con el contenedor sendmail), escapeshellcmd por sí solo no lo protegerá aquí, por lo que esto * se convertiría en un gran problema, porque puede forzar a sendmail a enviar el envío a un archivo arbitrario, que en la mayoría de las configuraciones conduce a RCE, básicamente, el error en Roundcube de hace más de un mes, pero en PHPMailer ahora.

        Así que sí, si administra sendmail, vale la pena comenzar a trabajar en el Boxing Day.

  • ROBÓ dice:

    Ahhh, recuerdo PhP (3.xx - 4.xx para mí). Una vez que pueda crear un solo cierre que realmente funcione, entonces todo el lenguaje ya no será de interés porque ha resuelto los últimos problemas de PhP y es decir, no tiene alcance, todo (funciones) normalmente está en el alcance global.

    Luego, escribe API para incluir comandos y funciones en la lista blanca y coloca la API en otro servidor y usa las directivas Apache para una clave IP para hacer que su API sea segura, un problema es que el servidor en el que se ejecuta tiene agujeros en el sistema operativo, por lo que los piratas informáticos obtienen de todos modos.

    PhP probablemente ha hecho más por Internet (www) que cualquier otro idioma, pero se ha convertido en un caballo de batalla, ya que la seguridad ocupa el segundo lugar para las nuevas mejoras y características. Básicamente es OOP, que se basa en un código de procedimiento.

    • ndndn d dice:

      Gracias por su borrador muy malo y casi ilegible de lo que es PHP, aunque nadie lo ha pedido y supondría que la mayoría de la gente aquí sabe lo que es. Es casi como si te gustara oírte a ti mismo hablar sobre temas técnicos, ¿tienes muchos amigos / conocidos en la vida real?

      • ROBÓ dice:

        Bueno, si no te gusta, entonces ofrece una respuesta * buena * y * comprensible * o simplemente "te gusta oírte hablar ..."

      • ROBÓ dice:

        Solo para darte una idea de lo que llamaste "casi ilegible" porque * cose * que no eres php.


        function wrapper()
        {
        function operator()
        {
        return 3;
        }
        }

        operador (); // devuelve un error porque aún se creó una función
        envoltorio ();
        $ var = operador (); // asigna el valor 3 a la variable $ var

        Lo que esto significa es que una vez creada, la función llamada operator () existe en el alcance global y no está limitada al alcance de la función llamada wrapper (), por lo que en * cualquier * punto (o profundidad) del código de tamaño puede dispersar el global espacio de nombres de función.

        Para resolver este problema, necesita crear una función:
        1) Unicelular. No se puede copiar, clonar ni reinstalar
        2) Deténgase. No puede adquirir ni modificar el alcance global. Está completamente limitado a su propio tamaño específico y no puede devolver nada más que un parámetro específico de un tipo específico.

        En cierre simple, incluso puede permitir la ejecución de un código debido a su aislamiento (según el tamaño) de otro código.

        API- escrito en php
        La Interfaz de software de Internet (API) básicamente proporciona un recurso para operaciones / funciones / comandos de lista blanca en lugar del método normal y mucho menos seguro de actividades de lista negra. La mayoría de los sitios web más seguros utilizan una API y ocultan u oscurecen la dirección (IP o espacio de nombres) del servidor (Aplicación) real. El sitio que está visitando es solo una interfaz y no contiene datos confidenciales, etc. En un sistema aún más seguro, hay otro paso que separa el servidor API del servidor de la base de datos.

        Si bien estas técnicas aumentan en gran medida la seguridad, no obstante son vulnerables a nivel del sistema operativo, que es la forma en que los piratas informáticos rompen las cosas de todos modos.

        Cita: "PhP probablemente ha hecho más por Internet (www) que en la actualidad que cualquier otro idioma"

        www: Red global, HTTP, sitios web
        Internet: TCP / IP, www, mensajería instantánea, videoconferencia, correo electrónico, etc.

        Intencionalmente utilicé incorrectamente la expresión Internet incorrecta y luego puse la expresión correcta www entre paréntesis, ya que la mayoría de las personas hoy en día usan estos dos términos indistintamente y no pueden percibirlos. Esto no pretendía ser incomprensible en ningún caso.

    • SavannahLeón dice:

      PHP nunca nacería realmente. Este sentimiento es que fue desarrollado por niños que leían un libro de texto sin realmente entender nada detrás de lo que estaban usando de otros niños que vieron PHP para imitaciones en un estante en algún lugar.

      De todos modos, cuando me piden que revise PHP, siempre hay algún problema. Los problemas existen con todos los lenguajes con los que he trabajado, pero PHP (y MS Visual Basic) parecen reforzar los problemas.

      Una vez tuve un programador senior de PHP que me miró sin comprender cuando le pregunté por qué desperdició casi un año escribiendo y navegando en más de 2k líneas de código de validación sobre datos de mala calidad almacenados en una base de datos (para dar una idea del alcance aquí, la SD almacenaba números de teléfono como 32 bits, pero claves únicas como ASCII y luego truncaba los 7 caracteres a 5 antes de buscar). Aparentemente, el concepto de uh ... validar los datos * antes * de almacenarlos parecía haberse escapado por completo.

  • Queeg dice:

    PHP

    Bastante difícil de proteger

    • toz dice:

      u kiidin espero

  • jaap dice:

    Tenga en cuenta que algo es una dirección de correo electrónico válida no significa que no pueda contener algo malo.
    Incluso es posible escribir código binario x86 con solo caracteres alfanuméricos.

    • SavannahLeón dice:

      Teniendo en cuenta que la arquitectura x86 intentará ejecutar casi cualquier código de ópera, no hay una gran tensión para hacer que las cadenas se ejecuten. Probablemente por qué cada vez más programas y sitios web están filtrando correos electrónicos incorrectamente. Es más fácil filtrar a ciegas correos electrónicos que simplemente encapsular y evitar el cumplimiento.

  • Georgia dice:

    PHP ...

  • Chris dice:

  • Chris J dice:

    Explotación de PHPMailer https://github.com/opsxcq/exploit-CVE-2016-10033

  • v dice:

    Es sorprendente lo difícil que es obtener detalles sobre cuál es la vulnerabilidad real ...
    Y si realmente es la diferencia que está mostrando aquí, entonces realmente no es tan grande como la conmoción. La dirección del "remitente SMTP" generalmente la ingresan los administradores y no los usuarios. Y dondequiera que los usuarios lo hayan ingresado, la falla al trabajar con espacios debería ser una indicación obvia de un problema, incluso sin un ejemplo preciso de cómo se puede explotar, por lo que probablemente se haya agregado validación o escape de algún tipo al código de llamada. Y en cualquier lugar donde no se haya agregado, merece ser pirateado por estupidez.

    • ROBÓ dice:

      Dichos problemas suelen ser encontrados por administradores de sistemas o operadores de sistemas y, si usted es una de estas personas, no hará amigos públicamente publicando los detalles de la vulnerabilidad hasta que la mayoría de los demás hayan solucionado el problema.

      Claro, en un servidor dedicado, el administrador del sistema realizará cosas como la dirección del remitente, pero el 99% de los sitios web (y los servidores SMTP) son servidores compartidos en la actualidad, por lo que la desdirección debe estar bajo el control del propietario de la cuenta del host, que probablemente sea no tan consciente de las trampas.

      Una vez que SPAMer detecta un problema como este, afectará fuertemente al recurso del servidor y esto afectará a todos los clientes en un servidor compartido. Primero, el servidor SMTP se incluirá en la lista negra y esto afecta a todos los usuarios de un servidor compartido y no solo a una cuenta de alojamiento. Luego está la carga de recursos (probablemente) menos significativa.

      No sé cómo se siente hoy, pero el escenario "SPAMMer vs sys-op" ha estado evolucionando durante una década y últimamente supe que el arma más nueva que tenía el sys-op eran los registros SPF vinculados a la información de la zona DNS. .

  • brent (@somebrent) dice:

    Como es habitual, esta explotación se vende en este nuevo mundo de marcas de seguridad en el que las personas intentan crear nombres para sí mismas. Esta operación requiere la condición específica de que el atacante tenga acceso a la entrada sin filtrar del comando setFrom () proporcionado por PHP Mailer.

Manuel Gómez
Manuel Gómez

Deja una respuesta

Tu dirección de correo electrónico no será publicada.