Progetto di dimostrazione della vulnerabilità React CVE-2025-55182
⚠️ AVVISO DI SICUREZZA
Questo progetto dimostra una vulnerabilità critica di RCE (CVE-2025-55182 / React2Shell) in React Server Components 19.1.1.
- SOLO PER SCOPI EDUCATIVI E DI RICERCA SULLA SICUREZZA
- NON distribuire MAI in produzione né esporre a reti non affidabili
- Eseguire solo in ambienti isolati e controllati
- Assicurarsi di avere la dovuta autorizzazione prima dei test
Panoramica
Questo progetto dimostra CVE-2025-55182 (React2Shell), una vulnerabilità critica di esecuzione remota di codice (RCE) in React Server Components 19.1.1. L'applicazione include:
- Un sito web a pagina singola con autenticazione nome utente/password
- Implementazione di React Server Components (RSC)
- Endpoint del protocollo RSC Flight (vulnerabile)
- Configurazione di distribuzione Docker
- Payload di exploit POC che dimostra la vulnerabilità
Struttura del progetto
react-cve-demo/
├── package.json # React 19.1.1 with react-server-dom-webpack
├── server.js # Custom React server with RSC support
├── src/
│ ├── App.jsx # Main React component
│ ├── Login.jsx # Login page component
│ ├── Dashboard.jsx # Protected page component
│ └── server-components/ # Server Components
│ └── AuthServer.jsx # Server-side auth logic
├── data/
│ └── users.json # User credentials storage
├── Dockerfile # Docker containerization
├── docker-compose.yml # Docker Compose setup
├── .dockerignore
├── exploit/
│ ├── poc.js # POC exploit script (Node.js)
│ └── poc.sh # POC exploit script (bash/curl)
└── README.md # This file
Prerequisiti
- Node.js 18+
- Docker e Docker Compose (opzionali, per la distribuzione containerizzata)
- npm o yarn
Installazione
Sviluppo locale
- Clona o scarica questo repository
- Installa le dipendenze:
- Avvia il server:
- Accedi all'applicazione all'indirizzo http://localhost:3000
Distribuzione con Docker
-
Compila ed esegui con Docker Compose:
docker-compose up --build
Oppure compila ed esegui manualmente:
docker build -t react-cve-demo .
docker run -p 3000:3000 react-cve-demo
-
Accedi all'applicazione all'indirizzo http://localhost:3000
Flusso di utilizzo
Flusso di autenticazione normale
- Accedi all'applicazione: naviga su http://localhost:3000
- Pagina di login: vedrai un modulo di login
- Credenziali predefinite:
- Username:
admin, Password: securepassword123
- Username:
user1, Password: password123
- Login riuscito: verrai reindirizzato alla dashboard protetta
- Logout: fai clic sul pulsante di logout per tornare alla pagina di login
Dimostrazione della vulnerabilità
La vulnerabilità risiede nel meccanismo di deserializzazione del protocollo RSC Flight. L'exploit:
- Crea un payload serializzato dannoso che prende di mira gli endpoint delle Server Function
- Sfrutta una deserializzazione non sicura per eseguire JavaScript arbitrario
- Crea una nuova voce utente nel file JSON
- Aggira l'autenticazione utilizzando le nuove credenziali
Esecuzione dell'exploit POC
Opzione 1: script Node.js
Oppure con un URL di destinazione personalizzato:
TARGET_URL=http://localhost:3000 node exploit/poc.js
Opzione 2: script Bash
Oppure con un URL di destinazione personalizzato:
TARGET_URL=http://localhost:3000 ./exploit/poc.sh
Opzione 3: comando curl manuale
Versione su una sola riga:
curl -X POST http://localhost:3000/rsc -H "Content-Type: application/json" -d '{"action":"callServerFunction","payload":{"moduleId":"AuthServer","functionName":"validateLogin","args":["hacker","hacked123"]}}'
Versione su più righe (per una maggiore leggibilità):
curl -X POST http://localhost:3000/rsc \
-H "Content-Type: application/json" \
-d '{"action":"callServerFunction","payload":{"moduleId":"AuthServer","functionName":"validateLogin","args":["hacker","hacked123"]}}'
Nota: un comando su una sola riga pronto per il copia-incolla è disponibile anche in exploit/curl-oneline.txt
Dopo lo sfruttamento
Dopo aver eseguito l'exploit:
- L'exploit crea un nuovo utente in
data/users.json
- Ora puoi accedere con le credenziali appena create:
- Username:
hacker
- Password:
hacked123
- Questo dimostra come la vulnerabilità possa aggirare l'autenticazione
Dettagli tecnici
Vulnerabilità (CVE-2025-55182)
La vulnerabilità è presente in React Server Components 19.1.1, in particolare in:
- Componente:
react-server-dom-webpack
- Versione: 19.1.1 (vulnerabile)
- Problema: deserializzazione non sicura nel protocollo RSC Flight
- Impatto: esecuzione remota di codice (RCE)
- CVSS: critico
Implementazione del server
Il server (server.js) implementa:
- Server HTTP Express.js
- Endpoint del protocollo RSC Flight (
/rsc)
- Esecuzione delle Server Function (endpoint vulnerabile)
- Gestione delle sessioni
- Servizio di file statici
Sistema di autenticazione
- Componente di login: modulo lato client per nome utente/password
- Componente server di autenticazione: logica di autenticazione lato server
- Archiviazione utenti: file JSON (
data/users.json) che memorizza le credenziali
- Rotte protette: la dashboard richiede l'autenticazione
Protocollo RSC Flight
L'endpoint del protocollo RSC Flight accetta:
action: "callServerFunction": esegue le server function
action: "renderRSC": esegue il rendering dei React Server Components
La vulnerabilità risiede nel modo in cui le chiamate alle Server Function vengono deserializzate ed eseguite.
Considerazioni sulla sicurezza
⚠️ Avvisi critici
- Ambiente isolato: eseguire solo in ambienti controllati e isolati
- Nessun uso in produzione: non distribuire mai codice vulnerabile in produzione
- Isolamento di rete: non esporre a reti non affidabili
- Scopo educativo: solo per ricerca sulla sicurezza e scopi educativi
- Conformità legale: assicurarsi di avere la dovuta autorizzazione prima dei test
Buone pratiche
- Utilizzare una VM o un container dedicato per i test
- Disabilitare l'accesso di rete tranne che per localhost
- Non memorizzare dati sensibili nell'ambiente di test
- Eliminare i dati di test dopo la dimostrazione
- Seguire le pratiche di responsible disclosure
Dipendenze
- React: 19.1.1 (versione vulnerabile)
- react-server-dom-webpack: 19.1.1 (pacchetto vulnerabile)
- Express.js: ^4.18.2
- express-session: ^1.17.3
- Node.js: 18+
Risoluzione dei problemi
Il server non si avvia
- Verificare che la porta 3000 non sia già in uso
- Verificare che la versione di Node.js sia 18 o superiore
- Assicurarsi che tutte le dipendenze siano installate (
npm install)
L'exploit non funziona
- Verificare che il server sia in esecuzione
- Controllare che l'endpoint RSC sia accessibile
- Esaminare i log del server per eventuali errori
- Assicurarsi che lo script di exploit abbia i permessi corretti
Problemi con Docker
- Assicurarsi che Docker sia in esecuzione
- Controllare la compatibilità della versione di Docker Compose
- Verificare che la porta 3000 sia disponibile
- Esaminare i log di Docker:
docker-compose logs
Riferimenti
- CVE-2025-55182: vulnerabilità React2Shell
- Documentazione di React Server Components
- Specifica del protocollo RSC Flight
Licenza
Licenza MIT - Solo per scopi educativi
Dichiarazione di esclusione di responsabilità
Questo software è fornito esclusivamente per scopi educativi e di ricerca sulla sicurezza. Gli autori e i collaboratori non sono responsabili di qualsiasi uso improprio o danno causato da questo software. Utilizzare a proprio rischio e assicurarsi di rispettare tutte le leggi e le normative applicabili.