Compania Cloudflare a anunțat remedierea a trei vulnerabilități în cadrul framework-ului Pingora, două dintre ele având un nivel critic de severitate (9.3 din 10). Framework-ul Pingora este scris în limbajul Rust și este destinat dezvoltării de servicii de rețea de înaltă performanță și securizate. Proxy-ul construit cu ajutorul Pingora este utilizat în rețeaua de livrare a conținutului Cloudflare și procesează peste 40 de milioane de cereri pe secundă. Vulnerabilitățile au fost remediate în versiunea Pingora 0.8.0.
Cele mai periculoase două vulnerabilități permit efectuarea de atacuri de tip «HTTP Request Smuggling», care permit ocolirea sistemelor de restricționare a accesului și infiltrarea în conținutul cererilor altor utilizatori, procesate în același fir între frontend și backend (de exemplu, pentru a injecta cod JavaScript rău intenționat în sesiunea unui alt utilizator al site-ului). Problemele au fost identificate de un participant al programului Bug Bounty, care prevede recompense pentru descoperirea vulnerabilităților.
În schema în care se face apel la backend printr-un proxy invers, cererile clienților sunt preluate de un nod suplimentar, care stabilește o conexiune TCP de lungă durată cu backend-ul, care realizează procesarea directă a cererilor. Prin această conexiune comună, de obicei, sunt transmise cereri de la diferiți utilizatori, care urmează în lanț unul după altul, cu separarea prin intermediul protocolului HTTP. Atacurile de tip HTTP Request Smuggling apar din cauza interpretărilor diferite ale anteturilor HTTP și specificațiilor protocolului HTTP pe frontend-uri și backend-uri, de exemplu, atunci când frontend-ul folosește antetul HTTP „Content-Length” pentru a determina dimensiunea cererii, iar backend-ul „Transfer-Encoding: chunked”.
Prima vulnerabilitate CVE-2026-2835 este prezentă în codul de analiză a cererilor HTTP/1.0 și este cauzată de procesarea incorectă a antetului „Transfer-Encoding” cu mai multe valori, precum și utilizarea închiderii conexiunii ca semn al sfârșitului corpului cererii (close-delimited). Pingora verifica doar varianta „Transfer-Encoding: chunked” și ignora acest antet dacă era specificat cu mai multe valori. În această situație, Pingora nu lua în considerare dimensiunea din antetul „Content-Length”, ci considera corpul cererii toate datele primite până la închiderea conexiunii.
Prin specificarea mai multor valori în antetul „Transfer-Encoding”, atacatorul ar fi putut crea condiții în care cererea era redirecționată către backend, a cărei dimensiune efectivă nu corespundea dimensiunii lanțului chunked, calculată pe baza antetului „Transfer-Encoding”. Pingora redirecționa toate datele primite ca un singur request, iar backend-ul, de exemplu, Node.js, calcula cererea pe baza „Transfer-Encoding: chunked” și trata restul ca începutul unei alte cereri. GET / HTTP/1.0 Host: example.com Connection: keep-alive Transfer-Encoding: identity, chunked Content-Length: 29 0 GET /admin HTTP/1.1 X:

A doua vulnerabilitate CVE-2026-2833 este cauzată de o prelucrare incorectă a antetului HTTP „Upgrade” în cererile HTTP/1.1. Atunci când cererea conține antetul „Upgrade”, proxy-ul redirecționa imediat către backend și celelalte date ale cererii, care urmează antetului „Upgrade”, fără a aștepta de la backend un răspuns cu codul 101 (Switching Protocols). Din această cauza, sincronizarea fluxului între proxy și backend era afectată, iar backend-ul percepea datele trimise după antetul „Upgrade” ca fiind o cerere separată, trimițând rezultatul executării acestei cereri ca răspuns la cererea ulterioară a altui utilizator. GET / HTTP/1.1 Host: example.com Upgrade: foo GET /admin HTTP/1.1 Host: example.com


Problemele apar atunci când se folosește Pingora în modul de proxy invers (ingress proxy), redirecționând cererile utilizatorilor către backend-uri folosind protocoalele HTTP/1.0 sau HTTP/1.1. Configurarea Pingora aplicată în rețeaua de livrare a conținutului Cloudflare nu permitea exploatarea vulnerabilităților, deoarece Pingora în CDN nu este utilizat ca proxy ingress, redirecționând cererile doar folosind protocolul HTTP/1.1, blochează cererile cu valori incorecte ale Content-Length, redirecționează doar o singură valoare a antetului „Transfer-Encoding: chunked” și adaugă în cererile cu antetul „Upgrade:” un antet suplimentar „Connection: close”, care nu permite transmiterea unor cereri suplimentare în aceeași conexiune.
A treia vulnerabilitate CVE-2026-2836 (grad de severitate 8.4 din 10) conduce la contaminarea cache-ului (cache poisoning) din cauza generării cheii de stocare a datelor în cache (CacheKey) exclusiv pe baza căii din URI, ignorând conținutul antetului „Host”. O astfel de neajuns duce la formarea de chei de cache identice pentru căile HTTP identice către diferite gazde. Vulnerabilitatea poate fi utilizată pentru a înlocui conținutul cache-ului atunci când se folosește modul de caching pentru mai multe gazde. În Pingora, cachingul este o funcție experimentală, nerecomandată pentru implementări de producție.
Sursa: opennet.ro
