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
La vulnerabilità colpisce qualsiasi applicazione Next.js che utilizza App Router con React Server Components — la configurazione predefinita da Next.js 14 in poi. Le Server Actions definite esplicitamente non sono richieste; la semplice presenza dei pacchetti RSC interessati è sufficiente.
Questa vulnerabilità consente a un attaccante non autenticato di:
1. [ANY] Send crafted multipart POST to any Server Action endpoint
2. [SERVER] React deserializer processes malicious JSON
3. [SERVER] Prototype pollution poisons Object.prototype.then
4. [SERVER] Plain object treated as thenable; Function constructor reached
5. [SERVER] new Function(_prefix) executes attacker's arbitrary JavaScript
6. [SERVER] execSync() runs system command; output captured
7. [SERVER] Output embedded in NEXT_REDIRECT error digest
8. [SERVER] Next.js returns X-Action-Redirect header with URL-encoded output
9. [ATTACKER] Extract and URL-decode command result from header
Tutti i test sono stati condotti su una VM VirtualBox isolata con Kali Linux 2026.1, Next.js 15.0.0 e React 19.0.0, senza esposizione di rete.
| Modulo di Attacco | Risultato | Note |
|---|---|---|
| Esecuzione comandi | ✅ RCE confermata | whoami, id, uname -a funzionano in modo affidabile |
| Elimina progetti | ✅ Dashboard modificata | Progetti rimossi, struttura React preservata |
| Deturpa | ✅ Sito deturpato | Messaggio personalizzato visualizzato |
| Rubo ambiente | ✅ Variabili d'ambiente estratte | Salvate in stolen_env.txt |
| Arresta server | ✅ Tutti i server mostrati come fermati | UI aggiornata, React funzionale |
| Shell interattiva | ✅ Shell persistente | Comandi speciali disponibili |
| Ripristino | ✅ Stato originale ripristinato | Tramite script restore.sh |
Determinismo: A differenza degli exploit probabilistici (es. heap spray), CVE-2025-55182 è completamente deterministico — qualsiasi richiesta HTTP POST correttamente formattata produce RCE con probabilità 1 su qualsiasi sistema non patchato che esegue React 19.0.0–19.2.0 con React Server Components abilitati.
| Documento | Descrizione |
|---|---|
| Analisi della Causa Principale | Difetto di deserializzazione e prototype pollution in React Flight |
| Analisi del Payload | Analisi riga per riga della struttura JSON malevola |
| Cronologia del CVE | Scoperta, divulgazione e cronologia delle patch |
Questa ricerca fa parte della mia Tesi Magistrale in Cybersecurity (UCAM — Campus Internacional de Ciberseguridad), analizzando vulnerabilità N-Day in molteplici ambienti.
Questo CVE rappresenta il vettore moderno dei framework JavaScript all'interno della tesi, dimostrando:
Parole chiave: RCE · Prototype Pollution · Deserializzazione · React · Next.js · Server Actions · CVE-2025-55182
Annais Molina (devianntsec) — Ricercatrice di Sicurezza | Master in Cybersecurity (UCAM)
Licenza MIT — consultare LICENSE
Questo repository è fornito solo a scopo educativo e di ricerca sulla sicurezza, come parte di una Tesi Magistrale accademica. Tutti i test sono stati eseguiti su macchine virtuali isolate senza esposizione di rete. Utilizzare solo su sistemi di tua proprietà o per i quali hai esplicita autorizzazione scritta per testare. L'uso non autorizzato contro sistemi è illegale e può portare a procedimenti penali.