
react CVE-2025-55182
Gravità: Critica — CVSS 10.0
CWE: CWE-502 (Deserializzazione di dati non attendibili)
Vendor: Meta (Facebook)
Divulgata: 3 dicembre 2025
CVE-2025-55182 è una vulnerabilità di esecuzione remota di codice (RCE) non autenticata di gravità massima in React Server Components (RSC), soprannominata React2Shell. Il difetto risiede nel modo in cui React decodifica i payload inviati agli endpoint delle Server Function React tramite il protocollo Flight. Un utente malintenzionato può inviare una singola richiesta HTTP POST appositamente predisposta a un server vulnerabile ed eseguire codice arbitrario — senza credenziali, senza interazione con l'utente.
Le applicazioni che non espongono endpoint espliciti per le Server Function rimangono comunque vulnerabili se supportano React Server Components.
| Pacchetto | Versioni vulnerabili | Versioni corrette |
|---|---|---|
react-server-dom-webpack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | ≥ 19.0.1 / 19.1.2 / 19.2.1 |
react-server-dom-parcel | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | ≥ 19.0.1 / 19.1.2 / 19.2.1 |
react-server-dom-turbopack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | ≥ 19.0.1 / 19.1.2 / 19.2.1 |
Framework interessati (quando si usano pacchetti React vulnerabili): Next.js 15.x / 16.x (App Router), React Router, Waku, RedwoodSDK, Parcel RSC, plugin Vite RSC.
Stringa del vettore: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
I React Server Components utilizzano un formato binario di trasmissione chiamato protocollo Flight per trasmettere gli alberi dei componenti dal server al client. Lo stesso protocollo gestisce le Server Functions (in precedenza Server Actions) — endpoint richiamabili che accettano argomenti serializzati dal browser.
La vulnerabilità risiede nel deserializzatore: quando React elabora un payload Flight, può essere indotto a istanziare oggetti arbitrari lato server, portando a una RCE completa. Poiché l'endpoint Flight è esposto per impostazione predefinita ogni volta che RSC è abilitato, e poiché non esiste alcun controllo di autenticazione a livello di protocollo, lo sfruttamento richiede solo l'accesso di rete al server.
Il template incluso CVE-2025-55182.yaml utilizza tre metodi di rilevamento complementari.
Invia una richiesta POST minima con Content-Type: text/x-component al percorso root. Un server RSC vulnerabile (o raggiungibile) risponde con lo stesso content-type e un corpo di stream Flight le cui righe iniziano con ID di riga alfanumerici seguiti da due punti (es. 0:, 1:) o simboli di riferimento React ($L, $S, $I, $@).
POST / HTTP/1.1
Content-Type: text/x-component
Accept: text/x-component, */*
Condizione di corrispondenza: HTTP 200 + header text/x-component + regex dello stream Flight nel corpo.
Next.js segnala le richieste RSC tramite l'header RSC: 1 e il parametro di query ?_rsc=. Questa richiesta simula un prefetch del browser per confermare che l'endpoint Flight di App Router sia raggiungibile.
GET /?_rsc=1 HTTP/1.1
Accept: text/x-component
RSC: 1
Next-Router-State-Tree: %5B%22%22%2C%7B%7D%5D
Condizione di corrispondenza: HTTP 200 + header text/x-component.
Invia un payload Flight minimale e malformato insieme a un header Next-Action (il meccanismo usato per invocare le Server Functions). Un server vulnerabile tenta di deserializzare il payload; anche una risposta di errore che include header specifici di RSC conferma che l'endpoint esiste.
POST / HTTP/1.1
Content-Type: text/x-component
Next-Action: 0000000000000000000000000000000000000000
Condizione di corrispondenza: HTTP 200/400/500 + header text/x-component o x-action-revalidated.
Analizza i file *.json locali (es. package-lock.json, yarn.lock) per individuare i nomi dei pacchetti vulnerabili combinati con una regex di versione corrispondente a 19.0.0, 19.1.0, 19.1.1 o 19.2.0. Utile per il controllo di repository o pipeline CI senza inviare alcun traffico di rete.
# Install / update Nuclei
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
nuclei -target CVE-2025-55182.yaml -u https://target.example.com
nuclei -target CVE-2025-55182.yaml -l targets.txt
nuclei -target CVE-2025-55182.yaml -target ./path/to/project
nuclei -target CVE-2025-55182.yaml -u https://target.example.com -v -je results.json
nuclei -target CVE-2025-55182.yaml -u https://target.example.com -rl 10 -timeout 10
Aggiorna immediatamente a una versione corretta:
# npm
npm install react-server-dom-webpack@latest
# yarn
yarn upgrade react-server-dom-webpack react-server-dom-parcel react-server-dom-turbopack
# pnpm
pnpm update react-server-dom-webpack react-server-dom-parcel react-server-dom-turbopack
Versioni minime sicure per ramo:
| Ramo | Versione minima sicura |
|---|---|
| 19.0.x | 19.0.1 |
| 19.1.x | 19.1.2 |
| 19.2.x | 19.2.1 |
Mitigazioni temporanee (se l'aggiornamento non è immediatamente possibile):
text/x-component nelle richieste POST in ingresso (le regole Google Cloud Armor sono disponibili pubblicamente per questa CVE).package-lock.json, node_modules o di un SBOM.Questo template è destinato esclusivamente a test di sicurezza autorizzati e valutazione delle vulnerabilità. Eseguirlo su sistemi di cui non si possiede la proprietà o per i quali non si dispone di un'esplicita autorizzazione scritta potrebbe essere illegale. Gli autori non si assumono alcuna responsabilità per un uso improprio.
| Metrica | Valore |
|---|
| Vettore di attacco | Rete |
| Complessità dell'attacco | Bassa |
| Privilegi richiesti | Nessuno |
| Interazione utente | Nessuna |
| Ambito | Modificato |
| Riservatezza | Alta |
| Integrità | Alta |
| Disponibilità | Alta |
| Punteggio complessivo | 10.0 (Critica) |