Proof of Concept per CVE-2025-55182 ("React2Shell"). Un ambiente completamente dockerizzato che dimostra l'esecuzione remota di codice (RCE) tramite deserializzazione non sicura in React Server Components. Include target vulnerabili sia per Vanilla React (Express) che per Next.js, insieme a uno script di exploit Python personalizzato.
⚠️ DISCLAIMER: SOLO USO EDUCATIVO Questo repository contiene codice di exploit funzionante per una vulnerabilità critica (CVSS 10.0). È destinato esclusivamente a ricerca accademica, analisi di sicurezza e scopi educativi. Non utilizzare questo codice contro sistemi che non possiedi o per i quali non hai esplicita autorizzazione a testare. L'autore non è responsabile di qualsiasi uso improprio.
Questo progetto documenta e dimostra CVE-2025-55182, una vulnerabilità critica di Remote Code Execution (RCE) che risiede nell'architettura React Server Components (RSC). Spesso definita "React2Shell", questa falla consente ad attaccanti remoti non autenticati di eseguire codice arbitrario sul server manipolando il protocollo di serializzazione "Flight" utilizzato da react-server.
Questo laboratorio fornisce un ambiente Docker isolato e controllato per analizzare la vulnerabilità in due scenari distinti:
react-server-dom-webpack ed Express.L'ambiente è orchestrato tramite Docker Compose e consiste in tre contenitori isolati collegati da una rete interna privata ().
research-net| Servizio | Contesto | Descrizione | Componente Vulnerabile |
|---|---|---|---|
vanilla-target | vanilla-rsc/ | Server Express minimale che implementa manualmente il protocollo RSC. | [email protected] |
nextjs-target | nextjs-app/ | Applicazione Next.js standard che utilizza App Router. | [email protected] (impl. react-server) |
attacker | exploit/ | Ambiente Python contenente gli script di exploit. | N/A |
La vulnerabilità deriva da deserializzazione non sicura (CWE-502) all'interno del parser del protocollo Flight. Iniettando un payload multipart appositamente costruito contenente una struttura di "chunk" falsi, un attaccante può:
.then di un oggetto simile a una promise.$B).Function() per compilare ed eseguire JavaScript arbitrario (es., child_process.execSync).Clonare il repository:
git clone https://github.com/trax69/cve-2025-55182-poc.git
cd cve-2025-55182-poc
Costruire e avviare il laboratorio:
docker-compose up -d --build
Attendere la completa inizializzazione dei contenitori. Il contenitore Next.js potrebbe richiedere alcuni minuti per completare la prima build.
La logica di sfruttamento è racchiusa in exploit/exploit.py. Puoi eseguire gli attacchi dalla tua macchina host (se Python è installato) o direttamente dal contenitore attacker.
Accedi alla shell dell'attaccante:
docker-compose exec attacker bash
Installa i requisiti:
pip install -r requirements.txt
Attacca il Target A (React Vanilla):
python exploit.py http://vanilla-target:4000/rsc vanilla
Attacca il Target B (Next.js):
python exploit.py http://nextjs-target:3000/ nextjs
L'exploit tenta di creare un file chiamato pwned.txt all'interno della directory /tmp del server vittima. Per verificare il successo:
# Controlla il Server Vanilla
docker-compose exec vanilla-target ls -la /tmp/pwned.txt
# Controlla il Server Next.js
docker-compose exec nextjs-target ls -la /tmp/pwned.txt
In caso di successo, vedrai l'elenco del file. Se l'exploit fallisce, il file non esisterà.
Per rimediare a questa vulnerabilità in ambienti di produzione:
react-server-dom-webpack (e i pacchetti correlati) alla versione 19.0.1, 19.1.2 o 19.2.1+."$1:__proto__" o usi anomali di "$@" nei corpi multipart.Progetto Universitario - Security Audit e Vulnerability Research