React Native CLI: Gefahr durch Remote Code Execution.
In einem der am weitesten verbreiteten Entwicklungstools für plattformübergreifende Mobile-Apps wurde eine kritische Sicherheitslücke entdeckt. Die unter der Kennung CVE-2025-11953 geführte Schwachstelle betrifft das Paket react-native-community/cli, einen zentralen Bestandteil des React Native Ökosystems, das aktuell etwa zwei Millionen Downloads pro Woche verzeichnet.
Zusammenfassung (TL; DR):
- Unauthentifizierte Angreifer können beliebige Betriebssystembefehle auf Rechnern ausführen, auf denen der react-native-community/cli-Entwicklungsserver läuft.
- Die Schwachstelle liegt im Paket react-native-community/cli-server-api in den Versionen 4.8.0 bis 20.0.0-alpha.2
Bedrohung durch Remote-Code-Ausführung
Das JFrog Security Research Team identifizierte CVE-2025-11953 und bewertete die Schwachstelle mit einem CVSS-Wert von 9,8. Unauthentifizierte Angreifer können demnach beliebige Betriebssystembefehle auf Rechnern ausführen, auf denen der react-native-community/cli-Entwicklungsserver läuft. JFrog wies nach, dass bei Erreichbarkeit des verwundbaren Servers Befehle auf dem Host ausgeführt werden können: Unter Windows ermöglicht die Lücke die Ausführung beliebiger Shell-Befehle mit voller Kontrolle über die Parameter; unter macOS und Linux führt sie zur Ausführung beliebiger ausführbarer Dateien bei eingeschränkter Parametersteuerung. JFrog weist darauf hin, dass vollständige Befehlsausführung auf Unix-ähnlichen Systemen mit weiterführender Forschung möglich sein könnte. Die Befunde beruhen auf der Ausnutzung des von der CLI gestarteten Metro-Entwicklungsservers und seiner exponierten HTTP-Endpunkte.
Technischer Hintergrund
Funktionsweise der Sicherheitslücke
Die Schwachstelle liegt im Paket react-native-community/cli-server-api in den Versionen 4.8.0 bis 20.0.0-alpha.2 und wurde in Version 20.0.0 behoben. Der Metro-Server stellt einen open-url-HTTP-Endpunkt bereit, dessen Handler eine URL-Zeichenfolge aus dem JSON-POST-Body liest und diese ohne Bereinigung an die Funktion open() des npm-Pakets open (in der Untersuchung Version 6.4.0) übergibt. Unter Windows führt open(url) zur Ausführung von cmd mit den Argumenten [‘/c’, ‘start’, ‘””‘, ‘/b’, <Ziel>] (nach dem Escapen von &), sodass etwa die Übergabe von calc.exe den Befehl cmd /c start “” /b calc.exe auslöst und den Taschenrechner startet. Durch das Einspeisen einer präparierten Zeichenfolge wie einer cmd /c-Nutzlast demonstrierte JFrog das Erzeugen einer Datei (zum Beispiel durch cmd /c start “” /b cmd /c echo abc > c:\temp\pwned.txt) und bewies damit die Ausführung beliebiger Befehle. Auf Unix-ähnlichen Systemen ruft open() stattdessen open <Ziel> oder xdg-open <Ziel> ohne Shell und mit anderer Argumentsemantik auf; das schränkt direkte Befehlsinjektion ein, erlaubt jedoch unter bestimmten Voraussetzungen weiterhin die Ausführung beliebiger ausführbarer Dateien.
Fehlerhafte Serverkonfiguration erhöht das Risiko
Die Untersuchungen von JFrog zeigen auch, warum der anfällige Endpunkt von externen Netzwerken aus erreichbar ist. Der runServer-Code der CLI erstellt eine Hostnamen-Variable (standardmäßig „localhost“) zur Anzeige, übergibt jedoch args.host (das standardmäßig nicht definiert ist) an Metro.runServer. Da Metro letztendlich httpServer.listen mit einem undefinierten Host-Argument aufruft, besteht das Verhalten von Node darin, auf die nicht angegebene IPv6-Adresse (::) zu hören, sofern verfügbar, oder andernfalls auf die nicht angegebene IPv4-Adresse (0.0.0.0). In der Praxis gibt der Server „Starting dev server on http://localhost:8081“ aus, während er tatsächlich an 0.0.0.0 und IPv6 [::] gebunden ist und nur für die Entwicklung bestimmte HTTP-Endpunkte (einschließlich /open-url) für Angreifer aus externen Netzwerken offenlegt. Dieses Bindungsverhalten in Kombination mit der Schwachstelle bei der Ausführung des Befehls open-url macht eine Remote-Ausnutzung möglich.
Wer ist betroffen?
Betroffen sind Entwickler, die ihr React Native-Projekt mit einer anfälligen Version des Pakets @react-native-community/cli initialisiert haben und den Metro-Entwicklungsserver mit Befehlen wie npm start, npm run start, android, ios, windows oder macos oder npx react-native oder npx @react-native-community/cli mit denselben Parametern ausführen. Die Sicherheitslücke ist standardmäßig ausnutzbar, wenn ein React Native-Projekt mit @react-native-community/cli initiiert wird, aber nicht jeder Entwickler, der diese Bibliothek installiert hat, ist zwangsläufig gefährdet. Entwickler, die React Native mit einem Framework verwenden, das nicht auf den Metro-Entwicklungsserver angewiesen ist, sind in der Regel nicht betroffen. Unter Windows führt die Sicherheitslücke zur Ausführung beliebiger Betriebssystembefehle mit vollständiger Parameterkontrolle. Unter macOS und Linux ermöglicht sie die Ausführung beliebiger ausführbarer Dateien mit eingeschränkter Parameterkontrolle.
Empfohlene Abhilfemaßnahme
Die Aktualisierung des Pakets @react-native-community/cli-server-api auf Version 20.0.0 oder höher behebt die Sicherheitslücke. Die Korrektur ist ab Version 20.0.0 enthalten. Entwickler können überprüfen, ob das anfällige Paket in einem bestimmten NodeJS-Projekt vorhanden ist, indem sie es im Projektverzeichnis oder global auflisten. Wenn ein Update nicht sofort angewendet werden kann, empfiehlt JFrog, den Entwicklungsserver explizit an die Localhost-Schnittstelle zu binden, indem beim Starten des Servers das Flag –host 127.0.0.1 hinzugefügt wird, wodurch die Gefährdung durch externen Netzwerkzugriff begrenzt wird.
Lehren für eine sichere Entwicklung
CVE-2025-11953 zeigt, wie einfach Fehler bei der Remote-Code-Ausführung, wie z. B. die Weitergabe von nicht bereinigten Benutzereingaben an Funktionen auf Systemebene, in realer Software auftreten können. Es wird darauf hingewiesen, dass dieses Problem auf eine Abhängigkeit von einem Drittanbieter zurückzuführen ist, nämlich das offene npm-Paket, das die gefährliche Sink-Funktion enthielt, die die Sicherheitslücke ermöglichte. Sichere Codierungspraktiken und automatisierte Sicherheitsscans sind von großer Bedeutung, um solche Fehler frühzeitig zu erkennen. Die Forscher verweisen auf SAST-Scan-Tools, die solche Schwachstellen direkt in Entwicklungsumgebungen identifizieren und Datenfluss-Analysen von Benutzereingaben bis hin zu unsicheren Funktionsaufrufen anzeigen können.
Fazit
Die Untersuchungen von JFrog zeigen, dass selbst Entwicklungstools erhebliche Risiken mit sich bringen können, wenn Sicherheitsüberprüfungen vernachlässigt werden. Die Offenlegung von CVE-2025-11953 unterstreicht die Notwendigkeit für Entwickler, Abhängigkeiten auf dem neuesten Stand zu halten, eine sichere Konfiguration lokaler Server zu gewährleisten und automatisierte Scans in ihre Arbeitsabläufe zu integrieren, um eine Ausnutzung zu verhindern, bevor die Software in die Produktion gelangt.
Die komplette Untersuchung des JFrog Security Research Teams finden Sie hier.



