Podjetje Cloudflare je napovedalo odpravo treh ranljivosti v okviru Pingora, od katerih sta dve ocenjeni kot kritični (9,3 od 10). Okvir Pingora je napisan v programskem jeziku Rust in je namenjen razvoju zaščitenih, visokozmogljivih omrežnih storitev. Proksi, zgrajen s pomočjo Pingora, se uporablja v omrežju za dostavo vsebin Cloudflare in obdeluje več kot 40 milijonov zahtevkov na sekundo. Ranljivosti so odpravljene v izdaji Pingora 0.8.0.
Dve najbolj nevarni ranljivosti omogočata izvedbo napadov tipa „HTTP Request Smuggling“, ki omogočajo zaobiditev sistemov omejevanja dostopa in vmešavanje v vsebino zahtevkov drugih uporabnikov, ki se obravnavajo v istem toku med sprednjim in zadnjim delom (na primer, za vnos zlonamernega JavaScript kode v sejo drugega uporabnika na spletni strani). Te težave je odkril član programa Bug Bounty, ki predvideva izplačilo nagrade za odkritje ranljivosti.
V shemi, ki vključuje dostop do zadnjega dela prek povratnega proksija, dodatna vozlišča sprejemajo zahtevke strank, ki vzpostavijo dolgotrajno TCP povezavo s zadnjim delom, ki neposredno obdeluje zahtevke. Preko te skupne povezave se običajno prenašajo zahtevki različnih uporabnikov, ki sledijo drug za drugim z ločevanjem z uporabo protokola HTTP. Napadi tipa HTTP Request Smuggling nastanejo zaradi različno interpretiranih HTTP glave in specifikacij protokola HTTP na sprednjih in zadnjih delih, na primer, ko sprednji del uporablja za določitev velikosti zahtevka HTTP glavo „Content-Length“, medtem ko zadnji del uporablja „Transfer-Encoding: chunked“.
Prva ranljivost CVE-2026-2835 je prisotna v kodi za razčlenitev zahtevkov HTTP/1.0 in je posledica nepravilne obravnave glave „Transfer-Encoding“ z več vrednostmi ter uporabe zaprtja povezave kot znaka konca telesa zahtevka (close-delimited). Pingora je preverjala samo možnost „Transfer-Encoding: chunked“ in je prezrla to glavo, če je vsebovala več vrednosti. V tej situaciji Pingora ni upoštevala velikosti v glavi „Content-Length“, temveč je vse podatke, prejetih do zaprtja povezave, štela za telo zahtevka.
S s prevajanjem več vrednosti v glavi "Transfer-Encoding" je napadalec lahko ustvaril pogoje, pod katerimi se je zahteva preusmerila na backend, dejanska velikost katere ni ustrezala velikosti niza chunked, izračunane na podlagi glave "Transfer-Encoding". Pingora je preusmerjal vse prejeti podatke kot eno samo zahtevo, backend pa, na primer Node.js, je izračunal zahtevo na podlagi "Transfer-Encoding: chunked" in preostali del obdelal kot začetek druge zahteve. GET / HTTP/1.0 Host: example.com Connection: keep-alive Transfer-Encoding: identity, chunked Content-Length: 29 0 GET /admin HTTP/1.1 X:

Druga ranljivost CVE-2026-2833 je posledica nepravilne obravnave HTTP glave "Upgrade" v zahtevah HTTP/1.1. Ko je bila v zahtevi prisotna glava "Upgrade", je proxy takoj posredoval backendu in ostale podatke zahteve, ki so sledili glavi "Upgrade", ne da bi čakal na odgovor backend-a s kodo 101 (Switching Protocols). Zaradi tega je prišlo do neusklajenosti toka med proxyjem in backendom, backend pa je obravnaval podatke, poslano po glavi "Upgrade", kot ločeno zahtevo in poslal rezultat obdelave te zahteve kot odgovor na naslednjo zahtevo drugega uporabnika. GET / HTTP/1.1 Host: example.com Upgrade: foo GET /admin HTTP/1.1 Host: example.com


Težave se pojavljajo pri uporabi Pingore v obliki obratnega proxyja (ingress proxy), ki posreduje zahteve uporabnikov backendom z uporabo protokolov HTTP/1.0 ali HTTP/1.1. Konfiguracija Pingore, ki se uporablja v omrežju za dostavo vsebine Cloudflare, ni omogočila izkoriščanja ranljivosti, saj Pingora v CDN ne deluje kot ingress-proxy, preusmerja zahteve le z uporabo protokola HTTP/1.1, blokira zahteve z nepravilnimi vrednostmi Content-Length, preusmerja le eno vrednost v glavi "Transfer-Encoding: chunked" in v zahteve z glavo "Upgrade:" doda dodatno glavo "Connection: close", ki ne dovoljuje prenašanja dodatnih zahtev v istem povezavi.
Tretja ranljivost CVE-2026-2836 (stopnja nevarnosti 8.4 od 10) povzroči zastrupitev s predpomnilnikom (cache poisoning) zaradi generiranja ključa za shranjevanje podatkov v predpomnilniku (CacheKey) izključno na podlagi poti URI, ne upoštevajoč vsebino glave „Host“. Takšna pomanjkljivost vodi do ustvarjanja enakih ključev predpomnjenja za enake HTTP poti do različnih gostiteljev. Ranljivost se lahko izkoristi za zamenjavo vsebine predpomnilnika pri uporabi načina predpomnjenja za več gostiteljev. V Pingori je predpomnjenje eksperimentalna funkcija, ki ni priporočena za delovne implementacije.
Izvor: opennet.ru
