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
Range: 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
:
server { listen 80;
location / {
proxy_set_header Range "";
proxy_pass http://windowsserver:80;
}
}
Si su aplicación 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,}" ""; # if it matches a string of 10 or more integers, remove it
default $http_range;
}
server {
listen 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.
server { listen 80;
if ($http_range ~ "d{9,}") {
return 444;
}
location / {
proxy_pass 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.