React2Shell e la Supply Chain npm: Le Fondamenta del Web Tremano
React2Shell e Metro4Shell: due vulnerabilità critiche nell'ecosistema React e npm che hanno esposto il 39% degli ambienti cloud mondiali. Anatomia, attori e lezioni dalla supply chain del web.
IN PRIMA PAGINAIARETI E INFRASTRUTTURE DIGITALICYBERSECURITY E RESILIENZA DIGITALE


React2Shell e la Supply Chain npm:
Le Fondamenta del Web Tremano
Quando una singola richiesta HTTP può far crollare il 39% degli ambienti cloud del pianeta
Il giorno in cui React è diventato un'arma
Il 3 dicembre 2025, una notizia ha attraversato la community della cybersecurity con la velocità di uno zero-day: una vulnerabilità critica con punteggio CVSS 10.0 , il massimo possibile , è stata scoperta nel cuore di React Server Components. Non in un plugin oscuro, non in una libreria di terze parti dimenticata su npm: nel framework stesso su cui si regge buona parte del web moderno.
La vulnerabilità, battezzata React2Shell (CVE-2025-55182), permette a un attaccante di eseguire codice arbitrario su un server tramite una singola richiesta HTTP, senza autenticazione, con un tasso di successo vicino al 100%. Non servono credenziali rubate. Non serve social engineering. Basta un POST ben confezionato.
Il nome non è casuale. "React2Shell" è un richiamo esplicito a Log4Shell (CVE-2021-44228), la vulnerabilità che nel 2021 mandò nel panico mezzo internet. E il paragone, purtroppo, è calzante: stessa severità massima, stessa facilità di exploit, stessa distribuzione capillare del software vulnerabile.
Ma c'è una differenza che rende React2Shell forse ancora più insidiosa: React non è un componente di logging che gira in background. È il framework frontend più utilizzato al mondo, con 55 milioni di download settimanali su npm, adottato da Netflix, Airbnb, e milioni di altre applicazioni. Colpire React significa colpire il tessuto connettivo del web.
Parte 1: Anatomia di React2Shell
Il protocollo Flight: dove tutto inizia
Per capire React2Shell bisogna capire cosa sono i React Server Components (RSC) e il protocollo che li governa: Flight.
React 19 ha introdotto una rivoluzione architetturale: la possibilità di eseguire componenti React direttamente sul server anziché nel browser. Il protocollo Flight è il meccanismo che serializza e deserializza gli "alberi di componenti" , le strutture dati che descrivono come l'interfaccia deve essere renderizzata , facendole viaggiare tra client e server.
Il problema è tanto semplice quanto devastante: il server si fidava ciecamente dei dati in arrivo dal client.
Il decoder server-side di React non validava la struttura dei payload in ingresso. Quando un server riceveva un payload RSC appositamente malformato, non verificava la coerenza dei dati prima di processarli. Questo permetteva a un attaccante di iniettare oggetti arbitrari che venivano deserializzati in un contesto privilegiato, portando all'esecuzione di codice JavaScript con i permessi del processo Node.js in esecuzione.
In termini meno tecnici: è come se un ristorante accettasse qualsiasi pacco dalla porta di servizio senza controllare cosa contiene. E il contenuto venisse servito direttamente ai clienti.
La vulnerabilità in numeri
I dati emersi nelle settimane successive alla disclosure parlano chiaro:
CVSS 10.0 , severità massima, il punteggio più alto possibile
39% degli ambienti cloud monitorati da Wiz contenevano istanze vulnerabili di React o Next.js
69% degli ambienti cloud includevano Next.js da qualche parte nello stack
44% di tutti gli ambienti cloud avevano applicazioni Next.js esposte pubblicamente su Internet
968.000+ server React/Next.js rilevati dalla telemetria di Palo Alto Cortex Xpanse
90.300 istanze ancora vulnerabili al 31 dicembre 2025, di cui 68.400 solo negli Stati Uniti
12 milioni di siti web potenzialmente impattati secondo le stime iniziali
Per contestualizzare: un'app Next.js standard, creata con create-next-app e compilata per la produzione, era exploitabile senza alcuna modifica al codice da parte dello sviluppatore. La configurazione di default era vulnerabile.
Da disclosure a weaponization: questione di ore
La timeline di React2Shell è un caso di studio su quanto velocemente il cybercrime moderno trasforma una vulnerabilità in un'arma operativa:
29 novembre 2025: Lachlan Davidson scopre la vulnerabilità e la segnala al team React attraverso il programma Bug Bounty di Meta
3 dicembre 2025: Disclosure pubblica coordinata. Vercel, Meta e i principali cloud provider rilasciano patch simultaneamente
3 dicembre, poche ore dopo: I team di threat intelligence di Amazon rilevano tentativi di exploit attivi da parte di gruppi state-nexus cinesi, tra cui Earth Lamia e Jackpot Panda
4 dicembre 2025: Un proof-of-concept funzionante viene pubblicato su GitHub dal security engineer Moritz Sanft
5 dicembre, ore 6:00 UTC: Wiz Research identifica multiple vittime compromesse, principalmente applicazioni Next.js e container Kubernetes
5 dicembre 2025: Datadog rileva oltre 80 indirizzi IP associati a threat actor in fase di scansione
8 dicembre 2025: GreyNoise osserva tentativi di exploit da oltre 200 IP negli ultimi due giorni
12 dicembre 2025: Google Threat Intelligence Group (GTIG) conferma campagne multiple da cluster cinesi, iraniani e cybercriminali finanziariamente motivati
15 dicembre 2025: Microsoft pubblica un'analisi dettagliata con centinaia di macchine compromesse confermate
Fine dicembre 2025: Il botnet RondoDox lancia oltre 40 tentativi React2Shell in sei giorni, eliminando miner concorrenti e mimetizzandosi come processi di sistema legittimi
Poche ore. Dalla pubblicazione della patch alla weaponization su scala globale sono bastate poche ore. Non giorni, non settimane. Ore.
Parte 2: Chi ha attaccato e come
Attori statali: la Cina si muove per prima
La risposta più rapida è arrivata da attori legati alla Cina. Amazon, Google e Palo Alto Networks hanno tutti confermato indipendentemente che gruppi state-nexus cinesi sono stati tra i primi a sfruttare React2Shell.
Secondo AWS, le infrastrutture associate a Earth Lamia e Jackpot Panda hanno iniziato a sondare sistemi vulnerabili entro ore dalla disclosure. Google ha confermato "campagne distinte" che hanno utilizzato la vulnerabilità per distribuire il tunneler MINOCAT, il downloader SNOWLIGHT, le backdoor HISONIC e COMPOOD, e il miner XMRIG.
Palo Alto Networks Unit 42 ha identificato attività riconducibile a CL-STA-1015, un initial access broker (IAB) con sospetti legami con il Ministero della Sicurezza di Stato della Repubblica Popolare Cinese. L'attività coinvolgeva l'esecuzione fileless di script shell malevoli, seguita dall'installazione dei trojan SNOWLIGHT e VShell.
Anche attori iraniani sono stati osservati sfruttare la vulnerabilità.
La kill chain: dal POST al controllo totale
Microsoft ha descritto in dettaglio la catena di attacco tipica:
Exploit: L'attaccante invia una richiesta POST artefatta a un endpoint Server Function. Il payload serializzato viene deserializzato dal backend, che esegue il codice dell'attaccante sotto il runtime Node.js.
Discovery: Una volta ottenuta l'esecuzione di codice, l'attaccante esegue comandi di ricognizione , whoami, hostname, dump delle variabili d'ambiente, enumerazione di /etc/passwd , per profilare l'host e il contesto di esecuzione.
Persistence: Gli attaccanti installano strumenti di accesso remoto come MeshAgent, aggiungono utenti malevoli, modificano il file authorized_keys, e abilitano il login root.
Payload delivery: Tramite wget e curl, scaricano ed eseguono script malevoli, inclusi loader Mirai, reverse shell verso server Cobalt Strike, e cryptominer.
Lateral movement: Nelle compromissioni più sofisticate, gli attaccanti esfiltrano credenziali AWS, file di configurazione cloud, e usano Sliver per il movimento laterale nell'infrastruttura.
Cybercrime opportunistico: tutti vogliono un pezzo
Non sono stati solo gli attori statali. L'analisi di Ellio ha mostrato che solo il 2% degli attacchi React2Shell era limitato a ricognizione. Il 65% tentava di distribuire malware Mirai (per costruire botnet) e cryptominer. Il botnet RondoDox si è distinto per la sua sofisticazione: terminava miner concorrenti, rimuoveva artefatti di attacchi precedenti, ripuliva payload Docker lasciati da altri threat actor, e si mimetizzava come processi di sistema legittimi come systemd-devd.
Parte 3: Le patch incomplete, il problema non finisce qui
Il ciclo delle vulnerabilità che non si chiudono
Se React2Shell fosse stata una vulnerabilità isolata, risolta con una patch e dimenticata, sarebbe già abbastanza grave. Ma la realtà è peggiore: la disclosure iniziale ha aperto un vaso di Pandora.
Dopo il 3 dicembre, i ricercatori di sicurezza hanno fatto quello che fanno sempre dopo una vulnerabilità critica: hanno esaminato il codice circostante cercando varianti e bypass.
11 dicembre 2025: Emergono due nuove vulnerabilità , CVE-2025-55184 (Denial of Service, CVSS 7.5) e CVE-2025-55183 (Source Code Exposure, CVSS 5.3). La prima permette di mandare in loop infinito il server con una singola richiesta HTTP appositamente crafted, bloccando tutte le richieste successive. Chi aveva appena patchato per React2Shell doveva patchare di nuovo.
Ma non è finita. La fix per CVE-2025-55184 si è rivelata incompleta. Il team React ha rilasciato una nuova patch sotto CVE-2025-67779, ammettendo che la correzione precedente non copriva tutti i vettori di attacco.
26 gennaio 2026: Colpo di scena finale. Emerge CVE-2026-23864 (CVSS 7.5), che dimostra che anche le patch precedenti erano insufficienti. Nuovi vettori di Denial of Service permettevano crash del server, eccezioni di out-of-memory, e consumo eccessivo di CPU. Solo le versioni 19.0.4, 19.1.5 e 19.2.4 di React sono considerate sicure.
In tre mesi: una RCE critica, tre DoS, una source code exposure, e almeno due patch incomplete. Lo stesso componente, lo stesso protocollo Flight, lo stesso problema di fondo: la serializzazione di React Server Components non è mai stata progettata pensando a input non fidati.
Come ha sintetizzato un analista di Roboto Studio: "RSC security is still maturing" , la sicurezza dei React Server Components è ancora in fase di maturazione. Una frase educata per dire che le fondamenta non sono solide.
Parte 4: Metro4Shell: l'altra bomba nell'ecosistema React
Quando il tool di sviluppo diventa la porta d'ingresso
Mentre l'attenzione del mondo era concentrata su React2Shell, un'altra vulnerabilità critica stava silenziosamente mietendo vittime nell'ecosistema React. E questa colpisce dove fa ancora più male: le macchine degli sviluppatori.
CVE-2025-11953, ribattezzata Metro4Shell (CVSS 9.8), è una vulnerabilità di command injection nel server di sviluppo Metro, il bundler JavaScript predefinito per React Native, distribuito tramite il pacchetto npm @react-native-community/cli.
Il problema risiede nell'endpoint /open-url del server Metro, che passa l'input dell'utente direttamente alla funzione open() del pacchetto npm open, senza alcuna sanitizzazione. Un attaccante remoto non autenticato può eseguire comandi arbitrari del sistema operativo.
C'è un dettaglio che rende la situazione ancora più perversa: Metro, per default, si lega a tutte le interfacce di rete (0.0.0.0) nonostante mostri un messaggio che indica "localhost:8081". Uno sviluppatore che vede "localhost" pensa di essere al sicuro. Non lo è.
46 giorni nel buio
La timeline di Metro4Shell è un caso di studio su quanto il sistema di allerta della cybersecurity possa fallire:
Novembre 2025: JFrog pubblica i dettagli tecnici della vulnerabilità
21 dicembre 2025: VulnCheck rileva il primo exploit attivo nella sua rete di honeypot Canary
4 gennaio 2026: Stessi payload osservati di nuovo
21 gennaio 2026: Terza ondata di attacchi con gli stessi payload, indicando uso operativo continuativo
Fine gennaio 2026: L'EPSS (Exploit Prediction Scoring System) assegna ancora una probabilità di exploit dello 0.00405 , praticamente zero
5 febbraio 2026: CISA aggiunge CVE-2025-11953 al catalogo KEV
6 febbraio 2026: L'EPSS salta da 0.4% a 15.6% , non perché l'exploit sia cambiato, ma perché è arrivata l'etichetta ufficiale
46 giorni. Per 46 giorni, attaccanti hanno attivamente distribuito malware sulle macchine degli sviluppatori mentre il sistema di scoring che molti team usano per prioritizzare le patch classificava la vulnerabilità come irrilevante. Come ha osservato Averlon: "The model didn't detect the exploitation. It detected the label" , il modello non ha rilevato l'exploit, ha rilevato l'etichetta.
Attacchi mirati agli sviluppatori: il nuovo fronte
I payload osservati mostrano un attacco multi-stadio studiato per colpire ambienti di sviluppo:
Disabilitazione delle difese: Script PowerShell base64-encoded che aggiungono esclusioni in Microsoft Defender per la directory di lavoro corrente e la cartella temporanea
Connessione C2: Stabilimento di una connessione TCP raw verso infrastruttura controllata dall'attaccante
Payload retrieval: Download di payload specifici per piattaforma (Windows e Linux)
Persistence: Installazione di malware Rust-based, trojan SNOWLIGHT e VShell
La logica è chiara: gli ambienti di sviluppo contengono codice sorgente, credenziali, chiavi API, e accesso a infrastrutture di produzione. Compromettere una macchina sviluppatore è spesso la via più breve verso l'intera organizzazione.
Come ha scritto VulnCheck: "Development infrastructure becomes production infrastructure the moment it is reachable, regardless of intent" , l'infrastruttura di sviluppo diventa infrastruttura di produzione nel momento in cui è raggiungibile, indipendentemente dall'intenzione.
Parte 5: Il problema strutturale: npm e la fragilità del web moderno
L'elefante nella stanza: le dipendenze
React2Shell e Metro4Shell non sono incidenti isolati. Sono sintomi di un problema strutturale che la community del software ha scelto di ignorare per anni: l'ecosistema npm su cui si regge buona parte del web moderno è una superficie d'attacco enorme e fragile.
Alcuni numeri per contestualizzare:
npm ospita oltre 2,5 milioni di pacchetti
React da solo ha 55 milioni di download settimanali
Next.js ne ha 16,7 milioni
Il 40% di tutti gli sviluppatori utilizza React
Il 18-20% usa Next.js, rendendolo il framework server-side dominante per l'ecosistema React
Ogni pacchetto npm porta con sé un albero di dipendenze che può raggiungere profondità vertiginose. Un singolo npm install può scaricare centinaia di pacchetti, ciascuno scritto da sviluppatori diversi, con diversi livelli di attenzione alla sicurezza, diversi livelli di manutenzione, diversi livelli di fiducia.
Quando una vulnerabilità critica colpisce un pacchetto fondamentale come react-server, l'onda d'urto si propaga istantaneamente a milioni di applicazioni. Non perché quegli sviluppatori abbiano fatto scelte sbagliate, ma perché hanno fatto la scelta standard: usare il framework raccomandato, con la configurazione di default, seguendo la documentazione ufficiale.
La trust chain spezzata
React Server Components ha introdotto un cambiamento architetturale fondamentale: la separazione tra client e server è diventata porosa. Il protocollo Flight fa viaggiare dati serializzati tra client e server assumendo una relazione di fiducia che, in un contesto di sicurezza, non può esistere.
Come ha spiegato Qualys: "React's server runtime was never built to handle untrusted input" , il runtime server di React non è mai stato costruito per gestire input non fidato. Tradizionalmente, l'input del client viene sanitizzato e filtrato dalle API prima che qualsiasi logica server venga eseguita. React Server Components ha offuscato quella separazione, permettendo a dati serializzati di viaggiare direttamente tra client e server.
È un pattern che la cybersecurity conosce bene: la convenienza architettonica diventa vulnerabilità quando la sicurezza non viene considerata come requisito di design fin dall'inizio.
Le lezioni (non apprese) dalla storia
Log4Shell nel 2021 avrebbe dovuto essere il campanello d'allarme definitivo per la supply chain del software. Una libreria di logging presente in milioni di applicazioni Java si è rivelata una porta d'ingresso universale. La community ha reagito con urgenza, ma le soluzioni strutturali , Software Bill of Materials (SBOM), signing dei pacchetti, audit delle dipendenze , sono state adottate lentamente e in modo disomogeneo.
React2Shell dimostra che la lezione non è stata appresa. I framework più popolari del web continuano a operare con modelli di fiducia implicita, configurazioni di default insicure, e processi di patch che richiedono multiple iterazioni per coprire tutti i vettori di attacco.
Parte 6: Cosa significa per le organizzazioni e per tutti noi
Per i team di sicurezza: azioni immediate
Inventario e patch
La priorità zero è sapere dove React e Next.js sono in uso nella propria infrastruttura. Non solo nelle applicazioni web principali: nei microservizi, nei tool interni, nelle pipeline CI/CD, nei container. Un semplice npm ls react-server-dom-webpack può rivelare dipendenze nascoste.
Le versioni sicure per React2Shell e tutte le vulnerabilità successive sono React 19.0.4, 19.1.5, 19.2.4. Per Next.js, le patch sono disponibili per tutte le major version dalla 14 alla 16.
Monitoraggio post-patch
Avere patchato non significa essere al sicuro. Se l'applicazione era esposta durante la finestra di vulnerabilità (3-31 dicembre 2025), bisogna cercare indicatori di compromissione: processi anomali, connessioni verso IP sospetti, modifiche al file authorized_keys, utenti creati di recente.
Metro4Shell: non dimenticare lo sviluppo
Aggiornare @react-native-community/cli alla versione 20.0.0 o successiva. Verificare che il server Metro non sia accessibile da reti non fidate. Trattare le macchine degli sviluppatori come endpoint critici, non come "solo postazioni di lavoro".
Per i decision maker: il quadro strategico
React2Shell non è un problema che si risolve con una patch e si dimentica. È il segnale di un rischio strutturale che richiede risposte strategiche:
Software Bill of Materials (SBOM): Sapere esattamente quali componenti software sono in uso in ogni applicazione. Quando la prossima React2Shell arriverà , e arriverà , la velocità di risposta dipenderà dalla visibilità sull'inventario delle dipendenze.
Vulnerability management basato su intelligence, non su punteggi: Metro4Shell ha dimostrato che l'EPSS può rimanere vicino allo zero per 46 giorni mentre gli attaccanti operano attivamente. I team che basano le priorità di patch esclusivamente su score automatici rischiano di arrivare in ritardo di settimane.
Zero Trust anche per il codice: Non basta fidarsi di un framework perché è popolare o perché è mantenuto da Meta. Ogni dipendenza è un potenziale punto di ingresso, e la configurazione di default non è sinonimo di sicurezza.
Per gli sviluppatori: il momento della consapevolezza
Se siete sviluppatori React o Next.js, React2Shell vi riguarda direttamente. Non è un problema "da team di sicurezza": è un problema del codice che scrivete e delle scelte architetturali che fate.
Alcune domande da porsi:
Sapete esattamente quali dipendenze npm il vostro progetto include, dirette e transitive?
Avete un processo automatizzato per rilevare vulnerabilità nelle dipendenze?
Le vostre configurazioni di default sono sicure, o le avete lasciate così come erano al primo npm init?
Il vostro server Metro è raggiungibile solo da localhost, o è esposto sulla rete?
Conclusione: le fondamenta che diamo per scontate
React2Shell e Metro4Shell ci raccontano una storia scomoda sul web che usiamo ogni giorno.
Miliardi di persone interagiscono quotidianamente con applicazioni costruite su React. Lo fanno quando prenotano un volo, quando consultano il conto in banca, quando leggono le notizie. La maggior parte non ha idea di cosa sia React, di cosa sia npm, di cosa sia un protocollo di serializzazione. E non dovrebbe doverlo sapere.
Ma chi costruisce e mantiene queste infrastrutture , sviluppatori, architetti, team di sicurezza, decision maker , ha il dovere di sapere. Ha il dovere di chiedersi: cosa succede quando le fondamenta tremano?
La risposta di dicembre 2025 è stata chiara: quando le fondamenta tremano, il 39% degli ambienti cloud del mondo diventa vulnerabile a una singola richiesta HTTP. Attori statali weaponizzano l'exploit in ore. Le patch si rivelano incomplete. E gli sviluppatori scoprono che il tool di sviluppo che usavano ogni giorno era un punto d'ingresso per il malware.
Il web moderno è un miracolo di ingegneria collaborativa. Ma è anche un castello di carte dove ogni carta si fida ciecamente delle altre. React2Shell ha dimostrato cosa succede quando una di quelle carte si rivela difettosa: l'intera struttura vacilla.
La soluzione non è smettere di usare React o npm. È smettere di dare per scontata la sicurezza delle fondamenta su cui costruiamo. È investire nella supply chain security non come compliance checkbox, ma come priorità strategica. È trattare ogni dipendenza come potenziale superficie d'attacco, e ogni configurazione di default come potenziale vulnerabilità.
Come scriveva Aaron Swartz, citato nella homepage di Network Caffè: "L'informazione è potere." Ma il codice è infrastruttura. E quando l'infrastruttura su cui si regge il web viene compromessa, il potere passa a chi sa sfruttarne le debolezze.
La domanda non è se arriverà la prossima React2Shell. La domanda è: questa volta saremo pronti?
Bibliografia:
React Team (2025). "Critical Security Vulnerability in React Server Components". react.dev, 3 dicembre 2025
React Team (2026). "Denial of Service and Source Code Exposure in React Server Components". react.dev, aggiornato 26 gennaio 2026
Wiz Research (2025). "React2Shell (CVE-2025-55182): Critical React Vulnerability". wiz.io, 3 dicembre 2025
Wiz Research (2025). "React2Shell Deep Dive: CVE-2025-55182 Exploit Mechanics". wiz.io, 8 dicembre 2025
Amazon Web Services (2025). "China-nexus cyber threat groups rapidly exploit React2Shell vulnerability". aws.amazon.com, 4 dicembre 2025
Google Threat Intelligence Group (2025). "Multiple Threat Actors Exploit React2Shell (CVE-2025-55182)". cloud.google.com, 13 dicembre 2025
Microsoft Security Blog (2025). "Defending against CVE-2025-55182 (React2Shell)". microsoft.com, 15 dicembre 2025
Palo Alto Networks Unit 42 (2025). "Exploitation of Critical Vulnerability in React Server Components". unit42.paloaltonetworks.com, 12 dicembre 2025
Datadog Security Labs (2025). "CVE-2025-55182 (React2Shell): Remote code execution in React Server Components". securitylabs.datadoghq.com, 4 dicembre 2025
Rapid7 (2025). "React2Shell, Critical unauthenticated RCE affecting React Server Components". rapid7.com, 4 dicembre 2025
Qualys (2025). "React2Shell: Decoding CVE-2025-55182". blog.qualys.com, 10 dicembre 2025
VulnCheck (2026). "Metro4Shell: Exploitation of React Native's Metro Server in the Wild". vulncheck.com, febbraio 2026
The Hacker News (2026). "Hackers Exploit Metro4Shell RCE Flaw in React Native CLI npm Package". thehackernews.com, febbraio 2026
BleepingComputer (2026). "Hackers exploit critical React Native Metro bug to breach dev systems". bleepingcomputer.com, febbraio 2026
Vercel (2026). "Summary of CVE-2026-23864". vercel.com, 26 gennaio 2026
Akamai (2026). "CVE-2026-23864: React and Next.js Denial of Service via Memory Exhaustion". akamai.com, gennaio 2026
Endor Labs (2025). "Critical Remote Code Execution Vulnerabilities in React and Next.js". endorlabs.com, 3 dicembre 2025
SecurityWeek (2025). "Exploitation of React2Shell Surges". securityweek.com, 8 dicembre 2025
Recorded Future (2025). "Critical React2Shell Vulnerability Under Active Exploitation by Chinese Threat Actors". recordedfuture.com, dicembre 2025
Averlon (2026). "CVE-2025-11953 Analysis: React Native Metro Dev Server Command Injection". averlon.ai, febbraio 2026