CVE-2025-11953 è una vulnerabilità critica di esecuzione di codice remoto (RCE) che colpisce il React Native Community CLI, ampiamente utilizzato, in particolare il pacchetto @react-native-community/cli-server-api nelle versioni dalla 4.8.0 alla 20.0.0-alpha.2. Questo pacchetto, mantenuto da Meta e scaricato da 1,5 a 2 milioni di volte a settimana, consente agli sviluppatori di creare applicazioni mobili React Native.
La vulnerabilità deriva da un difetto di iniezione di comandi del sistema operativo nel Metro Development Server, che si associa alle interfacce esterne per impostazione predefinita anziché alla localhost. Un attaccante non autenticato sulla stessa rete può sfruttare questa falla per eseguire comandi arbitrari del sistema operativo sui computer degli sviluppatori che eseguono versioni vulnerabili del CLI.
Con un punteggio CVSS di 9.8 (Critico) e l’elevata facilità di sfruttamento senza autenticazione, questa vulnerabilità rappresenta un rischio significativo per l’intero ecosistema degli sviluppatori React Native. Le organizzazioni devono dare priorità all’applicazione della patch immediatamente per prevenire potenziali compromissioni della supply chain e il controllo dei computer degli sviluppatori.
| Prodotto | com.facebook.react.packagerconnection |
| Data | 2025-11-06 10:50:36 |
| Informazioni | Trending |
Riassunto tecnico
La vulnerabilità si trova nell’endpoint /open-url del Metro Development Server, che gestisce le richieste POST senza una valida validazione dell’input. L’endpoint accetta input fornito dall’utente e lo passa direttamente alla funzione open() non sicura fornita dal pacchetto NPM open, risultando nell’esecuzione di comandi del sistema operativo.
Flusso del codice vulnerabile:
- Il server Metro si associa per impostazione predefinita alle interfacce di rete esterne (0.0.0.0) invece che limitarsi alla localhost (127.0.0.1)
- Il server espone l’endpoint
/open-urlche accetta richieste POST - L’input controllato dall’utente dal corpo della richiesta POST viene passato senza sanificazione alla funzione
open() - La funzione
open()esegue comandi di sistema per aprire URL/file, ma può essere manipolata per eseguire comandi arbitrari
Caratteristiche dello sfruttamento:
- Sistemi Windows: gli attaccanti ottengono esecuzione completa di comandi OS con controllo completo sugli argomenti dei comandi, consentendo l’esecuzione di comandi shell arbitrari come
cmd.exe /c malicious-command - Sistemi Linux/macOS: gli attaccanti possono lanciare eseguibili arbitrari con controllo limitato sui parametri (anche se ulteriori ricerche potrebbero consentire l’esecuzione completa di comandi)
Esempio di vettore d’attacco:
Un attaccante sulla stessa rete può inviare una richiesta POST malevola al server Metro esposto:
POST http://<target-ip>:8081/open-url
Content-Type: application/json
{
"url": "malicious-payload-here"
}
La vulnerabilità è particolarmente pericolosa perché:
- Nessuna autenticazione richiesta – qualsiasi attaccante di rete può sfruttarla
- Configurazione predefinita vulnerabile – gli sviluppatori sono esposti fin da subito quando avviano
react-native start - Accessibile dalla rete – non limitata a sfruttamenti locali; gli attaccanti nella stessa WiFi, VPN o rete aziendale possono attaccare
- Targeting degli sviluppatori – compromettere i computer degli sviluppatori può portare ad attacchi alla supply chain che colpiscono le applicazioni a valle
Raccomandazioni
La correzione (versione 20.0.0) risolve la vulnerabilità validando e sanificando correttamente l’input prima di passarlo alla funzione open(), prevenendo così l’iniezione di comandi.
Applicare la patch immediatamente
Aggiorna il pacchetto @react-native-community/cli-server-api alla versione 20.0.0 o superiore in tutti i progetti React Native. Questo può essere fatto:
- Aggiornando
@react-native-community/clialla versione 20.0.0 o successiva (che include la versione corretta di cli-server-api) - Eseguendo
npm update @react-native-community/cli-server-apioyarn upgrade @react-native-community/cli-server-apiin ogni directory del progetto - Verificando l’aggiornamento con
npm ls @react-native-community/cli-server-api
Implementare restrizioni sul binding di rete
Se non è possibile applicare la patch immediatamente, configura il Metro Development Server per associarsi esplicitamente alla localhost, procedendo così:
- Modifica la configurazione del server affinché ascolti solo su 127.0.0.1 invece di 0.0.0.0
- Utilizza regole del firewall per bloccare l’accesso esterno alla porta 8081 (porta predefinita di Metro)
- Esegui i server di sviluppo dietro VPN o segmenti di rete isolati
Ricerca e monitoraggio
Avvia valutazioni di sicurezza immediate:
- Analizza i log di rete alla ricerca di richieste POST sospette agli endpoint
/open-urlsulla porta 8081 - Esamina i computer degli sviluppatori per segni di compromissione, inclusa l’esecuzione di processi imprevisti
- Verifica tentativi di accesso non autorizzato da indirizzi IP esterni ai server di sviluppo
- Monitora connessioni in uscita insolite dai computer degli sviluppatori che potrebbero indicare attività di command-and-control
Applicare difesa in profondità
Implementa ulteriori livelli di sicurezza:
- Segmentazione di rete: isola gli ambienti di sviluppo dalle reti di produzione
- Sistemi di rilevamento delle intrusioni (IDS): configura avvisi per modelli di iniezione di comandi che prendono di mira i server Metro
- Soluzioni EDR (Endpoint Detection and Response): distribuisci soluzioni EDR sui computer degli sviluppatori per rilevare l’esecuzione di processi malevoli
- Scansione della supply chain: implementa la scansione automatizzata delle dipendenze per identificare pacchetti vulnerabili prima della distribuzione
- Principio del privilegio minimo: assicurati che gli account degli sviluppatori non dispongano di privilegi amministrativi non necessari che potrebbero amplificare l’impatto della compromissione
Verifica la tua esposizione
Non tutti gli sviluppatori React Native sono vulnerabili:
- La vulnerabilità esiste solo se si utilizza Metro come server di sviluppo – gli sviluppatori che utilizzano framework alternativi che non si basano su Metro non sono interessati
- Verifica se il tuo flusso di lavoro di sviluppo utilizza attivamente
react-native starto il bundler Metro - Controlla se le versioni vulnerabili del pacchetto sono effettivamente in uso nel tuo albero delle dipendenze