Vulnerabilidades en el proyecto Pingora que permiten a los atacantes interceptar solicitudes de terceros

Cloudflare anunció la corrección de tres vulnerabilidades en su framework Pingora, dos de las cuales se calificaron como críticas (9.3 sobre 10). Pingora, un framework desarrollado en Rust, está diseñado para desarrollar servicios de red seguros y de alto rendimiento. Un proxy desarrollado con Pingora se utiliza en la red de entrega de contenido de Cloudflare y procesa más de 40 millones de solicitudes por segundo. Las vulnerabilidades se corrigieron en Pingora 0.8.0.

Las dos vulnerabilidades más peligrosas permiten ataques de contrabando de solicitudes HTTP, que permiten a los usuarios eludir los sistemas de control de acceso e inyectar JavaScript malicioso en el contenido de las solicitudes de otros usuarios procesadas en el mismo flujo entre el frontend y el backend (por ejemplo, para insertar código JavaScript malicioso en la sesión de otro usuario en el sitio). Los problemas fueron descubiertos por un participante del programa Bug Bounty, que ofrece recompensas por descubrir vulnerabilidades.

En un backend basado en proxy inverso, las solicitudes de los clientes son recibidas por un nodo adicional, que establece una conexión TCP de larga duración con el backend que gestiona el procesamiento de la solicitud. Esta conexión compartida suele transmitir solicitudes de diferentes usuarios, una tras otra en la cadena, separadas por el protocolo HTTP. Los ataques de contrabando de solicitudes HTTP surgen de diferentes interpretaciones de los encabezados HTTP y las especificaciones del protocolo HTTP en los frontends y backends. Por ejemplo, cuando el frontend utiliza el encabezado HTTP "Content-Length" para determinar el tamaño de la solicitud, mientras que el backend utiliza "Transfer-Encoding: chunked".

La primera vulnerabilidad, CVE-2026-2835, está presente en el código de análisis de solicitudes HTTP/1.0 y se debe a la gestión incorrecta del encabezado "Transfer-Encoding" con múltiples valores, así como al uso del cierre de la conexión como fin de la solicitud (delimitado por cierre). Pingora solo comprobó la opción "Transfer-Encoding: chunked" e ignoró este encabezado si contenía múltiples valores. En esta situación, Pingora ignoró el tamaño del encabezado "Content-Length" y consideró todos los datos recibidos antes del cierre de la conexión como el cuerpo de la solicitud.

Al especificar varios valores en el encabezado "Transfer-Encoding", un atacante podría crear condiciones en las que se reenviara al backend una solicitud cuyo tamaño real no coincidiera con el tamaño de la cadena fragmentada calculado con base en el encabezado "Transfer-Encoding". Pingora reenvió todos los datos recibidos como una sola solicitud, y el backend, por ejemplo, Node.js, calculó la solicitud basándose en "Transfer-Encoding: chunked" y procesó el resto como el comienzo 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 a los atacantes interceptar solicitudes de terceros

La segunda vulnerabilidad, CVE-2026-2833, se debe a la gestión incorrecta del encabezado HTTP "Upgrade" en las solicitudes HTTP/1.1. Cuando el encabezado "Upgrade" estaba presente en una solicitud, el proxy reenviaba inmediatamente los datos restantes de la solicitud después del encabezado "Upgrade" al backend, sin esperar a que este respondiera con el código 101 (Conmutación de protocolos). Esto interrumpía la sincronización del flujo entre el proxy y el backend, provocando que este tratara los datos enviados después del encabezado "Upgrade" como una solicitud independiente y enviara el resultado de esta solicitud en respuesta a una solicitud posterior 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 a los atacantes interceptar solicitudes de terceros
Vulnerabilidades en el proyecto Pingora que permiten a los atacantes interceptar solicitudes de terceros

Los problemas surgen cuando Pingora se utiliza como proxy de entrada, reenviando las solicitudes de los usuarios a los backends mediante los protocolos HTTP/1.0 o HTTP/1.1. La configuración de Pingora utilizada en la red de entrega de contenido de Cloudflare impidió la explotación de las vulnerabilidades, ya que Pingora no se utiliza como proxy de entrada en la CDN, reenvía las solicitudes únicamente mediante el protocolo HTTP/1.1, bloquea las solicitudes con valores de Content-Length incorrectos, reenvía solo un valor de encabezado "Transfer-Encoding: chunked" e inserta un encabezado adicional "Connection: close" en las solicitudes con el encabezado "Upgrade:", lo que impide que se transmitan solicitudes adicionales en la misma conexión.

La tercera vulnerabilidad, CVE-2026-2836 (gravedad 8.4 sobre 10), causa envenenamiento de caché debido a la generación de una clave de caché (CacheKey) basada únicamente en la ruta URI, ignorando el contenido del encabezado "Host". Esta falla provoca la generación de claves de caché idénticas para rutas HTTP idénticas a diferentes hosts. Esta vulnerabilidad puede explotarse para falsificar el contenido de la caché al usar caché multihost. El almacenamiento en caché es una función experimental en Pingora y no se recomienda para implementaciones de producción.

Fuente: opennet.ru

Compre alojamiento confiable para sitios con protección DDoS, servidores VPS VDS 🔥 Compra alojamiento web fiable con protección DDoS, servidores VPS VDS | ProHoster