React Server Components (RSC) è un’architettura moderna utilizzata da framework popolari come Next.js per costruire applicazioni web interattive e ad alte prestazioni. Dato il suo ruolo nel rendering delle interfacce utente e nella gestione della logica lato server, rappresenta un componente critico dello stack applicativo. Questa vulnerabilità rappresenta uno scenario con il massimo impatto: una vulnerabilità di esecuzione di codice remoto (RCE) pre-autenticazione con un punteggio CVSS di 10.0, il che significa che un attaccante non autenticato da Internet può ottenere il pieno compromesso del server con una complessità minima.
Il rischio è eccezionalmente alto per tutte le applicazioni web esposte pubblicamente costruite con versioni vulnerabili di React o framework che utilizzano RSC. È disponibile codice exploit pubblico e, data la facilità di sfruttamento e il grave impatto, sono altamente probabili attacchi automatizzati su larga scala. Questa vulnerabilità è una candidata ideale per l’inclusione nel catalogo delle vulnerabilità note sfruttate (KEV) della CISA, e le organizzazioni dovrebbero presumere che venga attivamente sfruttata. Un attacco riuscito consente all’avversario di ottenere il pieno controllo del server, con conseguenti violazioni dei dati, distribuzione di ransomware o utilizzo del server per attaccare altri sistemi interni.
| Prodotto | React Server Components |
| Data | 2025-12-05 00:32:15 |
Riassunto tecnico
La causa principale di questa vulnerabilità è CWE-502: Deserializzazione di dati non affidabili durante la gestione dei payload delle Server Function di React. Le Server Function sono progettate per consentire ai componenti client-side di eseguire codice sul server, ma un difetto nella logica di deserializzazione permette a un attaccante di controllare il tipo di oggetto istanziato e le sue proprietà.
La catena di attacco si articola come segue:
- L’attaccante crea un oggetto serializzato malevolo contenente una “gadget chain” — una sequenza di istruzioni di codice che verranno eseguite al momento della deserializzazione.
- Questo payload viene inviato tramite una richiesta HTTP POST a un endpoint Server Function esposto pubblicamente.
- Il componente lato server riceve la richiesta e tenta di deserializzare il payload in un oggetto valido, fidandosi implicitamente del suo contenuto.
- Il processo di deserializzazione attiva la gadget chain malevola, portando all’esecuzione arbitraria di codice nel contesto dell’account utente del server web.
Una rappresentazione concettuale della vulnerabilità:
// Vulnerable Code
function deserialize(payload) {
// Deserializza direttamente input non affidabile, permettendo agli
// attaccanti di creare oggetti che eseguono codice.
return unsafe_deserialize(payload);
}
// Patched Code
function deserialize(payload) {
// La versione corretta valida l'input rispetto a una strict
// allow-list di tipi di oggetto noti e sicuri prima della deserializzazione.
if (!is_safe_type(payload)) {
throw new Error("Invalid payload type");
}
return safe_deserialize(payload);
}
Versioni affette: tutte le versioni di React Server Components e framework come Next.js precedenti agli ultimi aggiornamenti di sicurezza sono considerate vulnerabili.
Correzione: la vulnerabilità è stata risolta nelle ultime versioni.
Capacità dell’attaccante: un attaccante può eseguire qualsiasi comando sul server sottostante, consentendogli di leggere/scrivere/cancellare file, esfiltrare dati sensibili, installare malware o spostarsi lateralmente verso altri sistemi della rete.
Raccomandazioni
-
Applicare immediatamente le patch: aggiornare tutte le istanze di React e dei framework collegati (es. Next.js) alle ultime versioni correttive rilasciate dal fornitore. Questo è l’unico modo per rimediare completamente alla vulnerabilità.
-
Mitigazioni:
- Distribuire un Web Application Firewall (WAF) con regole specifiche progettate per ispezionare e bloccare payload serializzati malevoli indirizzati agli endpoint delle Server Function. Diversi fornitori WAF hanno già rilasciato regole per questa minaccia.
- Se non è possibile applicare la patch immediatamente, limitare l’accesso di rete all’applicazione vulnerabile alle sole fonti fidate. Questa è una misura temporanea e non sostituisce le patch.
-
Ricerca e monitoraggio:
- Verificare i log del server web e dell’applicazione alla ricerca di richieste HTTP POST verso endpoint Server Function con payload inusuali o anormalmente grandi.
- Monitorare processi anomali originati dal processo padre del server web (es.
node). Cercare connessioni di rete inaspettate, comandi shell (sh,bash,powershell), o modifiche di file in directory insolite. - Cercare richieste endpoint contenenti pattern indicativi di sonde di deserializzazione o exploit.
-
Risposta agli incidenti:
- Se si sospetta un compromesso, isolare immediatamente l’host affetto dalla rete per prevenire movimenti laterali.
- Conservare tutti i log rilevanti, dump di memoria e immagini disco per le analisi forensi.
- Presumere compromessi tutti i credenziali o segreti memorizzati o accessibili dal server compromesso e avviare le procedure di rotazione.
-
Defense-in-Depth:
- Eseguire l’applicazione web sotto un account di servizio a privilegi ridotti per limitare l’impatto immediato di un RCE.
- Utilizzare la segmentazione della rete per evitare che un server web compromesso possa accedere a sistemi interni critici come database o reti amministrative.
- Mantenere e testare regolarmente un solido piano di backup e ripristino.