Spoločnosť Cloudflare oznámila, že opravila tri zraniteľnosti vo frameworku Pingora, z ktorých dve majú kritickú úroveň nebezpečenstva (9.3 z 10). Framework Pingora je napísaný v jazyku Rust a je určený na vývoj zabezpečených vysoko výkonných sieťových služieb. Proxy postavené pomocou Pingora sa využíva v sieti na poskytovanie obsahu Cloudflare a spracováva viac ako 40 miliónov požiadaviek za sekundu. Zraniteľnosti boli opravené v verzii Pingora 0.8.0.
Dvoma najnebezpečnejšími zraniteľnosťami sú útoky typu „HTTP Request Smuggling“, ktoré umožňujú obchádzanie systémov obmedzovania prístupu a vkladať sa do obsahu požiadaviek iných používateľov spracovávaných v tej istej vlne medzi frontendom a backendom (napríklad na vkladanie škodlivého JavaScript kódu do relácie iného používateľa so stránkou). Problémy boli identifikované účastníkom programu Bug Bounty, ktorý predpokladá vyplatenie odmeny za objavenie zraniteľností.
V schéme s prístupom na backend cez reverzný proxy prijíma požiadavky klientov dodatočný uzol, ktorý vytvára dlhodobé TCP spojenie s backendom, ktorý priamo spracováva požiadavky. Cez toto spoločné spojenie sa zvyčajne prenášajú požiadavky od rôznych používateľov, ktoré nasledujú po sebe v reťazci s rozdelením prostriedkami protokolu HTTP. Útoky typu HTTP Request Smuggling vznikajú z odlišnej interpretácie HTTP hlavičiek a špecifikácií protokolu HTTP na frontendoch a backendoch, napríklad keď frontend používa na určenie veľkosti požiadavky HTTP hlavičku „Content-Length“, zatiaľ čo backend „Transfer-Encoding: chunked“.
Prvá zraniteľnosť CVE-2026-2835 sa vyskytuje v kóde analýzy požiadaviek HTTP/1.0 a je spôsobená nesprávnym spracovaním hlavičky „Transfer-Encoding“ s viacerými hodnotami a taktiež využívaním uzavretia spojenia ako signálu konca tela požiadavky (close-delimited). Pingora kontroloval iba variant „Transfer-Encoding: chunked“ a ignoroval túto hlavičku, ak obsahovala viacero hodnôt. V tejto situácii Pingora nezohľadnil veľkosť v hlavičke „Content-Length“, a považoval za telo požiadavky všetky údaje prijaté do uzavretia spojenia.
Uvedením viacerých hodnôt v hlavičke „Transfer-Encoding“ mohol útočník vytvoriť podmienky, pri ktorých bol prístup presmerovaný na backend, pričom skutočná veľkosť žiadosti nezhodovala s veľkosťou chunked-reťazca, vypočítanou na základe hlavičky „Transfer-Encoding“. Pingora presmeroval všetky prijaté údaje ako jednu žiadosť, a backend, napríklad Node.js, vypočítal žiadosť na základe „Transfer-Encoding: chunked“ a zostávajúci segment spracoval ako začiatok inej žiadosti. GET / HTTP/1.0 Host: example.com Connection: keep-alive Transfer-Encoding: identity, chunked Content-Length: 29 0 GET /admin HTTP/1.1 X:

Druhá zraniteľnosť CVE-2026-2833 je spôsobená nesprávnym spracovaním HTTP-hlavičky „Upgrade“ v HTTP/1.1 požiadavkách. Pri prítomnosti hlavičky „Upgrade“ v požiadavke, proxy ihneď predala backendu aj ostatné údaje požiadavky nasledovné za hlavičkou „Upgrade“, bez toho, aby čakala na odpoveď od backendu s kódom 101 (Switching Protocols). V dôsledku toho sa synchronizácia toku medzi proxy a backendom narušila a backend považoval údaje odoslané po hlavičke „Upgrade“ za samostatnú požiadavku a odoslal výsledok vykonania tejto požiadavky ako odpoveď na následnú požiadavku iného používateľa. GET / HTTP/1.1 Host: example.com Upgrade: foo GET /admin HTTP/1.1 Host: example.com


Problémy sa prejavujú pri používaní Pingora vo forme reverznej proxy (ingress proxy), ktorá preposiela požiadavky používateľov na backendy pomocou protokolov HTTP/1.0 alebo HTTP/1.1. Použitá konfigurácia Pingora v sieti distribúcie obsahu Cloudflare neumožňovala zneužitie zraniteľností, pretože Pingora v CDN nie je používaný ako ingress-proxy, presmerováva požiadavky len pomocou protokolu HTTP/1.1, blokuje požiadavky s nesprávnymi hodnotami Content-Length, presmerováva iba jednu hodnotu hlavičky „Transfer-Encoding: chunked“ a do požiadaviek s hlavičkou „Upgrade:“ pridáva ďalšiu hlavičku „Connection: close“, ktorá neumožňuje prenášať ďalšie požiadavky v tom istom spojení.
Tretia zraniteľnosť CVE-2026-2836 (stupeň nebezpečenstva 8.4 z 10) vedie k otrave cache (cache poisoning) v dôsledku generovania kľúča umiestnenia dát v cache (CacheKey) iba na základe cesty z URI, pričom sa ignoruje obsah hlavičky „Host“. Takáto nedokonalosť vedie k vytvoreniu rovnakých kľúčov cache pre rovnaké HTTP cesty k rôznym hostiteľom. Zraniteľnosť môže byť použitá na nahradenie obsahu cachu pri používaní režimu caching pre viacero hostiteľov. V Pingora je cachovanie experimentálnou funkciou, ktorá sa neodporúča na pracovné implementácie.
Zdroj: opennet.ru
