HTTP/2 CONTINUATION Flood

Una nueva investigación ha descubierto que el CONTINUATION frame en el protocolo HTTP/2 se puede explotar para realizar ataques de denegación de servicio (DoS).


La técnica recibió el nombre en código HTTP/2 CONTINUATION Flood por el investigador de seguridad Bartek Nowotarski, quien reportó el problema al Centro de Coordinación CERT (CERT/CC) el 25 de enero de 2024.

Muchas implementaciones HTTP/2 no limitan ni desinfectan adecuadamente la cantidad de tramas de CONTINUACIÓN enviadas dentro de una sola secuencia», dijo CERT/CC en un aviso del 3 de abril de 2024.


Un atacante que puede enviar paquetes a un servidor de destino puede enviar una secuencia de tramas de CONTINUATION que no se agregarán a la lista de encabezados en la memoria, pero que aún así serán procesadas y decodificadas por el servidor o se agregarán a la lista de encabezados, lo que provocará un Fallo de falta de memoria (OOM).»

Al igual que en HTTP/1, HTTP/2 utiliza campos de encabezado dentro de solicitudes y respuestas. Estos campos del encabezado pueden comprender listas de encabezados que, a su vez, se serializan y dividen en bloques de encabezado . Los bloques de encabezado luego se dividen en fragmentos de bloque y se transmiten dentro de HEADER o lo que se llama cuadros de CONTINUATION.

El frame CONTINUATION (tipo=0x9) se utiliza para continuar una secuencia de fragmentos de bloque de encabezado», dice la documentación para RFC 7540 .


Se puede enviar cualquier número de tramas CONTINUATION, siempre y cuando la trama anterior esté en la misma secuencia y sea una trama HEADERS , PUSH_PROMISE o CONTINUATION sin el indicador END_HEADERS establecido.


La última trama que contenga cabeceras tendrá activada la bandera END_HEADERS, que indica al extremo remoto que es el final del bloque de cabeceras.


Según Nowotarski, CONTINUATION Flood es una clase de vulnerabilidades dentro de varias implementaciones del protocolo HTTP/2 que representan una amenaza más grave en comparación con el Rapid Reset Attack que salió a la luz en octubre de 2023.

Una sola máquina (y en ciertos casos, una simple conexión TCP o un puñado de tramas) tiene la capacidad de interrumpir la disponibilidad del servidor, con consecuencias que van desde fallas del servidor hasta una degradación sustancial del rendimiento», dijo el investigador .

Sorprendentemente, las solicitudes que constituyen un ataque no son visibles en los registros de acceso HTTP.»

La vulnerabilidad, en su núcleo, tiene que ver con el manejo incorrecto de HEADERS y múltiples marcos CONTINUATION que preparan el camino para una condición DoS.

En otras palabras, un atacante puede iniciar un nuevo flujo HTTP/2 contra un servidor objetivo que utilice una implementación vulnerable y enviar tramas HEADERS y CONTINUATION sin el flag END_HEADERS establecido, creando un flujo interminable de cabeceras que el servidor HTTP/2 necesitaría analizar y almacenar en memoria.

Aunque el resultado exacto varía en función de la implementación, las repercusiones van desde el bloqueo instantáneo tras enviar un par de tramas HTTP/2 y el bloqueo por falta de memoria hasta el agotamiento de la CPU, lo que afecta a la disponibilidad del servidor.

«El RFC 9113 […] menciona múltiples problemas de seguridad que pueden surgir si las tramas CONTINUATION no se gestionan correctamente», afirma Nowotarski.

Al mismo tiempo, no menciona un caso específico en el que las tramas CONTINUATION se envían sin el flag final END_HEADERS, lo que puede repercutir en los servidores afectados.

El problema afecta a varios proyectos como:

Se recomienda a los usuarios que actualicen el software afectado a la última versión para mitigar las posibles amenazas. En ausencia de una solución, se aconseja considerar deshabilitar temporalmente HTTP/2 en el servidor.

NO se ven afectados los proyectos: Nginx, Jetty, HAProxy, NetScalerVarnish.

En el siguiente enlace también se pueden observar el nº de proyectos afectados a día de hoy.

Fuente original [EN]

Filed under
Ciberseguridad
Previous Next
For this post, the comments have been closed.