Difetto nel decoder Brotli: correzioni per Node.js, Envoy e altro software

Difetto nel decoder Brotli: correzioni per Node.js, Envoy e altro software

Aggiungi CyberWorldOpsalle tue fonti preferite su Google
Difetto nel decoder Brotli: correzioni per Node.js, Envoy e altro software
Vulnerabilità

Immagine illustrativa generata con AI

Una vulnerabilità di corruzione della memoria nel decoder Brotli di Google ha reso necessari aggiornamenti in runtime di linguaggio, proxy e pacchetti Python, mentre i ricercatori hanno dimostrato l'esecuzione di codice su una build non corretta di Node.js.

Individuata come CVE-2026-111497, la falla diventa raggiungibile quando un software decomprime dati Brotli controllati dall'attaccante. Uno stream appositamente costruito può causare una scrittura fuori dai limiti, esponendo potenzialmente la memoria, mandando in crash l'applicazione o consentendo l'esecuzione arbitraria di codice. Non sono stati segnalati casi di sfruttamento in natura.

Secondo The Hacker News, la divulgazione è iniziata il 21 ottobre 2026, quando Google e Node.js hanno rilasciato le correzioni. Altri progetti hanno seguito con aggiornamenti alle proprie copie del decoder.

Sia le richieste in arrivo sia le risposte recuperate possono esporre le applicazioni

Brotli comprime pagine web e altro traffico. La vulnerabilità si trova nel suo decoder C, in particolare nella gestione del cambio di tipo di blocco in c/dec/decode.c, secondo la valutazione di Red Hat su CVE-2026-111497. Lo sfruttamento richiede uno stream malformato: l'output normale e ben formato dell'encoder non attiva il percorso vulnerabile.

In Node.js e Bun, l'esposizione riguarda le chiamate fetch() integrate che ricevono risposte Content-Encoding: br. Anche gli upload in arrivo possono raggiungere il decoder tramite la gestione del corpo delle richieste, ad esempio in Express 5 e body-parser 2. Un semplice server HTTP Node.js non decomprime automaticamente i corpi delle richieste.

Le applicazioni Python possono diventare esposte semplicemente con l'installazione del pacchetto Brotli o brotlicffi: i client HTTP, tra cui requests, urllib3, httpx e aiohttp, decodificano poi automaticamente le risposte Brotli. L'applicazione non deve importare direttamente nessuno dei due pacchetti di compressione.

Envoy e Istio richiedono che la decompressione Brotli sia abilitata. Le installazioni in cui è disabilitata non espongono questo percorso del decoder.

Il Red Team di Imperva, che chiama Node2Shell la propria ricerca, ha dimostrato l'esecuzione di codice controllata dall'attaccante su una build non modificata di Node.js 24.22.0 in esecuzione su Linux ARM64. Ha consegnato dati malevoli sia tramite una risposta recuperata sia tramite il corpo di una richiesta Express. L'exploit ha richiesto più tentativi, non è stato rilasciato e non è stato testato su altre build. Questa dimostrazione non stabilisce che l'esecuzione di codice funzioni contro ogni prodotto vulnerabile.

Red Hat afferma che non esiste un proof of concept pubblico e affidabile per l'esecuzione remota di codice. Classifica il problema come Important, con un punteggio CVSS 3.1 di 8,1, citando i requisiti di sfruttamento e le protezioni della piattaforma, che rendono complicata un'esecuzione di codice affidabile senza eliminare altri impatti. Envoy lo classifica Critical con punteggio 9,2 secondo CVSS 4.0, mentre Node.js lo classifica come High.

Le versioni corrette dipendono dal prodotto e dalla distribuzione

Le correzioni segnalate per la libreria C di Brotli di Google sono 1.0.10, 1.1.1 e 1.2.1. Le applicazioni che includono la libreria devono aggiornarsi autonomamente: installare una libreria di sistema corretta non sostituisce necessariamente un decoder incluso.

Per gli altri software vulnerabili, le versioni corrette segnalate sono:

  • Node.js: 22.23.4, 24.22.1 e 26.12.1, per i rami di rilascio 22.x, 24.x e 26.x corrispondenti. Il rapporto indica come vulnerabili anche i rami 20.x e precedenti di Node.js, ormai fuori supporto.
  • Bun: 1.4.4; sono vulnerabili le versioni 1.4.3 e precedenti.
  • Istio: 1.31.2, 1.30.6 e 1.29.9, che correggono gli intervalli vulnerabili 1.31.0–1.31.1, 1.30.0–1.30.5 e 1.29.0–1.29.8 quando la decompressione Brotli è abilitata.
  • Python Brotli: 1.2.1; sono vulnerabili le versioni 1.2.0 e precedenti.
  • Python brotlicffi: 1.2.1.0; sono vulnerabili le versioni 1.2.0.x e precedenti.

Avviso di Envoy del 23 ottobre indica come vulnerabili le versioni v1.39.2, v1.38.5, v1.37.7 e v1.36.11 su tutte le piattaforme. Indica come correzioni le versioni v1.40.0, v1.39.3, v1.38.6, v1.37.8 e v1.36.12. L'avviso limita l'impatto alle installazioni con il decompressore Brotli configurato e afferma che un attaccante remoto e non autenticato potrebbe corrompere lo stato del decoder, rivelare la memoria, causare un denial of service o potenzialmente eseguire codice.

cdxgen: l'esposizione include scansioni di repository e modalità server

Avviso di cdxgen del 22 ottobre riguarda gli eseguibili standalone e le immagini container che includono runtime vulnerabili. Le versioni vulnerabili sono quelle fino alla 13.4.0 compresa per @cdxgen/cdxgen, e fino alla 12.8.8 compresa per @cyclonedx/cdxgen; le versioni corrette sono rispettivamente 13.5.0 e 12.8.9.

Il perimetro comprende tutte le famiglie di eseguibili standalone, slim e full, su ogni piattaforma. Le installazioni tramite npm, pnpm o npx usano invece il runtime Node.js dell'host e richiedono un runtime dell'host corretto.

Con le impostazioni predefinite, la scansione di un repository non attendibile può attivare la falla quando il suo Podfile.lock punta a una sorgente esterna :git. cdxgen recupera il podspec da quell'host e decomprime una risposta Brotli anche se non l'ha richiesta. La modalità sicura consente comunque qualsiasi host HTTPS. Altri percorsi coinvolgono registri npm, Deno o Dart forniti dal progetto con FETCH_LICENSE, e verifiche dei registri OCI con --bom-audit.

In modalità --server, l'endpoint /sbom decomprime i corpi delle richieste Brotli prima della validazione o dell'autenticazione.

Entrambe le versioni corrette di cdxgen includono Node.js 24.22.1. La 12.8.8 doveva includere l'aggiornamento di sicurezza, ma i suoi eseguibili standalone conservavano Node.js 24.18.0 e le sue immagini container non sono state pubblicate. L'avviso indica di passare alla 12.8.9 o successiva. Le build aggiornate spostano inoltre cdxgen-secure sull'immagine di release corrispondente, usano la build ufficiale di Node.js 24.22.1 per cdxgen-ppc64 e Bun 1.4.4 per cdxgen-bun.

Le mitigazioni devono coprire i dati prima della decompressione

Quando gli aggiornamenti non possono essere applicati subito, le mitigazioni documentate mirano a impedire che dati Brotli non attendibili raggiungano il decoder. Tra queste: rifiutare le richieste Content-Encoding: br in arrivo prima della decompressione, disabilitare la decodifica automatica delle risposte Brotli dove supportata, oppure rimuovere i pacchetti Python Brotli e brotlicffi, così che i client ripieghino su gzip e deflate.

Rimuovere br da Accept-Encoding non basta da solo: un server può comunque restituire contenuti compressi con Brotli. Anche la protezione del firewall ha dei limiti. Vercel ha dichiarato che le regole attive il giorno della divulgazione non coprivano le risposte che le funzioni recuperano da altri server. Il rapporto indica che non è stata pubblicata alcuna soluzione alternativa per Node.js, e quindi l'aggiornamento del runtime è la correzione prescritta.

Per cdxgen, i manutentori raccomandano inoltre di limitare le destinazioni con CDXGEN_ALLOWED_HOSTS, di impostare COCOA_FULL_SCAN=false per saltare il download remoto dei podspec e di tenere la modalità server inaccessibile ai client non attendibili. Un'altra opzione documentata è usare il pacchetto npm su un host con runtime Node.js corretto.

Dopo l'aggiornamento, è necessario riavviare i servizi e ricostruire le immagini dei container per sostituire il decoder nei processi in esecuzione. Gli scanner delle dipendenze Python potrebbero essere in ritardo: il rapporto segnala che l'avviso di GitHub non conteneva voci sui pacchetti vulnerabili, mentre PYSEC-2026-4322 e PYSEC-2026-4323 sono stati aggiunti il 23 ottobre. Le versioni installate meritano quindi una verifica manuale.

La correzione stessa è precedente alla divulgazione. OpenAI, il cui team Codex Security ha segnalato la vulnerabilità, ha dichiarato che la modifica sottostante era entrata nel codice sorgente di Brotli il 27 febbraio senza essere riconosciuta come correzione di sicurezza. Nessuna release di Brotli la includeva fino al 21 ottobre.

Leggi anche

Fonti

Questo articolo è una rielaborazione originale basata sulle fonti seguenti.

Torna alla home

Ultime notizie di cybersecurity

Tutte le notizie di cybersecurity →