Vulnerabilidad en HTTP/2 permite ataques de denegación de servicio
Vulnerabilidad en HTTP/2 permite ataques de denegación de servicio

Vulnerabilidad en HTTP/2 permite ataques de denegación de servicio

Una investigación reciente ha revelado que el marco CONTINUATION del protocolo HTTP/2 puede ser explotado para realizar ataques de denegación de servicio (DoS). La técnica fue denominada HTTP/2 CONTINUATION Flood por el investigador de seguridad Bartek Nowotarski, quien informó el problema al Centro de Coordinación CERT (CERT/CC) el 25 de enero de 2024 debido a su potencial para afectar a toda Internet.

Según Cloudflare Radar, el tráfico HTTP/2 representa aproximadamente el 60% del tráfico HTTP humano. En muchos casos, solo una conexión TCP podría ser suficiente para colapsar un servidor. El protocolo HTTP no solo se utiliza para sitios web, sino también para una parte importante de las API (API RESTful).

Los problemas de disponibilidad en importantes APIs y sitios web empresariales y gubernamentales podrían generar pérdidas millonarias o incluso provocar el caos. Por ejemplo, Polonia, principal proveedor de armas pesadas para Ucrania y que opera el centro militar más importante cerca de la frontera con Ucrania, experimenta un aumento en los ataques DDoS procedentes de Rusia.

El CERT/CC informó que «muchas implementaciones HTTP/2 no limitan ni desinfectan adecuadamente la cantidad de tramas de CONTINUATION enviadas dentro de una sola secuencia». Un atacante podría enviar una secuencia de tramas que no se agregarían a la lista de encabezados en la memoria, pero aún así serían procesadas y decodificadas por el servidor o agregadas a la lista de encabezados, lo que provocaría un Fallo de falta de memoria (OOM).

El marco CONTINUATION se utiliza para continuar una secuencia de fragmentos de bloque de encabezado. Según la documentación del RFC 7540, se puede enviar cualquier número de tramas CONTINUATION siempre que la trama anterior esté en la misma secuencia y sea una trama HEADERS, PUSH_PROMISE o CONTINUATION sin el indicador END_HEADERS establecido.

El último fotograma que contiene encabezados tendrá configurado el indicador END_HEADERS, que indica al punto final remoto que es el final del bloque de encabezado.

Nowotarski señaló que CONTINUATION Flood representa una amenaza más grave en comparación con el ataque Rapid Reset, que salió a la luz en octubre de 2023. Rapid Reset fue denominado «el mayor ataque DDoS hasta la fecha».

«Una sola máquina (y en ciertos casos, una simple conexión TCP o un puñado de tramas) tiene el potencial de interrumpir la disponibilidad del servidor, con consecuencias que van desde fallas del servidor hasta una degradación sustancial del rendimiento. Sorprendentemente, las solicitudes que constituyen un ataque no son visibles en los registros de acceso HTTP».

La vulnerabilidad tiene que ver con el manejo incorrecto de HEADERS y múltiples tramas de CONTINUATION que permiten una condición DoS. Un atacante puede iniciar una nueva secuencia HTTP/2 contra un servidor vulnerable y enviar tramas HEADERS y CONTINUATION sin el indicador END_HEADERS establecido, creando una secuencia interminable de encabezados que el servidor necesitaría analizar y almacenar en la memoria.

Los impactos varían según la implementación. Pueden incluir una falla instantánea después de enviar un par de tramas HTTP/2, una falla por falta de memoria o el agotamiento de la CPU, lo que afecta la disponibilidad del servidor.

El RFC 9113 menciona múltiples problemas de seguridad que pueden surgir si las tramas de CONTINUATION no se manejan correctamente. Sin embargo, «no menciona un caso específico en el que las tramas CONTINUATION se envían sin el indicador final END_HEADERS, lo que puede tener repercusiones en los servidores afectados».

Proyectos afectados

  • amphp/http: CVE-2024-2653, Versión afectada: >= 2.0.0 && <= 2.1.0, <= 1.7.2
  • Apache HTTP Server (httpd): CVE-2024-27316, Versión afectada: 2.4.17-2.4.58
  • Apache Tomcat: CVE-2024-24549, Versión afectada: <=11.0.0-M16, <=10.1.18, <=9.0.85, 8.5.0-8.5.98
  • Apache Traffic Server: CVE-2024-31309, Versión afectada: 8.0.0-8.1.9, 9.0.0-9.2.3
  • Envoy proxy (oghttp): CVE-2024-27919, Versión afectada: 1.29.0, 1.29.1
  • Envoy proxy (nghttp2): CVE-2024-30255, Versión afectada: <=1.29.2
  • Golang: CVE-2023-45288**, Versión afectada: <=1.20, <=1.21.8, <=1.22.1
  • h2 Rust crate: N/A, Versión afectada:
  • nghttp2: CVE-2024-28182, Versión afectada: <=1.60.0
  • Node.js: CVE-2024-27983, Versión afectada: <=18.20.0, <=20.12.0, <=21.7.1
  • Tempesta FW: CVE-2024-2758, Versión afectada: 0.7.0

NO afectados: Nginx, Jetty, HAProxy, NetScaler, Varnish.

Esta clase de vulnerabilidad plantea un riesgo importante para la seguridad de Internet. Se recomienda a los usuarios actualizar el software afectado a la última versión para mitigar posibles amenazas. A falta de una solución, se recomienda considerar desactivar temporalmente HTTP/2 en el servidor.