Ricerca di tesi magistrale su CVE-2025-55182 (React2Shell). Framework di sfruttamento modulare con 6 scenari di attacco (RCE, esfiltrazione, defacement), reverse shell interattiva e un laboratorio vulnerabile completo per studiare Prototype Pollution e Insecure Deserialization in React Server Components.
Deserializzazione di Dati Non Fidati + Prototype Pollution in React Server Components
Remote Code Execution non autenticata tramite Next.js Server Actions
Affette: React 19.0.0 - 19.2.0 · Patch: React 19.0.1 / 19.1.2 / 19.2.1 (3 dicembre 2025)
Dimostrazione dell'exploit avanzato - comandi RCE di base, shell interattiva e molteplici vettori d'attacco contro un'applicazione Next.js vulnerabile
Questo repository contiene la mia ricerca per la Tesi Magistrale su CVE-2025-55182, una vulnerabilità Remote Code Execution di livello Critico (CVSS v3.1: 10.0) nei React Server Components.
La vulnerabilità ha origine da un meccanismo di deserializzazione non sicuro nel protocollo React Flight. Durante l'elaborazione delle Server Actions, Next.js deserializza i payload multipart in arrivo senza una validazione adeguata. Un attaccante può creare un payload malevolo che inquina la catena dei prototipi e inietta JavaScript arbitrario, il quale viene eseguito sul server tramite il costruttore Function (e successivamente tramite child_process.execSync()).
Nota su CVE-2025-66478: Vercel ha emesso un CVE parallelo per tracciare l'impatto specifico di Next.js di questa stessa vulnerabilità. Poiché Next.js raggruppa React in modo vendored, molti scanner di dipendenze non lo rilevano automaticamente come vulnerabile. Il National Vulnerability Database (NVD) degli Stati Uniti ha ufficialmente respinto CVE-2025-66478 come duplicato di CVE-2025-55182, sebbene continui a essere citato nell'avviso di sicurezza di Vercel.
Vulnerabilità conseguenti: Il team di React ha successivamente divulgato due ulteriori problemi presenti nelle versioni iniziali della patch (19.0.1, 19.1.2, 19.2.1): CVE-2025-55184 (Denial of Service, CVSS 7.5) e CVE-2025-55183 (Esposizione del Codice Sorgente, CVSS 5.3). Gli utenti dovrebbero aggiornare a 19.0.2, 19.1.3 o 19.2.2 per risolvere tutti e tre.
| Aspetto | Descrizione |
|---|---|
| Quattro moduli di attacco | Eliminare progetti, deturpare il sito, rubare variabili d'ambiente, arrestare i server |
| Shell interattiva | Shell persistente con comandi speciali e capacità di ripristino |
| Esfiltrazione stabile | Lettura riga per riga per bypassare i limiti di dimensione degli header HTTP |
| Script di ripristino | Ripristino sicuro del laboratorio dopo gli attacchi |
| Documentazione accademica | Causa principale, analisi del payload e cronologia della vulnerabilità |
CVE-2025-55182/
├── README.md # Questo file
├── LICENSE # Licenza MIT
│
├── exploit/
│ ├── exploit-explanation.md # Documentazione sull'uso dell'exploit
│ └── react2shell.py # Exploit principale — 4 moduli di attacco + shell interattiva
│
├── vulnerable-app/ # Applicazione Next.js vulnerabile
│ ├── README.md # Crediti originali dell'app vulnerabile
│ ├── package.json # React 19.0.0 (vulnerabile)
│ ├── app/ # Codice sorgente dell'applicazione
│ ├── curl_id.sh # Script exploit originale (di zack0x01)
│ └── scripts/
│ └── restore.sh # Script di ripristino (mio contributo)
│
└── docs/
├── screenshots/ # Dimostrazioni dello sfruttamento
│ ├── 01-app-initial.png
│ ├── 02-rce-basic.png
│ ├── 03-interactive-shell.png
│ ├── 04-no-payload.png
│ ├── 05-delete-result.png
│ ├── 06-deface.png
│ ├── 07-shutdown-servers.png
│ ├── 08-restore-from-script.png
│ └── 09-restore-from-interactive-shell.png
│
└── analysis/
├── 01-root-cause.md # Analisi della causa principale della vulnerabilità
├── 02-payload-breakdown.md # Struttura del payload e flusso di esecuzione
└── 03-timeline.md # Cronologia del CVE
vulnerable-app/)cd vulnerable-app
npm install --legacy-peer-deps
npm run dev
# App disponibile su http://localhost:3000
cd ../exploit
# Verifica se il target è vulnerabile
python3 react2shell.py -u http://localhost:3000 --check
# Esegui un singolo comando
python3 react2shell.py -u http://localhost:3000 -c "whoami"
# Modalità shell interattiva
python3 react2shell.py -u http://localhost:3000 -i
| Modulo | Comando | Descrizione | Impatto |
|---|---|---|---|
| Elimina Progetti | --delete-projects | Elimina tutti i progetti dalla dashboard | Distruzione dei dati |
| Deturpa | --deface "messaggio" | Sostituisce la pagina principale | Deturpamento |
| Rubo Ambiente | --steal-env | Ruba le variabili d'ambiente | Esfiltrazione |
| Arresta Server | --shutdown-servers | Arresta tutti i server | Denial of Service |
React Server Components utilizzano un meccanismo personalizzato di serializzazione/deserializzazione (il protocollo "Flight") per inviare dati dei componenti dal server al client. Quando elabora le server actions, il server deserializza i payload in arrivo senza una validazione adeguata.
Il difetto principale è la fiducia comportamentale: il deserializzatore controlla typeof obj.then === 'function' per identificare le Promise, senza verificare che la proprietà appartenga direttamente all'oggetto. Ciò consente a un attaccante di avvelenare Object.prototype.then, facendo apparire ogni oggetto semplice come un thenable.
Un attaccante può creare un payload malevolo che:
__proto__:thenFunction tramite $1:constructor:constructornew Function(_prefix)process.mainModule.require('child_process').execSync()X-Action-RedirectUser-mode (unauthenticated)
│
├─ POST / (Next.js Server Action endpoint)
│ ├─ Headers: Next-Action: x
│ └─ Multipart body with malicious JSON
│
└─ React Flight deserializer processes payload
└─ Prototype pollution via __proto__:then
└─ Function constructor reached via $1:constructor:constructor
└─ new Function(_prefix) executes attacker's JavaScript
└─ execSync() runs system command
└─ Output embedded in NEXT_REDIRECT error
└─ Next.js converts to X-Action-Redirect header