Ranjivosti u projektu Pingora koje omogućuju infiltraciju stranih zahtjeva

Tvrtka Cloudflare objavila je otklanjanje tri ranjivosti u okviru Pingora, od kojih su dvije klasificirane kao kritične (9.3 od 10). Okvir Pingora napisan je na jeziku Rust i namijenjen je razvoju sigurnih, visokih performansi mrežnih usluga. Proxy izgrađen pomoću Pingora koristi se u mreži za isporuku sadržaja Cloudflare i obrađuje više od 40 milijuna zahtjeva u sekundi. Ranjivosti su otklonjene u izdanju Pingora 0.8.0.

Dvije najopasnije ranjivosti omogućuju izvođenje napada tipa 'HTTP Request Smuggling', koji omogućuju zaobilaženje sustava kontrole pristupa i infiltriranje u sadržaj zahtjeva drugih korisnika obrađenih u istoj poveznici između frontend-a i backend-a (na primjer, za umetanje zlonamjernog JavaScript koda u sesiju drugog korisnika s web stranicom). Problemi su otkriveni od strane sudionika programa Bug Bounty, koji predviđa isplatu nagrade za otkrivanje ranjivosti.

U shemi s pristupom backend-u kroz obrnuti proxy, zahtjeve klijenata prihvaća dodatni čvor, koji uspostavlja dugotrajnu TCP vezu s backend-om, koji izravno obrađuje zahtjeve. Kroz tu zajedničku vezu obično se prenose zahtjevi različitih korisnika, koji slijede jedan za drugim s razdvajanjem sredstvima protokola HTTP. Napadi tipa HTTP Request Smuggling javljaju se zbog različitih tumačenja HTTP zaglavlja i specifikacija protokola HTTP na frontendima i backendima, na primjer, kada frontend koristi za određivanje veličine zahtjeva HTTP zaglavlje 'Content-Length', a backend 'Transfer-Encoding: chunked'.

Prva ranjivost CVE-2026-2835 prisutna je u kodiranju za analizu zahtjeva HTTP/1.0 i uzrokovana je nepravilnom obradom zaglavlja 'Transfer-Encoding' s više vrijednosti, kao i korištenjem zatvaranja veze kao oznake kraja tijela zahtjeva (close-delimited). Pingora je provjeravala samo varijantu 'Transfer-Encoding: chunked' i ignorirala ovo zaglavlje ako je imalo više vrijednosti. U ovoj situaciji Pingora nije uzimala u obzir veličinu u zaglavlju 'Content-Length', već je smatrala tijelom zahtjeva sve podatke primljene do zatvaranja veze.

Navođenjem više vrijednosti u zaglavlju "Transfer-Encoding", napadač je mogao stvoriti uvjete pod kojima bi se zahtjev preusmjerio na backend, čija stvarna veličina nije odgovarala veličini chunked-lanca izračunatoj na temelju zaglavlja "Transfer-Encoding". Pingora je preusmjeravala sve primljene podatke kao jedan zahtjev, dok je backend, primjerice, Node.js, izračunavao zahtjev na temelju "Transfer-Encoding: chunked" i preostalu poruku obrađivao kao početak drugog zahtjeva. GET / HTTP/1.0 Host: example.com Connection: keep-alive Transfer-Encoding: identity, chunked Content-Length: 29 0 GET /admin HTTP/1.1 X:

Ranjivosti u projektu Pingora koje omogućuju infiltraciju stranih zahtjeva

Druga ranjivost CVE-2026-2833 uzrokovana je nepravilnom obradom HTTP-zaglavlja "Upgrade" u HTTP/1.1 zahtjevima. Kada postoji zaglavlje "Upgrade" u zahtjevu, proxy odmah prosljeđuje backendu i ostale podatke zahtjeva koji slijede nakon zaglavlja "Upgrade", ne čekajući odgovor od backenda s kodom 101 (Switching Protocols). Zbog toga je došlo do prekida sinkronizacije toka između proxyja i backenda, a backend je doživio poslane podatke nakon zaglavlja "Upgrade" kao odvojeni zahtjev i poslao rezultat izvršenja tog zahtjeva kao odgovor na dolazni zahtjev drugog korisnika. GET / HTTP/1.1 Host: example.com Upgrade: foo GET /admin HTTP/1.1 Host: example.com

Ranjivosti u projektu Pingora koje omogućuju infiltraciju stranih zahtjeva
Ranjivosti u projektu Pingora koje omogućuju infiltraciju stranih zahtjeva

Problemi se pojavljuju prilikom korištenja Pingore u obliku obrnutog proxyja (ingress proxy), koji prosljeđuje zahtjeve korisnika backendovima koristeći protokole HTTP/1.0 ili HTTP/1.1. Konfiguracija Pingore primijenjena u mreži za isporuku sadržaja Cloudflare nije dopuštala iskorištavanje ranjivosti, budući da Pingora u CDN-u nije korištena kao ingress-proxy, prosljeđuje zahtjeve samo koristeći protokol HTTP/1.1, blokira zahtjeve s nepravilnim vrijednostima Content-Length, prosljeđuje samo jednu vrijednost zaglavlja "Transfer-Encoding: chunked" i dodaje u zahtjeve s zaglavljem "Upgrade:" dodatno zaglavlje "Connection: close", što onemogućava slanje dodatnih zahtjeva u istom povezivanju.

Treća ranjivost CVE-2026-2836 (stepen opasnosti 8.4 od 10) dovodi do trovanja kešom (cache poisoning) zbog generisanja ključa za smeštaj podataka u kešu (CacheKey) isključivo na osnovu putanje iz URI, ignorišući sadržaj zaglavlja „Host“. Ova greška dovodi do formiranja identičnih ključeva keširanja za iste HTTP putanje ka različitim hostovima. Ranjivost se može iskoristiti za promenu sadržaja keša kada se koristi režim keširanja za više hostova. U Pingora, keširanje je eksperimentalna funkcija koja se ne preporučuje za radna implementacija.

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster