„Cloudflare“ paskelbė apie trijų savo „Pingora“ platformos pažeidžiamumų pataisymus, iš kurių du buvo įvertinti kritiškai (9.3 iš 10). „Pingora“ – „Rust“ kalba parašyta platforma – skirta saugioms, didelio našumo tinklo paslaugoms kurti. „Cloudflare“ turinio teikimo tinkle naudojamas naudojant „Pingora“ sukurtas tarpinis serveris, kuris apdoroja daugiau nei 40 milijonų užklausų per sekundę. Pažeidžiamumai ištaisyti „Pingora 0.8.0“ versijoje.
Dvi pavojingiausios spragos leidžia vykdyti HTTP užklausų kontrabandos atakas, kurios leidžia vartotojams apeiti prieigos kontrolės sistemas ir įterpti kenkėjišką „JavaScript“ kodą į kitų vartotojų užklausų, apdorojamų tame pačiame sraute tarp priekinės ir galinės dalių, turinį (pavyzdžiui, įterpti kenkėjišką „JavaScript“ kodą į kito vartotojo sesiją svetainėje). Problemas atrado „Bug Bounty“ programos dalyvis, siūlantis atlygį už pažeidžiamumų atradimą.
Atvirkštinio tarpinio serverio pagrindu veikiančioje vidinėje sistemoje kliento užklausas gauna papildomas mazgas, kuris užmezga ilgalaikį TCP ryšį su vidine sistema, kuri tvarko faktinį užklausų apdorojimą. Šis bendras ryšys paprastai perduoda skirtingų vartotojų užklausas, kiekviena po kitos grandinėje, atskirta HTTP protokolu. HTTP užklausų kontrabandos atakos kyla dėl skirtingų HTTP antraščių ir HTTP protokolo specifikacijų interpretacijų priekinėse ir vidinėse sistemose, pavyzdžiui, kai priekinė sistema naudoja HTTP antraštę „Content-Length“ užklausos dydžiui nustatyti, o vidinė sistema naudoja „Transfer-Encoding: chunked“.
Pirmoji pažeidžiamumas, CVE-2026-2835, yra HTTP/1.0 užklausų analizės kode ir yra sukeltas neteisingo „Transfer-Encoding“ antraštės su keliomis reikšmėmis apdorojimo, taip pat ryšio uždarymo naudojimo kaip užklausos pabaigos (užklausos uždarymo). „Pingora“ tikrino tik parinktį „Transfer-Encoding: chunked“ ir ignoravo šią antraštę, jei joje buvo kelios reikšmės. Šioje situacijoje „Pingora“ ignoravo dydį „Content-Length“ antraštėje ir visus duomenis, gautus prieš uždarant ryšį, laikė užklausos turiniu.
Nurodydamas kelias reikšmes antraštėje „Transfer-Encoding“, užpuolikas galėjo sukurti sąlygas, kurioms esant užklausa buvo persiųsta į serverio sistemą, kurios tikrasis dydis neatitiko pagal antraštę „Transfer-Encoding“ apskaičiuoto grandinės dydžio, suskaidytos į dalis. „Pingora“ persiuntė visus gautus duomenis kaip vieną užklausą, o serverio sistema, pavyzdžiui, „Node.js“, apskaičiavo užklausą pagal „Transfer-Encoding: chunked“ ir likusią dalį apdorojo kaip kitos užklausos pradžią. GET / HTTP/1.0 Host: example.com Connection: keep-alive Transfer-Encoding: identity, chunked Content-Length: 29 0 GET /admin HTTP/1.1 X:

Antrasis pažeidžiamumas, CVE-2026-2833, atsiranda dėl neteisingo „Upgrade“ HTTP antraštės apdorojimo HTTP/1.1 užklausose. Kai užklausoje buvo „Upgrade“ antraštė, tarpinis serveris nedelsdamas persiuntė likusius užklausos duomenis po „Upgrade“ antraštės į galinę sistemą, nelaukdamas, kol galinė sistema atsakys 101 (Switching Protocols) kodu. Tai sutrikdė srauto sinchronizavimą tarp tarpinio serverio ir galinės sistemos, todėl galinė sistema duomenis, išsiųstus po „Upgrade“ antraštės, traktavo kaip atskirą užklausą ir šios užklausos rezultatą siųsdavo atsakydama į vėlesnę kito vartotojo užklausą. GET / HTTP/1.1 Host: example.com Upgrade: foo GET /admin HTTP/1.1 Host: example.com


Problemos kyla, kai „Pingora“ naudojama kaip įeinančio turinio tarpinis serveris, persiunčiantis vartotojų užklausas į serverius naudojant HTTP/1.0 arba HTTP/1.1 protokolus. „Cloudflare“ turinio pristatymo tinkle naudojama „Pingora“ konfigūracija neleido pasinaudoti pažeidžiamumais, nes „Pingora“ nenaudojama kaip įeinančio turinio tarpinis serveris CDN, persiunčia užklausas tik naudodama HTTP/1.1 protokolą, blokuoja užklausas su neteisingomis „Content-Length“ reikšmėmis, persiunčia tik vieną antraštės „Transfer-Encoding: chunked“ reikšmę ir į užklausas su antrašte „Upgrade:“ įterpia papildomą antraštę „Connection: close“, neleisdama perduoti papildomų užklausų tuo pačiu ryšiu.
Trečiasis pažeidžiamumas, CVE-2026-2836 (8.4 svarbos iš 10), sukelia talpyklos užkrėtimą dėl talpyklos rakto (CacheKey) generavimo, pagrįsto vien URI keliu, ignoruojant antraštės „Host“ turinį. Šis trūkumas lemia identiškų talpyklos raktų generavimą identiškiems HTTP keliams į skirtingus pagrindinius kompiuterius. Šia pažeidžiamumu galima pasinaudoti norint suklastoti talpyklos turinį naudojant kelių pagrindinių kompiuterių talpyklą. Talpyklos kaupimas yra eksperimentinė „Pingora“ funkcija ir nerekomenduojama naudoti gamybinėje aplinkoje.
Šaltinis: opennet.ru
