Masterarbeit-Forschung zu CVE-2025-55182 (React2Shell). Modulares Exploitation-Framework mit 6 Angriffsszenarien (RCE, Exfiltration, Defacement), interaktiver Reverse Shell und einem vollständigen verwundbaren Labor zum Studium von Prototype Pollution und unsicherer Deserialisierung in React Server Components.
Deserialisierung nicht vertrauenswürdiger Daten + Prototype Pollution in React Server Components
Nicht authentifizierte Remote Code Execution über Next.js Server Actions
Betroffen: React 19.0.0 - 19.2.0 · Patch: React 19.0.1 / 19.1.2 / 19.2.1 (3. Dezember 2025)
Demonstration des fortgeschrittenen Exploits – RCE-Basisbefehle, interaktive Shell und mehrere Angriffsvektoren gegen eine verwundbare Next.js-Anwendung
Dieses Repository enthält meine Masterarbeits-Forschung zu CVE-2025-55182, einer kritischen (CVSS v3.1: 10.0) Remote Code Execution-Schwachstelle in React Server Components.
Die Schwachstelle entsteht durch einen unsicheren Deserialisierungsmechanismus im React-Flight-Protokoll. Bei der Verarbeitung von Server Actions deserialisiert Next.js eingehende Multipart-Payloads ohne ordnungsgemäße Validierung. Ein Angreifer kann eine bösartige Payload erstellen, die die Prototypenkette verschmutzt und beliebiges JavaScript injiziert, das auf dem Server über den Function-Konstruktor (und anschließend über child_process.execSync()) ausgeführt wird.
Hinweis zu CVE-2025-66478: Vercel hat eine parallele CVE vergeben, um die Next.js-spezifischen Auswirkungen derselben Schwachstelle zu verfolgen. Da Next.js React in einer gebündelten (vendored) Form ausliefert, erkennen viele Dependency-Scanner es nicht automatisch als verwundbar. Die US National Vulnerability Database (NVD) hat CVE-2025-66478 offiziell als Duplikat von CVE-2025-55182 abgelehnt, obwohl weiterhin in Vercels eigenem Security Advisory darauf verwiesen wird.
Nachfolgeschwachstellen: Das React-Team hat anschließend zwei weitere Probleme offengelegt, die in den ersten Patch-Versionen (19.0.1, 19.1.2, 19.2.1) vorhanden sind: CVE-2025-55184 (Denial of Service, CVSS 7.5) und CVE-2025-55183 (Offenlegung von Quellcode, CVSS 5.3). Benutzer sollten auf 19.0.2, 19.1.3 oder 19.2.2 aktualisieren, um alle drei zu beheben.
| Aspekt | Beschreibung |
|---|---|
| Vier Angriffsmodule | Projekte löschen, Website verunstalten, Umgebungsvariablen stehlen, Server herunterfahren |
| Interaktive Shell | Persistente Shell mit speziellen Befehlen und Wiederherstellungsfunktionen |
| Stabile Exfiltration | Zeilenweises Lesen, um Größenbeschränkungen von HTTP-Headern zu umgehen |
| Wiederherstellungsskript | Sichere Labor-Wiederherstellung nach Angriffen |
| Akademische Dokumentation | Grundursache, Payload-Analyse und Chronologie der Schwachstelle |
CVE-2025-55182/
├── README.md # This file
├── LICENSE # MIT License
│
├── exploit/
│ ├── exploit-explanation.md # Exploit usage documentation
│ └── react2shell.py # Main exploit — 4 attack modules + interactive shell
│
├── vulnerable-app/ # Vulnerable Next.js application
│ ├── README.md # Original vulnapp credits
│ ├── package.json # React 19.0.0 (vulnerable)
│ ├── app/ # Application source code
│ ├── curl_id.sh # Original exploit script (by zack0x01)
│ └── scripts/
│ └── restore.sh # Restoration script (my contribution)
│
└── docs/
├── screenshots/ # Exploitation demonstrations
│ ├── 01-app-initial.png
│ ├── 02-rce-basic.png
│ ├── 03-interactive-shell.png
│ ├── 04-no-payload.png
│ ├── 05-delete-result.png
│ ├── 06-deface.png
│ ├── 07-shutdown-servers.png
│ ├── 08-restore-from-script.png
│ └── 09-restore-from-interactive-shell.png
│
└── analysis/
├── 01-root-cause.md # Vulnerability root cause analysis
├── 02-payload-breakdown.md # Payload structure and execution flow
└── 03-timeline.md # CVE timeline
vulnerable-app/ enthalten)cd vulnerable-app
npm install --legacy-peer-deps
npm run dev
# App available at http://localhost:3000
cd ../exploit
# Check if target is vulnerable
python3 react2shell.py -u http://localhost:3000 --check
# Execute single command
python3 react2shell.py -u http://localhost:3000 -c "whoami"
# Interactive shell mode
python3 react2shell.py -u http://localhost:3000 -i
| Modul | Befehl | Beschreibung | Auswirkung |
|---|---|---|---|
| Projekte löschen | --delete-projects | Löscht alle Projekte aus dem Dashboard | Datenvernichtung |
| Defacement | --deface "message" | Ersetzt die Hauptseite | Verunstaltung |
| Umgebung stehlen | --steal-env | Stiehlt Umgebungsvariablen | Exfiltration |
| Server herunterfahren | --shutdown-servers | Fährt alle Server herunter | Denial of Service |
React Server Components verwenden einen benutzerdefinierten Serialisierungs-/Deserialisierungsmechanismus (das „Flight“-Protokoll), um Komponentendaten vom Server an den Client zu senden. Bei der Verarbeitung von Server Actions deserialisiert der Server eingehende Payloads ohne ordnungsgemäße Validierung.
Der Kernfehler ist Vertrauen in das Verhalten: Der Deserialisierer prüft typeof obj.then === 'function', um Promises zu identifizieren, ohne zu verifizieren, dass die Eigenschaft direkt zum Objekt gehört. Dadurch kann ein Angreifer Object.prototype.then vergiften, sodass jedes einfache Objekt wie ein Thenable erscheint.
Ein Angreifer kann eine bösartige Payload erstellen, die:
__proto__:thenFunction-Konstruktor über $1:constructor:constructornew Function(_prefix)process.mainModule.require('child_process').execSync()X-Action-Redirect-HTTP-Response-HeaderUser-mode (unauthenticated)
│
├─ POST / (Next.js Server Action endpoint)
│ ├─ Headers: Next-Action: x
│ └─ Multipart body with malicious JSON
│
└─ React Flight deserializer processes payload
└─ Prototype pollution via __proto__:then
└─ Function constructor reached via $1:constructor:constructor
└─ new Function(_prefix) executes attacker's JavaScript
└─ execSync() runs system command
└─ Output embedded in NEXT_REDIRECT error
└─ Next.js converts to X-Action-Redirect header