Vulnerabilidad en protocolo HTTP2

El 4 de Abril se publicó una vulnerabilidad en la implementación que hacen del protocolo HTTP/2 varios proyectos de servidores web que podría usarse para crashear un equipo y por ello ser utilizado para una denegación de servicio (DoS).

Análisis

HTTP/2 utiliza campos de encabezado en los mensajes de solicitud y respuesta HTTP. Los campos de encabezado pueden incluir listas de encabezados, que a su vez se dividen en bloques de encabezados. Estos bloques de encabezado se transmiten en múltiples fragmentos a la implementación de destino. Las tramas HTTP/2 CONTINUATION se utilizan para continuar una secuencia de fragmentos de bloques de campos. Se utilizan para dividir bloques de encabezado en múltiples tramas. Los otros dos tipos de fragmentos de bloques de encabezado son HEADERS o PUSH_PROMISE. Las tramas CONTINUATION pueden utilizarse para continuar un fragmento de bloque de cabecera que no pudo ser transmitido por las tramas HEADERS o PUSH_PROMISE. Un bloque de cabecera se considera completado cuando el servidor recibe un flag END_HEADERS establecida. Con ello se pretende indicar que no hay más tramas CONTINUATION, HEADERS o PUSH_PROMISE. Se ha descubierto una vulnerabilidad en varias implementaciones que no limitan la cantidad de tramas CONTINUATION que se pueden enviar dentro de un mismo flujo de datos.

La implementación continuará recibiendo tramas mientras no se active el flag END_HEADERS durante estas comunicaciones. Un atacante puede inicializar una conexión a un servidor con tramas HTTP/2 típicas y luego recibir tramas iniciales del servidor. El atacante puede entonces comenzar una petición HTTP sin flags END_HEADERS establecidas. Esto puede permitir a un atacante enviar un flujo de tramas CONTINUATION al servidor de destino, lo que puede provocar un bloqueo por falta de memoria, permitiendo a un atacante lanzar un ataque de denegación de servicio (DoS) contra un servidor de destino que utilice una implementación vulnerable.

Además, un atacante puede enviar tramas CONTINUATION codificadas con HPACK Huffman a una implementación de destino. Esto puede causar el agotamiento de los recursos de la CPU y dar lugar a una denegación de servicio, ya que la CPU debe decodificar cada trama codificada que recibe.

Por ahora se ha observado que los siguientes productos se han visto afectados por esta vulnerabilidad en su implementación de HTTP/2:

 – 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)

 – Tempesta FW (CVE-2024-2758)

Recomendaciones 

Se recomienda revisar las ultimas actualizaciones publicadas para los productos afectados y que se actualice el software a la última versión para mitigar las posibles amenazas.

En caso  de que no se hayan publicados actualizaciones para el producto afectado, como mitigación de la vulnerabilidad, se aconseja considerar la desactivación temporal de HTTP/2 en el servidor.

Referencias

https://kb.cert.org/vuls/id/421644

https://thehackernews.com/2024/04/new-http2-vulnerability-exposes-web.html