Kompania Cloudflare shpalli eliminimin e tre dobësive në kornizën Pingora, dy prej të cilave janë caktuar me 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 rrjetore të mbrojtura me performancë të lartë. Prok siti i ndërtuar me Pingora përdoret në rrjetin e shpërndarjes së përmbajtjes Cloudflare dhe përpunon më shumë se 40 milion kërkesa në sekondë. Dobësitë janë eliminuar në lëshimin Pingora 0.8.0.
Dy dobësitë më të rrezikshme lejojnë kryerjen e sulmeve të llojit "HTTP Request Smuggling", të cilat mundësojnë anashkalimin e sistemeve të kufizimit të qasjes dhe të përfshihen në përmbajtjen e 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ë injektuar kodin e keq JavaScript në sesionin e një përdoruesi tjetër në sit). Problemet u identifikuan nga një pjesëmarrës në programin Bug Bounty, që parashikon shpërblim për zbulimin e dobësive.
Në skemën me qasje në backend përmes një proksi mbrapsht, kërkesat e klientëve pranohen nga një nyje shtesë, e cila vendos një lidhje TCP të gjatë me backendin, i cili kryen përpunimin e drejtpërdrejt të kërkesave. Përmes kësaj lidhjeje të përbashkët zakonisht kalojnë kërkesat e përdoruesve të ndryshëm, të cilat ndjekin njëra-tjetrën me ndarjen përmes protokollit HTTP. Sulmet e llojit HTTP Request Smuggling ndodhin për shkak të interpretimit të ndryshëm të headerëve HTTP dhe specifikimeve të protokollit HTTP në frontendet dhe backendet, 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 gjendet në kodin e përpunimit të kërkesave HTTP/1.0 dhe shkaktohet nga përpunimi i papërshtatshëm i header-it "Transfer-Encoding" me disa vlera, si dhe përdorimi i mbylljes së lidhjes si një tregues i fundit 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 të treguara. Në këtë situatë, Pingora nuk merrte parasysh madhësinë në header-in "Content-Length", por e konsideronte trupin e kërkesës si të dhënat e marra deri në mbylljen e lidhjes.
Përmes caktimit të disa vlerave në header-in "Transfer-Encoding", sulmuesi mund të krijonte kushte, në të cilat një kërkesë e drejtohej në backend, e cila nuk përputhej me madhësinë e zinxhirit chunked, të llogaritur në bazë të header-it "Transfer-Encoding". Pingora e drejtonte të gjitha të dhënat e marra si një kërkesë të vetme, ndërsa backend-i, për shembull, Node.js, e llogariste kërkesën në bazë të "Transfer-Encoding: chunked" dhe trajtonte pjesën e mbetur si fillim të 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:

Dobësia e dytë CVE-2026-2833 shkaktohet nga përpunimi i papërshtatshëm i header-it HTTP "Upgrade" në kërkesat HTTP/1.1. Nëse në një kërkesë kishte header-in "Upgrade", proksi e kalonte menjëherë të dhënat e tjera të kërkesës, pas header-it "Upgrade", pa pritur një përgjigje nga backend me kodin 101 (Switching Protocols). Si rezultat, sinkronizimi i rrjedhës midis proksi dhe backend-u ndërpritej dhe backend-i e perceptonte të dërguarit e dhënave pas header-it "Upgrade" si një kërkesë të veçantë dhe dërgonte rezultatin e ekzekutimit të kësaj kërkese si përgjigje për kërkesën e ardhur më pas nga një përdorues tjetër. GET / HTTP/1.1 Host: example.com Upgrade: foo GET /admin HTTP/1.1 Host: example.com


Problemet shfaqen kur përdoret Pingora si një proksi mbrapsht (ingress proxy), që transmeton kërkesat e përdoruesve drejt backend-eve me përdorimin e protokolleve HTTP/1.0 ose HTTP/1.1. Konfigurimi i përdorur në rrjetin e shpërndarjes së përmbajtjes Cloudflare nuk lejonte shfrytëzimin e dobësive, pasi Pingora në CDN nuk përdoret si proksi mbrapsht, e drejton vetëm kërkesat duke përdorur protokollin HTTP/1.1, bllokon kërkesat me vlera të papërshtatshme të Content-Length, drejton vetëm një vlerë të header-it "Transfer-Encoding: chunked" dhe i shton kërkesave me header-in "Upgrade:" një header shtesë "Connection: close", i cili nuk lejon dërgimin e kërkesave të tjera në të njëjtën lidhje.
Cilësia e tretë e dobësisë CVE-2026-2836 (niveli i rrezikshmërisë 8.4 nga 10) çon në helmimin e caches (cache poisoning) 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ë e tillë mangësi çon në formimin e çelësave të njëjtë të caches 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 caches kur përdoret regjimi i caches për hoste të shumtë. Në Pingora, caching është një funksion eksperimental, i cili nuk rekomandohet për implementime në punë.
Burimi: opennet.ru
