Investigadores de la empresa Calif publicaron la descripción de una nueva técnica de ataque remoto de tipo denial of service, denominada HTTP/2 Bomb. Según los investigadores, el comportamiento vulnerable está presente en las configuraciones HTTP/2 por defecto de los servidores NGINX, Apache HTTPD, Microsoft IIS, Envoy y Cloudflare Pingora. La técnica combina dos enfoques ya conocidos —una bomba de compresión y el mantenimiento de la conexión al estilo Slowloris— para agotar la memoria RAM del servidor. Los parches solo están disponibles para NGINX y Apache HTTPD; para el resto de productos no existían correcciones en el momento de la publicación. Se recomienda a los administradores de servidores con HTTP/2 habilitado evaluar de inmediato la aplicabilidad de la amenaza y adoptar medidas de mitigación.
Mecanismo del ataque
El ataque se dirige a HPACK, el algoritmo de compresión de cabeceras del protocolo HTTP/2, que utiliza codificación de Huffman y, según Cloudflare, proporciona de media una reducción del tamaño de las cabeceras de un 30 %. HPACK se diseñó como un sustituto del compresor genérico de cabeceras, resistente a ataques de la clase CRIME.
La diferencia clave entre HTTP/2 Bomb y la clásica HPACK Bomb (CVE-2016-6581, revelada en 2016) radica en la fuente de amplificación. La variante clásica insertaba un valor grande en la tabla HPACK y lo referenciaba repetidamente, lo que llevó a la introducción de límites defensivos sobre el tamaño total de las cabeceras decodificadas. La nueva variante actúa de otro modo: las cabeceras están prácticamente vacías y la amplificación se consigue a través de las estructuras de datos de servicio que el servidor reserva para cada entrada de la tabla. El límite sobre el tamaño de los datos decodificados no se activa, ya que en la práctica no hay nada que decodificar.
El segundo componente del ataque es el mantenimiento de la conexión. El atacante establece una ventana de control de flujo (flow-control window) igual a cero, lo que impide al servidor liberar la memoria reservada. Esta técnica es análoga al ataque Slowloris, que mantiene abiertos numerosos enlaces HTTP, agotando los recursos del servidor a nivel de aplicación.
Los investigadores también señalan la relación con una serie de vulnerabilidades ya conocidas en implementaciones de HTTP/2: CVE-2016-8740 (DoS mediante tramas CONTINUATION especialmente formadas en Apache HTTP Server) y CVE-2016-1546 (agotamiento de hilos de trabajo en una conexión HTTP/2 de Apache).
Evaluación del impacto
Según afirma Calif, declaraciones que deben tomarse con cautela al proceder de una única fuente sin confirmación independiente, un solo cliente con una conexión de 100 Mbit/s sería capaz de dejar inaccesible un servidor vulnerable en cuestión de segundos. También se sostiene que un único cliente puede acaparar y mantener hasta 32 GB de memoria del servidor en Apache HTTPD y Envoy en aproximadamente 20 segundos.
Como subrayan los investigadores, el problema fundamental radica en que la especificación de HTTP/2 evalúa el riesgo para la memoria exclusivamente a través del coeficiente de amplificación, cuando el factor crítico es el tiempo de retención de la memoria reservada. Un factor de 70:1 es inocuo si la memoria se libera al finalizar la petición, pero se convierte en un vector de ataque cuando el protocolo permite al cliente mantener la conexión abierta prácticamente sin coste.
Potencialmente están afectadas todas las organizaciones que utilizan los servidores web mencionados con HTTP/2 habilitado en la configuración por defecto. Los servidores más expuestos son aquellos de acceso público que procesan conexiones HTTP/2 directas de clientes. Es importante destacar que: por el momento no se ha observado explotación activa en ataques reales, y ninguno de los CVE relacionados figura en el catálogo CISA KEV. El estado de la amenaza es la existencia de una descripción pública de PoC.
Recomendaciones de mitigación
Las medidas de protección disponibles varían según el software de servidor utilizado:
- Apache HTTPD: actualizar el módulo mod_http2 a la versión v2.0.41, que contiene la corrección. Si no es posible actualizar, deshabilitar HTTP/2 estableciendo la directiva
Protocols http/1.1. - NGINX: según los investigadores, la corrección está disponible en la versión 1.29.8+, que añade la directiva
max_headerscon un valor por defecto de 1000. Si no es posible actualizar, se recomienda deshabilitar HTTP/2 mediante la directivahttp2 off;. Debe tenerse en cuenta que esta información sobre la versión de NGINX procede de una única fuente y no está respaldada por un boletín oficial de NGINX. - Microsoft IIS, Envoy, Cloudflare Pingora: en el momento de la publicación de la investigación no existían parches. Para estos productos, la única medida disponible sigue siendo deshabilitar HTTP/2, si la infraestructura lo permite, o bien limitar el número de conexiones HTTP/2 simultáneas a nivel de balanceador de carga o WAF.
Adicionalmente se recomienda:
- Realizar una auditoría de las configuraciones de los servidores web para detectar el uso de HTTP/2 por defecto.
- Configurar la monitorización del consumo anómalo de memoria por parte de los procesos del servidor web.
- Limitar el número máximo de conexiones HTTP/2 simultáneas desde una misma dirección IP.
- Seguir la publicación de boletines oficiales de seguridad por parte de los fabricantes de los productos afectados.
Las organizaciones que operan Apache HTTPD y NGINX con HTTP/2 deberían dar prioridad a la aplicación de las actualizaciones disponibles —mod_http2 v2.0.41 para Apache y la versión 1.29.8+ para NGINX. Para los servidores Microsoft IIS, Envoy y Cloudflare Pingora es necesario evaluar la posibilidad de deshabilitar temporalmente HTTP/2 o implantar controles compensatorios a nivel de infraestructura de red hasta la publicación de parches oficiales. Dado que la técnica explota un comportamiento por defecto y no requiere autenticación, retrasar la mitigación genera un riesgo real para la disponibilidad de los servicios públicos.