Vulnerabilità nel progetto Pingora che consentono l'intercettazione di richieste esterne

L'azienda Cloudflare ha annunciato di aver risolto tre vulnerabilità nel framework Pingora, di cui due sono state classificate come critiche (9.3 su 10). Il framework Pingora è scritto in Rust ed è progettato per lo sviluppo di servizi di rete ad alte prestazioni e sicuri. Un proxy costruito con Pingora viene utilizzato nella rete di distribuzione dei contenuti di Cloudflare e gestisce oltre 40 milioni di richieste al secondo. Le vulnerabilità sono state risolte nella versione Pingora 0.8.0.

Le due vulnerabilità più pericolose consentono attacchi di tipo "HTTP Request Smuggling", che permettono di superare i sistemi di restrizione dell'accesso e infiltrarsi nei contenuti delle richieste di altri utenti, elaborate nello stesso flusso tra frontend e backend (ad esempio, per inserire codice JavaScript dannoso nella sessione di un altro utente con il sito). I problemi sono stati identificati da un partecipante al programma Bug Bounty, che prevede un premio per la scoperta di vulnerabilità.

Nello schema con chiamata al backend attraverso un proxy inverso, le richieste dei client vengono ricevute da un nodo aggiuntivo, che stabilisce una connessione TCP a lungo termine con il backend, responsabile dell'elaborazione diretta delle richieste. Attraverso questa connessione comune vengono solitamente trasmesse richieste di utenti differenti, che seguono una sequenza uno dopo l'altro, separate dai mezzi del protocollo HTTP. Gli attacchi di tipo HTTP Request Smuggling si verificano a causa di interpretazioni diverse delle intestazioni HTTP e delle specifiche del protocollo HTTP sui frontend e backend, ad esempio quando il frontend utilizza l'intestazione HTTP "Content-Length" per determinare la dimensione della richiesta, mentre il backend utilizza "Transfer-Encoding: chunked".

La prima vulnerabilità CVE-2026-2835 è presente nel codice di analisi delle richieste HTTP/1.0 ed è causata da una gestione errata dell'intestazione "Transfer-Encoding" con più valori, così come dall'utilizzo della chiusura della connessione come segnale di fine del corpo della richiesta (close-delimited). Pingora controllava solo la variante "Transfer-Encoding: chunked" e ignorava l'intestazione se venivano specificati più valori. In questa situazione, Pingora non considerava la dimensione nell'intestazione "Content-Length", ma considerava come corpo della richiesta tutti i dati ricevuti fino alla chiusura della connessione.

Attraverso l'indicazione di più valori nell'intestazione «Transfer-Encoding», l'attaccante poteva creare condizioni in cui la richiesta veniva reindirizzata al backend, il cui dimensionamento effettivo non corrispondeva alla dimensione della catena chunked, calcolata in base all'intestazione «Transfer-Encoding». Pingora reindirizzava tutti i dati ricevuti come un'unica richiesta, e il backend, ad esempio, Node.js, calcolava la richiesta in base a «Transfer-Encoding: chunked» e il resto veniva trattato come l'inizio di un'altra richiesta. GET / HTTP/1.0 Host: example.com Connection: keep-alive Transfer-Encoding: identity, chunked Content-Length: 29 0 GET /admin HTTP/1.1 X:

Vulnerabilità nel progetto Pingora che consentono l'intercettazione di richieste esterne

La seconda vulnerabilità CVE-2026-2833 è causata da un'elaborazione errata dell'intestazione HTTP «Upgrade» nelle richieste HTTP/1.1. In presenza dell'intestazione «Upgrade» nella richiesta, il proxy passava immediatamente al backend anche gli altri dati della richiesta successivi all'intestazione «Upgrade», senza attendere una risposta dal backend con codice 101 (Switching Protocols). Di conseguenza, la sincronizzazione del flusso tra proxy e backend veniva interrotta e il backend interpretava i dati inviati dopo l'intestazione «Upgrade» come una richiesta separata, inviando il risultato dell'esecuzione di quella richiesta in risposta alla successiva richiesta di un altro utente. GET / HTTP/1.1 Host: example.com Upgrade: foo GET /admin HTTP/1.1 Host: example.com

Vulnerabilità nel progetto Pingora che consentono l'intercettazione di richieste esterne
Vulnerabilità nel progetto Pingora che consentono l'intercettazione di richieste esterne

I problemi si manifestano quando si utilizza Pingora in forma di reverse proxy (ingress proxy), che trasmette le richieste degli utenti ai backend utilizzando i protocolli HTTP/1.0 o HTTP/1.1. La configurazione di Pingora utilizzata nella rete di distribuzione dei contenuti Cloudflare non consentiva l'esploitazione delle vulnerabilità, poiché Pingora nel CDN non viene utilizzato come ingress proxy, reindirizzando le richieste solo utilizzando il protocollo HTTP/1.1, bloccando le richieste con valori Content-Length errati, reindirizzando solo un valore dell'intestazione «Transfer-Encoding: chunked» e aggiungendo nelle richieste con intestazione «Upgrade:» un'intestazione aggiuntiva «Connection: close», che impedisce la trasmissione di richieste aggiuntive nella stessa connessione.

La terza vulnerabilità CVE-2026-2836 (livello di gravità 8.4 su 10) porta a un avvelenamento della cache (cache poisoning) a causa della generazione della chiave di posizionamento dei dati nella cache (CacheKey) solo sulla base del percorso dell'URI, ignorando il contenuto dell'intestazione «Host». Questa mancanza porta alla formazione di chiavi di caching identiche per percorsi HTTP identici su host diversi. La vulnerabilità può essere sfruttata per sostituire il contenuto della cache quando si utilizza la modalità di caching per più host. In Pingora, la cache è una funzione sperimentale, non consigliata per implementazioni in produzione.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster