Nuevas fallas en QPACK pueden colapsar servidores HTTP/3 y amplificar la memoria hasta 4.000 veces

La empresa de ciberseguridad FoxIO ha divulgado una serie de vulnerabilidades en QPACK, el mecanismo de compresión de cabeceras que utiliza HTTP/3, las cuales permiten que un atacante remoto sin autenticación previa provoque un fallo por agotamiento de memoria en múltiples servidores web con una única conexión. El equipo también ha liberado código de prueba de concepto que funciona.

El ataque se basa en enviar un pequeño conjunto de cabeceras HTTP comprimidas que, al ser descomprimidas, se expanden en la memoria hasta ocupar miles de veces más espacio que los datos recibidos. De acuerdo con FoxIO, esto es suficiente para dejar sin memoria a un servidor con la configuración predeterminada.

Las fallas solo permiten ataques de denegación de servicio. No hay indicios de robo de información ni de ejecución de código, y tampoco se han reportado incidentes en entornos reales. Ya existen correcciones para quic-go, Cloudflare quiche, lsquic y Wireshark, pero Bun, la biblioteca h3 de Rust y aioquic seguían sin parche en el momento de la divulgación.

Causa común en QPACK

FoxIO identificó la misma clase de fallo en siete de las diez pilas HTTP/3 que analizó. El origen está en QPACK, el esquema que comprime las cabeceras de solicitud para que los campos repetidos viajen como un código corto en lugar del texto completo.

Se supone que el servidor debe limitar el tamaño de las cabeceras una vez descomprimidas. Sin embargo, las pilas afectadas limitan el lote comprimido que llega por la red, pero no el resultado descomprimido, o aplican el límite demasiado tarde. Así, una sola solicitud puede expandirse hasta cientos de miles de entradas de cabecera que el servidor mantiene en memoria.

El alcance es amplio porque estas pilas sustentan software muy común. quic-go es la biblioteca de Go que utilizan Caddy, Traefik y cloudflared; lsquic es la biblioteca de LiteSpeed, usada en LiteSpeed Web Server y OpenLiteSpeed; y el servidor HTTP/3 de Bun se ejecuta sobre lsquic.

El atacante no necesita cuenta ni acceso especial. Además, como HTTP/3 funciona sobre UDP, la solicitud llega al servidor antes de que se apliquen muchos de los filtros habituales.

Estado de las correcciones

A fecha del 22 de octubre de 2026, FoxIO clasifica como no afectados a IIS, Envoy, ngtcp2/nghttp3 y quiche de Google, porque cada uno limita las cabeceras descomprimidas durante la decodificación y no después.

La amplificación varía según la pila, según las pruebas de FoxIO con configuraciones predeterminadas. En quic-go, un lote comprimido de 1 MB se descomprimió en unas 160.000 cabeceras y dejó aproximadamente 15 MB retenidos en la solicitud, unas 17 veces los bytes enviados; el aviso propio de quic-go estima la expansión posible en torno a 50 veces.

Un segundo método eleva mucho más la proporción: el atacante almacena una entrada de cabecera de unos 4 KB y luego la referencia miles de veces mediante referencias de un byte, y el servidor reconstruye la entrada completa en cada referencia. FoxIO midió aproximadamente 4.000 veces en Bun y entre 600 y 1.800 veces en lsquic.

Bun presenta el peor caso. Su servidor HTTP/3, que la documentación de Bun califica como experimental, utiliza lsquic pero reemplaza la parte que limita la memoria de cabeceras con código propio, que verifica cada cabecera pero nunca el total acumulado. FoxIO descubrió que, cuando las cabeceras descomprimidas superan los 2 GB, un contador de tamaño en ese código se desborda a cero y el servidor entra en un bucle del que nunca sale.

Según FoxIO, un solo flujo de unos 516 KB en la red deja al servidor bloqueado al 100 % de CPU sin recuperación, impidiendo nuevas solicitudes. La ausencia del total acumulado es lo que permite alcanzar el desbordamiento; el límite propio de lsquic de 64 KB lo evita.

El caso de Wireshark

Wireshark es un caso distinto de las fallas de servidor. Su problema provoca el colapso del diseccionador de HTTP/3, la parte que lee HTTP/3 de una captura, cuando Wireshark descifra tráfico usando un archivo key-log o abre un archivo de captura que contiene secretos de descifrado. No se trata de un servidor al que un atacante acceda por la red. Wireshark afirmó que "no tiene conocimiento de ningún exploit para este problema".

Recomendaciones

Los operadores deben actualizar a las versiones corregidas mencionadas. Para las pilas sin parche, FoxIO ofrece medidas provisionales: en Bun, no exponer un servidor HTTP/3; en mitmproxy, desactivar HTTP/3 pasando –set http3=false; y en la biblioteca h3 de Rust, establecer un límite razonable con max_field_section_size.

La corrección de lsquic, publicada el 16 de julio de 2026, limita cuántos conjuntos de cabeceras descomprimidas mantiene un servidor por flujo, con un valor predeterminado de uno. FoxIO señaló que el trabajo comenzó tras la investigación de Gal Bar Nahum sobre "MadeYouReset", una técnica de denegación de servicio contra HTTP/2 que planteaba si la compresión de cabeceras de HTTP/3 tenía una debilidad similar.

Cybersecurity
Cybersecurity
Cybersecurity
Cybersecurity

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *