builderall


Una nueva investigación ha descubierto que el marco CONTINUATION del protocolo HTTP/2 puede aprovecharse para realizar ataques de denegación de servicio (DoS).


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


"Muchas implementaciones de HTTP/2 no limitan o sanean adecuadamente la cantidad de tramas CONTINUATION enviadas dentro de un único flujo", señaló CERT/CC en un aviso el 3 de abril de 2024.


"Un atacante que pueda enviar paquetes a un servidor objetivo puede enviar un flujo de tramas CONTINUATION que no se anexarán a la lista de encabezados en la memoria, pero que seguirán siendo procesadas y descodificadas por el servidor o se anexarán a la lista de encabezados, causando un fallo fuera de memoria (OOM)".


Al igual que en HTTP/1, HTTP/2 utiliza campos de encabezado en las solicitudes y respuestas. Estos campos de encabezado pueden incluir listas de encabezados que, a su vez, se serializan y dividen en bloques de encabezado. A continuación, los bloques de encabezado se dividen en fragmentos de bloque y se transmiten dentro de HEADERS o lo que se denomina tramas CONTINUATION.


"La trama CONTINUATION (type=0x9) se utiliza para continuar una secuencia de fragmentos de bloques de encabezado", dice la documentación del RFC 7540.


"Se puede enviar cualquier número de tramas CONTINUATION, siempre que la trama precedente esté en el mismo flujo y sea una trama HEADERS, PUSH_PROMISE o CONTINUATION sin el indicador END_HEADERS activado".


La última trama que contenga cabeceras tendrá el indicador END_HEADERS, que indica al punto final remoto que el bloque de cabeceras ha llegado a su fin.


Según Nowotarski, CONTINUATION Flood es una clase de vulnerabilidades dentro de varias implementaciones del protocolo HTTP/2 que suponen una amenaza más grave en comparación con el ataque Rapid Reset 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 el potencial de interrumpir la disponibilidad del servidor, con consecuencias que van desde la caída del servidor hasta una degradación sustancial del rendimiento", afirma el investigador. "Sorprendentemente, las peticiones que constituyen un ataque no son visibles en los registros de acceso HTTP".



La vulnerabilidad, en esencia, tiene que ver con el manejo incorrecto de HEADERS y múltiples tramas CONTINUATION que allanan el camino para una condición de 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 marcos HEADERS y CONTINUATION sin la bandera END_HEADERS establecida, creando un flujo interminable de encabezados 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, los impactos van desde el bloqueo instantáneo tras enviar un par de tramas HTTP/2 y el bloqueo fuera de memoria hasta el agotamiento de la CPU, afectando así 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 la bandera final END_HEADERS, lo que puede repercutir en los servidores afectados".


El problema afecta a varios proyectos como amphp/http (CVE-2024-2653), Apache HTTP Server (CVE-2024-27316), Apache Tomcat (CVE-2024-24549), Apache Traffic Server (CVE-2024-31309), Envoy proxy (CVE-2024-27919 y CVE-2024-30255), Golang (CVE-2023-45288), h2 Rust crate, nghttp2 (CVE-2024-28182), Node. js (CVE-2024-27983) y Tempesta FW (CVE-2024-2758).


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.


Fuente: thehackernews