El 14 de abril, Microsoft emitió una alerta de vulnerabilidad , ahora identificada como CVE-2015-1635 , sobre un problema que podría permitir la ejecución remota de código si un atacante envía una solicitud HTTP especialmente diseñada a un sistema Windows afectado. Si parchear inmediatamente sus servidores de producción de Windows no es una opción, entonces NGINX y NGINX Plus pueden ayudarlo a protegerse de ataques.
Los detalles específicos de la vulnerabilidad no se han publicado al momento de escribir este artículo, pero se informa que los atacantes están tratando de encontrar sistemas vulnerables enviando solicitudes HTTP con solicitudes de rango muy grande, que pueden provocar un desbordamiento de búfer y causar un bloqueo en el sistema Windows.
Se recomienda encarecidamente a los usuarios que apliquen el parche de Microsoft para solucionar esta vulnerabilidad. Sin embargo, si no puede aplicar el parche a todos sus sistemas de producción y está usando NGINX o NGINX Plus para equilibrar la carga o redirigir el tráfico hacia ellos, un simple cambio de configuración es suficiente para interceptar y reparar las solicitudes especiales enviadas a los sistemas vulnerables.
Mattias Geniar ha analizado el tráfico del ataque e informa que las solicitudes HTTP con un amplio rango de bytes en el encabezado Range
desencadenan el bloqueo:
GET / HTTP/1.1rnHost: stuffrn
Rango: bytes=0-18446744073709551615rn
rn
La solución más sencilla es usar la directiva proxy_set_header
para establecer el encabezado Range
en ""
(la cadena vacía), lo que elimina efectivamente el encabezado antes de que la solicitud HTTP se reenvíe al servidor de Windows nombrado por la directiva proxy_pass
:
servidor { escucha 80;
ubicación / {
encabezado_del_conjunto_proxy Rango "";
contraseña_del_proxy http://servidor_de_windows:80;
}
}
Si su aplicação requiere compatibilidad con rango de bytes, puede usar la directiva map
para reemplazar cualquier cadena que se parezca a un entero grande con una cadena vacía, antes de usar la directiva proxy_set_header
para establecer el encabezado Range
:
map $http_range $saferange { "~d{10,}" ""; # si coincide con una cadena de 10 o más enteros, eliminarlo
default $http_range;
}
server {
list 80;
location / {
proxy_set_header Range $saferange;
proxy_pass http://windowsserver:80;
}
}
Alternativamente, puede devolver el código HTTP444
cuando el valor en el encabezado Rango
se asemeja a un entero grande. Código444
indica a NGINX y NGINX Plus que cierren la conexión del cliente inmediatamente sin devolver nada.
servidor { escucha 80;
si ($http_range ~ "d{9,}") {
devuelve 444;
}
ubicación / {
contraseña_proxy http://windowsserver:80;
}
}
Manténgase seguro y aplique el parche, pero si no puede hacerlo inmediatamente, NGINX y NGINX Plus pueden ayudar a cerrar el posible agujero.
Para probar NGINX Plus, comience hoy su prueba gratuita de 30 días o contáctenos para una demostración.
"Esta publicación de blog puede hacer referencia a productos que ya no están disponibles o que ya no reciben soporte. Para obtener la información más actualizada sobre los productos y soluciones F5 NGINX disponibles, explore nuestra familia de productos NGINX . NGINX ahora es parte de F5. Todos los enlaces anteriores de NGINX.com redirigirán a contenido similar de NGINX en F5.com.