Cloudflare har annonceret, at tre sårbarheder i Pingora-rammen er blevet rettet, hvoraf to er vurderet til en kritisk faregrad (9,3 ud af 10). Pingora-rammen er skrevet i Rust og er designet til at udvikle sikre, højtydende netværkstjenester. Proxyen bygget ved hjælp af Pingora anvendes i Cloudflares indholdsleveringsnet og håndterer over 40 millioner anmodninger pr. sekund. Sårbarhederne er blevet udbedret i udgivelsen Pingora 0.8.0.
De to mest alvorlige sårbarheder tillader udførelse af angreb af typen "HTTP Request Smuggling", som gør det muligt at omgå adgangsbegrænsninger og trænge ind i indholdet af anmodninger fra andre brugere, der behandles i den samme strøm mellem frontend og backend (for eksempel for at indsætte ondsindet JavaScript-kode i en anden brugers session med websitet). Problemerne er blevet identificeret af en deltager i Bug Bounty-programmet, der tilbyder belønninger for opdagelse af sårbarheder.
I scenariet med kald til backend via en omvendt proxy modtager en ekstra enhed klientanmodningerne og opretter en vedvarende TCP-forbindelse til backend'en, der behandler anmodningerne direkte. Gennem denne fælles forbindelse overføres anmodninger fra forskellige brugere normalt i rækkefølge adskilt af HTTP-protokollen. Angreb af typen HTTP Request Smuggling opstår på grund af forskellig fortolkning af HTTP-overskrifter og HTTP-protokol specifikationer på frontend og backend, for eksempel når frontend'en bruger HTTP-overskriften "Content-Length" til at bestemme anmodningens størrelse, mens backend'en bruger "Transfer-Encoding: chunked".
Den første sårbarhed CVE-2026-2835 findes i koden til parsing af HTTP/1.0-anmodninger og skyldes forkert behandling af overskriften "Transfer-Encoding" med flere værdier, samt brugen af forbindelseslukning som et tegn på slutningen af anmodningskroppen (close-delimited). Pingora kontrollerede kun varianten "Transfer-Encoding: chunked" og ignorerede denne overskrift, hvis den indeholdt flere værdier. I denne situation tog Pingora ikke højde for størrelsen i overskriften "Content-Length", men betragtede alle data modtaget indtil forbindelseslukningen som anmodningskroppen.
Ved at angive flere værdier i headeren "Transfer-Encoding" kunne angriberen skabe forhold, hvor en anmodning blev omdirigeret til backend'en, og den faktiske størrelse af anmodningen ikke svarede til størrelsen af chunked-kæden beregnet på baggrund af headeren "Transfer-Encoding". Pingora omdirigerede alle modtagne data som én anmodning, mens backend'en, for eksempel Node.js, beregnede anmodningen baseret på "Transfer-Encoding: chunked" og behandlede den resterende del som begyndelsen på en anden anmodning. GET / HTTP/1.0 Host: example.com Connection: keep-alive Transfer-Encoding: identity, chunked Content-Length: 29 0 GET /admin HTTP/1.1 X:

Den anden sårbarhed CVE-2026-2833 opstår på grund af forkert behandling af HTTP-headeren "Upgrade" i HTTP/1.1-anmodninger. Hvis headeren "Upgrade" findes i anmodningen, sendte proxien straks de øvrige anmodningsdata til backend'en og ventede ikke på et svar fra backend'en med statuskode 101 (Switching Protocols). Dette forstyrrede synkroniseringen af strømmen mellem proxien og backend'en, og backend'en opfattede de data, der blev sendt efter headeren "Upgrade", som en separat anmodning og sendte resultatet af den anmodning som svar på den efterfølgende anmodning fra en anden bruger. GET / HTTP/1.1 Host: example.com Upgrade: foo GET /admin HTTP/1.1 Host: example.com


Problemerne opstår ved brug af Pingora i formen som omvendt proxy (ingress proxy), der transmitterer brugerens anmodninger til backend'en ved hjælp af protokollerne HTTP/1.0 eller HTTP/1.1. Den konfiguration, der anvendes af Cloudflare i sit indholdsleveringsnetværk (CDN), gjorde det umuligt at udnytte sårbarhederne, fordi Pingora i CDN ikke bruges som ingress-proxy, omdirigerer anmodninger udelukkende ved hjælp af protokollen HTTP/1.1, blokerer anmodninger med ugyldige værdier for Content-Length, omdirigerer kun én værdi i headeren "Transfer-Encoding: chunked" og tilføjer en ekstra header "Connection: close" i anmodninger med headeren "Upgrade:" hvilket forhindrer at sende yderligere anmodninger over den samme forbindelse.
Den tredje sårbarhed CVE-2026-2836 (faregrad 8,4 ud af 10) fører til cache-forgiftning (cache poisoning) på grund af genereringen af cache-pladsens nøglen (CacheKey) kun baseret på stien fra URI'en, mens indholdet af "Host"-overskriften ignoreres. Denne mangel fører til dannelsen af identiske cache-nøgler for de samme HTTP-stier til forskellige værter. Sårbarheden kan udnyttes til at erstatte cache-indhold, når der anvendes cache-mode for flere værter. I Pingora er caching en eksperimentel funktion, som ikke anbefales til produktionsimplementeringer.
Kilde: opennet.ru
