Cloudflare teatas, et on kĂ”rvaldanud kolm haavatavust Pingora raamistikus, millest kahte on antud kriitiline ohtlikkuse tase (9.3 kĂŒmnest). Pingora raamistik on kirjutatud Rust keeles ja on mĂ”eldud turvaliste, kĂ”rge jĂ”udlusega vĂ”rguteenuste arendamiseks. Pingora abil ehitatud proksi kasutatakse Cloudflare'i sisu edastamise vĂ”rgus ja see töötleb ĂŒle 40 miljoni pĂ€ringu sekundis. Haavatavused on kĂ”rvaldatud Pingora versioonis 0.8.0.
Kaks kĂ”ige ohtlikumat haavatavust vĂ”imaldavad HTTP Request Smuggling rĂŒnnakute teostamist, mis vĂ”imaldavad eirata ligipÀÀsupiirangu sĂŒsteeme ja siseneda teiste kasutajate pĂ€ringute sisusse, mis töötlevad sama voogu frontend'i ja backend'i vahel (nĂ€iteks kurjasti JavaScript-koodi sisestamine teise kasutaja sessioonis veebilehega). Probleemid tuvastati Bug Bounty programmi osalise poolt, mis pakub tasu haavatavuste avastamise eest.
Backend'iga suhtlemise skeemis lĂ€bi tagasipöördetud proksi, vĂ”tab kliendi pĂ€ringud vastu tĂ€iendav sĂ”lm, mis loob pikaajalise TCP-ĂŒhenduse backend'iga, mis tegeleb pĂ€ringute otsese töötlemisega. Selle ĂŒhise ĂŒhenduse kaudu edastatakse tavaliselt erinevate kasutajate pĂ€ringud, mis jĂ€rgivad jĂ€rjestikku ĂŒksteist HTTP protokolli vahendusel. HTTP Request Smuggling rĂŒnnakud tekivad HTTP pĂ€iste ja protokolli spetsifikatsioonide erineva tĂ”lgendamise tĂ”ttu frontend'ides ja backend'ides, nĂ€iteks siis, kui frontend kasutab pĂ€ringu suuruse mÀÀramiseks HTTP pĂ€ist 'Content-Length', ja backend'i jaoks 'Transfer-Encoding: chunked'.
Esimene haavatavus CVE-2026-2835 on olemas HTTP/1.0 pĂ€ringute analĂŒĂŒsi koodis ja see on tingitud 'Transfer-Encoding' pĂ€iste vale töötlemisest mitme vÀÀrtusega, samuti ĂŒhenduse sulgemise kasutamisest pĂ€ringu keha lĂ”pu tĂ€hisena (close-delimited). Pingora kontrollis ainult 'Transfer-Encoding: chunked' varianti ja ignoreeris seda pĂ€ist, kui selles olid mitmed vÀÀrtused. Sellises olukorras ei arvestanud Pingora 'Content-Length' pĂ€ise suurustega ja pidas pĂ€ringu kehaks kogu andmeid, mis saadi enne ĂŒhenduse sulgemist.
Mitme 'Transfer-Encoding' pĂ€ise vÀÀrtuse nĂ€itamise kaudu vĂ”is rĂŒndaja luua olukorra, kus backend'ile suunati pĂ€ring, mille tegelik suurus ei vastanud chunked-ahelas arvutatud suurusele, mis pĂ”hines 'Transfer-Encoding' pĂ€istel. Pingora edastas kĂ”ik saadud andmed ĂŒhe pĂ€ringuna, ja backend, nĂ€iteks Node.js, arvutas pĂ€ringu 'Transfer-Encoding: chunked' ja töötles ĂŒlejÀÀnud osa kui teise pĂ€ringu algust. GET / HTTP/1.0 Host: example.com Connection: keep-alive Transfer-Encoding: identity, chunked Content-Length: 29 0 GET /admin HTTP/1.1 X:

Teine haavatavus CVE-2026-2833 on tingitud HTTP/1.1 pĂ€ringute 'Upgrade' pĂ€iste vale töötlemisest. Kui pĂ€ringus on 'Upgrade' pĂ€is, edastab proksi kohe backend'ile ka kĂ”ik ĂŒlejÀÀnud pĂ€ringu andmed, mis jĂ€rgivad 'Upgrade' pĂ€ist, ootamata backend'ilt vastust koodiga 101 (Switching Protocols). Selle tĂ”ttu hĂ€iritakse voogude sĂŒnkroniseerimist proksi ja backend'i vahel ning backend tĂ”lgendab 'Upgrade' pĂ€ise jĂ€rel saadetud andmeid kui eraldi pĂ€ringut, ja saadab selle pĂ€ringu tĂ€itmise tulemuse vastusena jĂ€rgnevatele pĂ€ringutele teiselt kasutajalt. GET / HTTP/1.1 Host: example.com Upgrade: foo GET /admin HTTP/1.1 Host: example.com


Probleemid ilmnevad Pingora kasutamisel tagasipöördetud proksi (ingress proxy) vormis, mis edastab kasutajate pĂ€ringud backend'idele, kasutades protokolle HTTP/1.0 vĂ”i HTTP/1.1. Cloudflare'i sisu edastamise vĂ”rgu konfiguratsioon Pingora jaoks ei vĂ”imaldanud haavatavusi Ă€ra kasutada, kuna Pingora ei kasuta CDN-is ingress-proksi, edastab pĂ€ringud ainult HTTP/1.1 protokolli kaudu, blokeerib vale 'Content-Length' vÀÀrtustega pĂ€ringud, edastab ainult ĂŒhe 'Transfer-Encoding: chunked' pĂ€ise vÀÀrtuse ja lisab pĂ€ringutesse, kus on 'Upgrade:' pĂ€is, tĂ€iendava 'Connection: close' pĂ€ise, mis ei luba edastada tĂ€iendavaid pĂ€ringuid samas ĂŒhenduses.
Kolmas haavand CVE-2026-2836 (ohtlikkuse tase 8.4 skaalal 10) viib cache poisoning'uni, kuna kassi andmed (CacheKey) genereeritakse ainult URI teest, ignoreerides 'Host' pĂ€ise sisu. Taoline puudus viib sama kassi vĂ”tme loomise juurde sama HTTP tee jaoks erinevatelt hostidelt. Haavandit saab kasutada kassi sisu asendamiseks mitme hostiga kassimise reĆŸiimi kasutamise korral. Pingoras on kassimine katsetamisfunktsioon, mis ei ole tööinstalatsioonidele soovitatav.
Allikas: opennet.ru
