Vulnerabilidades en el proyecto Pingora que permiten interferir en solicitudes externas

La empresa Cloudflare ha anunciado que ha solucionado tres vulnerabilidades en el marco Pingora, dos de las cuales han sido clasificadas con un nivel crítico de peligrosidad (9.3 sobre 10). El marco Pingora está escrito en el lenguaje Rust y está diseñado para desarrollar servicios de red seguros y de alto rendimiento. Los proxies construidos con Pingora son utilizados en la red de entrega de contenido de Cloudflare y manejan más de 40 millones de solicitudes por segundo. Las vulnerabilidades han sido solucionadas en la versión Pingora 0.8.0.

Las dos vulnerabilidades más peligrosas permiten realizar ataques del tipo "HTTP Request Smuggling", que permiten eludir sistemas de control de acceso e inmiscuirse en el contenido de las solicitudes de otros usuarios que son procesadas en el mismo hilo entre el frontend y el backend (por ejemplo, para inyectar código JavaScript malicioso en la sesión de otro usuario con el sitio). Los problemas fueron detectados por un participante del programa Bug Bounty, que prevé recompensas por descubrir vulnerabilidades.

En el esquema de acceso al backend a través de un proxy inverso, las solicitudes de los clientes son recibidas por un nodo adicional, que establece una conexión TCP persistente con el backend, que realiza el procesamiento directo de las solicitudes. A través de esta conexión compartida se suelen transmitir solicitudes de diferentes usuarios, que siguen en cadena una tras otra con separación a través de los medios del protocolo HTTP. Los ataques del tipo HTTP Request Smuggling surgen de la diferente interpretación de los encabezados HTTP y las especificaciones del protocolo HTTP en frontends y backends, por ejemplo, cuando el frontend utiliza el encabezado HTTP "Content-Length" para determinar el tamaño de la solicitud y el backend "Transfer-Encoding: chunked".

La primera vulnerabilidad CVE-2026-2835 se encuentra en el código de análisis de solicitudes HTTP/1.0 y es causada por un manejo incorrecto del encabezado "Transfer-Encoding" con múltiples valores, así como por el uso del cierre de la conexión como indicador del final del cuerpo de la solicitud (close-delimited). Pingora solo verificaba la variante "Transfer-Encoding: chunked" e ignoraba este encabezado si se especificaban múltiples valores. En esta situación, Pingora no consideraba el tamaño en el encabezado "Content-Length" y asumía como cuerpo de la solicitud todos los datos recibidos hasta el cierre de la conexión.

Al especificar varios valores en el encabezado "Transfer-Encoding", un atacante podría crear condiciones en las que la solicitud se redirigía al backend, cuyo tamaño real no coincidía con el tamaño de la cadena chunked, calculado en base al encabezado "Transfer-Encoding". Pingora redirigía todos los datos recibidos como una única solicitud, y el backend, como Node.js, calculaba la solicitud en función de "Transfer-Encoding: chunked" y trataba el resto como el inicio de otra solicitud. GET / HTTP/1.0 Host: example.com Connection: keep-alive Transfer-Encoding: identity, chunked Content-Length: 29 0 GET /admin HTTP/1.1 X:

Vulnerabilidades en el proyecto Pingora que permiten interferir en solicitudes externas

La segunda vulnerabilidad CVE-2026-2833 se debe a un manejo incorrecto del encabezado HTTP "Upgrade" en solicitudes HTTP/1.1. Cuando había un encabezado "Upgrade" en la solicitud, el proxy inmediatamente lo pasaba al backend y los demás datos de la solicitud que seguían al encabezado "Upgrade" sin esperar a que el backend respondiera con el código 101 (Switching Protocols). Como resultado, se interrumpía la sincronización de flujo entre el proxy y el backend, y el backend percibía los datos enviados después del encabezado "Upgrade" como una solicitud separada, enviando el resultado de esa solicitud en respuesta a la solicitud que llegó inmediatamente después de otro usuario. GET / HTTP/1.1 Host: example.com Upgrade: foo GET /admin HTTP/1.1 Host: example.com

Vulnerabilidades en el proyecto Pingora que permiten interferir en solicitudes externas
Vulnerabilidades en el proyecto Pingora que permiten interferir en solicitudes externas

Los problemas se manifiestan al utilizar Pingora como un proxy inverso (ingress proxy), que transmite las solicitudes de los usuarios a los backends utilizando los protocolos HTTP/1.0 o HTTP/1.1. La configuración de Pingora empleada en la red de entrega de contenido Cloudflare no permitía explotar vulnerabilidades, ya que Pingora en el CDN no se utiliza como un proxy ingress, redirige solicitudes solo usando el protocolo HTTP/1.1, bloquea solicitudes con valores incorrectos de Content-Length, redirige solo un valor del encabezado "Transfer-Encoding: chunked" y añade en las solicitudes con el encabezado "Upgrade:" un encabezado adicional "Connection: close", que no permite transmitir solicitudes adicionales en la misma conexión.

La tercera vulnerabilidad CVE-2026-2836 (nivel de gravedad 8.4 de 10) provoca la intoxicación de caché (cache poisoning) debido a la generación de la clave de caché (CacheKey) únicamente a partir de la ruta del URI, ignorando el contenido del encabezado «Host». Esta omisión genera claves de caché idénticas para las mismas rutas HTTP en diferentes hosts. La vulnerabilidad puede ser utilizada para reemplazar el contenido de la caché al usar el modo de caché para varios hosts. En Pingora, la caché es una función experimental no recomendada para implementaciones en producción.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster