Kompania Cloudflare njoftoi për eliminimin e tre dobësive në kornizën Pingora, dy prej të cilave kanë nivel kritik rreziku (9.3 nga 10). Korniza Pingora është shkruar në gjuhën Rust dhe është e destinuar për zhvillimin e shërbimeve rrjetërore të mbrojtura me performancë të lartë. Proxy i ndërtuar me Pingora përdoret në rrjetin e shpërndarjes së përmbajtjes të Cloudflare dhe përpunon më shumë se 40 milion kërkesa në sekondë. Dobësitë janë eliminuar në versionin Pingora 0.8.0.
Dy dobësitë më të rrezikshme lejojnë kryerjen e sulmeve të tipit 'HTTP Request Smuggling', që lejojnë anashkalimin e sistemeve të kufizimeve të qasjes dhe futjen e përmbajtjes së kërkesave të përdoruesve të tjerë, të përpunuara në të njëjtin rrjedh midis frontendit dhe backendit (për shembull, për të futur kodin e dëmshëm JavaScript në sesionin e një përdoruesi tjetër me sitin). Problemet janë identifikuar nga një anëtar i programit Bug Bounty, që parashikon pagesën e një shpërblimi për zbulimin e dobësive.
Në skemën me qasje në backend përmes një proxy të kundërt, kërkesat e klientëve pranohen nga një nyje shtesë, e cila krijon një lidhje TCP me qëndrim të gjatë me backendin që kryen përpunimin e drejtpërdrejtë të kërkesave. Përmes kësaj lidhjeje të përbashkët zakonisht kalohen kërkesat e përdoruesve të ndryshëm, të cilat ndjekin njëra-tjetrën me ndarjen e mjeteve të protokollit HTTP. Sulmet e tipit HTTP Request Smuggling ndodhin për shkak të interpretimeve të ndryshme të header-ave HTTP dhe specifikave të protokollit HTTP në frontend dhe backend, për shembull, kur frontend përdor header-in 'Content-Length' për të përcaktuar madhësinë e kërkesës, ndërsa backend përdor 'Transfer-Encoding: chunked'.
Dobësia e parë CVE-2026-2835 është e pranishme në kodin e analizimit të kërkesave HTTP/1.0 dhe shkaktohet nga trajtimi i papërshtatshëm i header-it 'Transfer-Encoding' me disa vlera, si dhe përdorimi i mbylljes së lidhjes si një shenjë e fundi të trupit të kërkesës (close-delimited). Pingora kontrollonte vetëm variantin 'Transfer-Encoding: chunked' dhe injoronte këtë header nëse kishte disa vlera. Në këtë situatë, Pingora nuk e merrte parasysh madhësinë në header-in 'Content-Length', por e konsideronte trupin e kërkesës të gjithë të dhënat që merrte deri në mbylljen e lidhjes.
Duke tregimi i disa vlerave në titullin 'Transfer-Encoding', sulmuesi mund të krijojë kushte në të cilat kërkesa redaktohej në backend, me një madhësi reale që nuk përputhej me madhësinë e zinxhirit chunked, e cila ishte llogaritur në bazë të titullit 'Transfer-Encoding'. Pingora redaktonte të dhënat e marra si një kërkesë të vetme, ndërsa backend, për shembull, Node.js, e llogariste kërkesën në bazë të 'Transfer-Encoding: chunked' dhe pjesën e mbetur e trajtonte si fillimin e një kërkese tjetër. GET / HTTP/1.0 Host: example.com Connection: keep-alive Transfer-Encoding: identity, chunked Content-Length: 29 0 GET /admin HTTP/1.1 X:

Vulnerabiliteti i dytë CVE-2026-2833 është shkaktuar nga përpunimi i papërshtatshëm i titullit HTTP 'Upgrade' në kërkesat HTTP/1.1. Kur në kërkesë përketohet titulli 'Upgrade', proxy nd immediate e kalonte te backend dhe të dhënat e tjera të kërkesës që pasonin titullin 'Upgrade', pa pritur një përgjigje nga backend me kodin 101 (Switching Protocols). Si rezultat, sinkronizimi i rrjedhës midis proxy-t dhe backend-it ishte i prishur dhe backend-i e perceptonte informacionin e dërguar pas titullit 'Upgrade' si një kërkesë të veçantë dhe dërgonte rezultatin e ekzekutimit të saj në përgjigje të një kërkese tjetër të përdoruesit. GET / HTTP/1.1 Host: example.com Upgrade: foo GET /admin HTTP/1.1 Host: example.com


Problemet shfaqen kur përdoret Pingora në formën e një proxy të kundërt (ingress proxy), që transmeton kërkesat e përdoruesve te backend-et duke përdorur protokollet HTTP/1.0 ose HTTP/1.1. Konfigurimi i përdorur në rrjetin e shpërndarjes të përmbajtjes Cloudflare për Pingora nuk i lejonte shfrytëzimet e këtyre vulnerabiliteteve, pasi Pingora në CDN nuk përdoret si ingress-proxy, redakton kërkesat vetëm duke përdorur protokollin HTTP/1.1, bllokon kërkesat me vlera të papërshtatshme të Content-Length, redakton vetëm një vlerë të titullit 'Transfer-Encoding: chunked' dhe shton në kërkesat me titullin 'Upgrade:' një titull të shtuar 'Connection: close', i cili nuk lejon kalimin e kërkesave të tjera në të njëjtin lidhje.
Cilësia e tretë e dobësisë CVE-2026-2836 (niveli i rrezikshmërisë 8.4 nga 10) çon në helmimin e cache-it për shkak të gjenerimit të çelësit të vendosjes së të dhënave në cache (CacheKey) vetëm në bazë të rrugës nga URI, duke injoruar përmbajtjen e titullit "Host". Një mangësi e tillë çon në formimin e çelësave të njëjtë të caching për rrugët HTTP të njëjta për hoste të ndryshme. Dobësia mund të përdoret për të zëvendësuar përmbajtjen e cache-it kur përdoret mode caching për disa hoste. Në Pingora, caching është një funksion eksperimentale, i cili nuk rekomandohet për implementimet e punës.
Burimi: opennet.ru
