
Erweiterte Sicherheitsforschung zu CVE-2025-55182 (React2Shell). Enthält ein Exploitation-Framework mit 6 funktionalen Auswirkungsszenarien (von RCE bis zur Exfiltration von Geheimnissen), eine interaktive Reverse-Shell und ein vollständiges Labor. Portfolio-Projekt, das eine tiefgehende Analyse von Prototype Pollution und unsicherer Deserialisierung in React Server Components demonstriert.
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.
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
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
Die Schwachstelle betrifft jede Next.js-Anwendung, die den App Router mit React Server Components verwendet – die Standardkonfiguration seit Next.js 14. Explizit definierte Server Actions sind nicht erforderlich; das bloße Vorhandensein der betroffenen RSC-Pakete ist ausreichend.
Diese Schwachstelle ermöglicht es einem nicht authentifizierten Angreifer:
1. [ANY] Send crafted multipart POST to any Server Action endpoint
2. [SERVER] React deserializer processes malicious JSON
3. [SERVER] Prototype pollution poisons Object.prototype.then
4. [SERVER] Plain object treated as thenable; Function constructor reached
5. [SERVER] new Function(_prefix) executes attacker's arbitrary JavaScript
6. [SERVER] execSync() runs system command; output captured
7. [SERVER] Output embedded in NEXT_REDIRECT error digest
8. [SERVER] Next.js returns X-Action-Redirect header with URL-encoded output
9. [ATTACKER] Extract and URL-decode command result from header
Alle Tests wurden in einer isolierten VirtualBox-VM mit Kali Linux 2026.1, Next.js 15.0.0 und React 19.0.0 ohne Netzwerkzugriff durchgeführt.
Determinismus: Im Gegensatz zu probabilistischen Exploits (z. B. Heap Spray) ist CVE-2025-55182 vollständig deterministisch – jede korrekt formatierte HTTP-POST-Anfrage erzeugt mit Wahrscheinlichkeit 1 eine RCE auf jedem ungepatchten System, das React 19.0.0–19.2.0 mit aktivierten React Server Components ausführt.
| Dokument | Beschreibung |
|---|---|
| Analyse der Grundursache | Deserialisierungsfehler und Prototype Pollution in React Flight |
Diese Forschung ist Teil meiner Masterarbeit in Cybersicherheit (UCAM — Campus Internacional de Ciberseguridad), in der N-Day-Schwachstellen in mehreren Umgebungen analysiert werden.
Diese CVE repräsentiert den Vektor moderner JavaScript-Frameworks innerhalb der Arbeit und demonstriert:
Schlüsselwörter: RCE · Prototype Pollution · Deserialization · React · Next.js · Server Actions · CVE-2025-55182
Annais Molina (devianntsec) — Sicherheitsforscherin | Master in Cybersicherheit (UCAM)
MIT-Lizenz — siehe LICENSE
Dieses Repository wird nur für Bildungs- und Sicherheitsforschungszwecke im Rahmen einer akademischen Masterarbeit bereitgestellt. Alle Tests wurden auf isolierten virtuellen Maschinen ohne Netzwerkzugriff durchgeführt. Verwenden Sie es nur auf Systemen, die Ihnen gehören oder für die Sie eine ausdrückliche schriftliche Genehmigung zum Testen besitzen. Die unbefugte Nutzung gegen Systeme ist illegal und kann zu strafrechtlicher Verfolgung führen.
| 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 |
| 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 |
| Angriffsmodul | Ergebnis | Hinweise |
|---|
| Befehlsausführung | ✅ RCE bestätigt | whoami, id, uname -a funktionieren zuverlässig |
| Projekte löschen | ✅ Dashboard verändert | Projekte entfernt, React-Struktur erhalten |
| Defacement | ✅ Website verunstaltet | Eigene Nachricht angezeigt |
| Umgebung stehlen | ✅ env-Variablen extrahiert | Gespeichert in stolen_env.txt |
| Server herunterfahren | ✅ Alle Server als gestoppt angezeigt | UI aktualisiert, React funktionsfähig |
| Interaktive Shell | ✅ Persistente Shell | Spezielle Befehle verfügbar |
| Wiederherstellung | ✅ Ursprünglicher Zustand wiederhergestellt | Über Skript restore.sh |
| Payload-Analyse |
| Zeilenweise Analyse der bösartigen JSON-Struktur |
| CVE-Chronologie | Chronologie von Entdeckung, Offenlegung und Patch |