Recientemente se dio a conocer información sobre una serie de vulnerabilidades que afecta a varias implementaciones del protocolo HTTP/2, entre los cuales se encuentran los más populares, incluidos Apache httpd, Apache Traffic Server, entre otros.
Nombrado como «Continuation flood», este método de ataque puede dirigirse a servidores que soportan HTTP/2.0 y tiene el potencial de agotar la memoria, detener el procesamiento de solicitudes o causar una alta carga de CPU, lo que ralentiza el procesamiento de solicitudes.
Continuation flood es considerada más peligrosa que la vulnerabilidad «Rapid Reset» encontrada el año pasado, ya que permite interrumpir o reducir significativamente el rendimiento del servidor con un flujo de solicitudes especialmente diseñadas, incluso desde una computadora común. En algunos casos, un simple flujo de conexión TCP puede ser suficiente para llevar a cabo el ataque. Además, el tráfico asociado con este tipo de ataque no es fácilmente detectable en los registros de tráfico habitual.
Se menciona que Continuation flood radica en el procesamiento de los marcos HEADERS y CONTINUATION en las solicitudes HTTP/2. Los marcos HEADERS se utilizan para enviar encabezados HTTP, mientras que los marcos CONTINUATION se emplean para dividir el envío de encabezados HTTP en múltiples etapas, especialmente cuando los encabezados no caben en un solo marco o cuando se deben enviar encabezados en varias etapas. Al manipular estos marcos en ciertas combinaciones, se puede aprovechar la vulnerabilidad y lanzar el ataque de «Continuation flood».
El método de ataque «Continuation flood» se basa en enviar un flujo continuo de marcos CONTINUATION sin establecer el indicador END_HEADERS, lo que resulta en el envío masivo de encabezados al servidor y puede agotar la memoria disponible para el proceso. Además, para crear una carga elevada de CPU junto con el agotamiento de memoria, un atacante puede utilizar la compresión del contenido de los marcos CONTINUATION mediante el formato HPACK, que requiere cálculos para su análisis.
En las implementaciones del protocolo HTTP/1.1, se aplicaron límites en el tamaño de los encabezados y se estableció un tiempo de espera para las conexiones para protegerse contra la inundación del servidor con encabezados. Sin embargo, en HTTP/2, muchas implementaciones no proporcionaron métodos similares de protección debido a la complejidad del protocolo.
Continuation flood es particularmente peligrosa para los usuarios de Node.js (CVE-2024-27983), ya que esta implementación puede fallar al recibir solo unos pocos marcos enviados por un atacante. Debido a condiciones de carrera en Node.js, un atacante puede provocar un fallo al cerrar las conexiones mientras se envía un flujo de encabezado incompleto.
A continuación se muestran un listado de las vulnerabilidades detectadas dentro de las diferentes implementaciones:
- CVE-2024-27983 (Node.js): Un atacante puede hacer que el servidor HTTP/2 de Node.js no esté disponible enviando una pequeña cantidad de paquetes de tramas HTTP/2 con algunos marcos HTTP/2 en su interior, lo que puede provocar una condición de carrera.
- CVE-2024-27919 (Envoy): El códec oghttp de Envoy no restablece una solicitud cuando se exceden los límites del mapa de encabezado, lo que permite a un atacante enviar una secuencia de marcos CONTINUATION sin configurar el bit END_HEADERS, provocando un consumo ilimitado de memoria.
- CVE-2024-2758 (Tempesta FW): Los límites de velocidad de Tempesta FW no están habilitados de forma predeterminada o están configurados incorrectamente, lo que puede llevar a un consumo excesivo de recursos o a un manejo inadecuado de las solicitudes HTTP.
- CVE-2024-2653 (amphp/http): recopilará marcos CONTINUATION HTTP/2 en un búfer ilimitado y no comprobará el límite de tamaño del encabezado hasta que haya recibido el indicador END_HEADERS, lo que puede provocar un bloqueo de OOM.
- CVE-2023-45288 (Go net/http y net/http2): Estas implementaciones no limitan el número de marcos CONTINUATION leídas para una solicitud HTTP/2, lo que puede provocar un consumo excesivo de CPU al procesar un conjunto grande de encabezados.
- CVE-2024-28182 (nghttp2): Una implementación que utilice la biblioteca nghttp2 seguirá recibiendo marcos CONTINUATION y no devolverá la llamada a la aplicación para permitir la visibilidad de esta información antes de que restablezca la transmisión, lo que puede provocar un DoS.
- CVE-2024-27316 (Apache Httpd): Un atacante puede enviar marcos HTTP/2 CONTINUATION sin el indicador END_HEADERS establecido en un flujo continuo a una implementación de Apache Httpd, lo que no finalizará adecuadamente la solicitud antes de tiempo.
- CVE-2024-31309 (Apache Traffic Server): Un ataque DoS puede hacer que Apache Traffic Server consuma más recursos en el servidor.
- CVE-2024-30255 (Envoy): La pila de protocolos HTTP/2 en las versiones 1.29.2 o anteriores de Envoy es vulnerable al agotamiento de la CPU debido a la inundación de marcos CONTINUATION.
Si estas interesado en poder conocer mas al respecto, puedes consultar los detalles en el siguiente enlace.