Die Sicherheitsempfehlung des React-Teams vom Dezember 2025 markiert einen Paradigmenwechsel in der Sicherheit von Webanwendungen. Mit der raschen Einführung von Server-Side Rendering (SSR) über React Server Components (RSC) hat sich die Angriffsfläche vom Client-DOM zur Serialisierungsgrenze des Servers verlagert. CVE-2025-55184 ist kein trivialer Fehler, der die Ressourcen erschöpft; es handelt sich um eine ausgeklügelte Algorithmische Komplexität Denial-of-Service die auf die grundlegende Architektur der Node.js-Ereignisschleife abzielt. Durch die Ausnutzung der rekursiven Deserialisierung von Promises innerhalb der Flugprotokollkann ein unauthentifizierter Angreifer Mikrotask-Warteschlangen-StarreDadurch wird der Serverprozess komatös, während die TCP-Ports offen bleiben. In diesem Leitfaden wird die Schwachstelle auf Leitungsebene analysiert, die "Ouroboros"-Rekursionsmechanik erforscht und gezeigt, wie Sträflich nutzt KI-gesteuertes differentielles Fuzzing, um diesen Fehler ohne Unterbrechung der Produktionsverfügbarkeit zu validieren.

Die Architektur eines Absturzes: RSC, Flug und die Ereignisschleife
Um den Schweregrad von CVE-2025-55184 zu verstehen, müssen wir zunächst die proprietäre Kommunikationsschicht dekonstruieren, die Next.js App Router und React 19 antreibt: die Flugprotokoll.
Das Flugprotokoll im Drahtformat
Im Gegensatz zu REST oder GraphQL, die in der Regel statisches JSON zurückgeben, verwendet RSC ein hybrides, zeilenbasiertes Streaming-Format, das darauf ausgelegt ist, Komponentenbäume inkrementell aufzulösen.
Ein typischer Flight Response Stream sieht so aus:
HTTP
1:I{"id":134,"chunks":["app/page.js"],"name":"default"} 2:{"title":"Welcome","content":"$@1"} 3:{"$":"$@2"}
- Zeile 1: Importiert ein Modul (Client Component).
- Zeile 2: Definiert ein JSON-Objekt, das auf Chunk 1 verweist.
- Zeile 3: Legt einen Verweis auf Chunk 2 fest.
Die fatale Eigenschaft: Asynchrone Serialisierung
React ermöglicht es Entwicklern, Promises vom Server an den Client zu übergeben. Wenn der Serializer auf ein ausstehendes Promise stößt, gibt er einen Platzhalter aus. Der Deserialisierer (auf der Empfängerseite, der in abgestuften Architekturen auch ein Server sein kann) ist so programmiert, dass er auf die Auflösung dieser Promises wartet.
Diese Anforderung erfordert eine Rekursive Auflösungsstrategie: Wenn Promise A in Promise B aufgelöst wird, muss der Deserialisierer Promise B abonnieren. In dieser Rekursion liegt die Schwachstelle.
Node.js Interna: Microtask Queue Starvation
Warum ist dieser Exploit so verheerend im Vergleich zu einer Standard while(true) Schleife? Die Antwort liegt in der Aufgabenplanung der V8-Engine.
- Makroaufgaben: Zeitschaltuhren (
setTimeout), E/A-Rückrufe,setImmediate. - Microtasks: Versprechensrückrufe (
.dann,.fangen),process.nextTick.
Der Hungersnot-Mechaniker:
Die Node.js-Ereignisschleife arbeitet nach einer strengen Prioritätsregel: Die Microtask-Warteschlange muss vollständig geleert werden, bevor die Ereignisschleife mit der nächsten Phase fortfahren kann.
Bei einem CVE-2025-55184-Exploit sendet der Angreifer eine Nutzlast, in der ein Promise auf sich selbst (oder eine Kette, die zu ihm selbst zurückführt) aufgelöst wird.
- Der Deserialisierer plant eine
.then()um die Auflösung zu handhaben. - Der Callback läuft, sieht die Rekursion und plant die eine andere
.then(). - Entscheidend ist, dass dies geschieht synchron bezüglich der Bearbeitung der Warteschlange. Die Länge der Warteschlange erreicht nie Null.
- Auswirkungen: Netzwerk-E/A-Callbacks (Bearbeitung neuer Anfragen), Health-Check-Sonden und Betriebssystemsignale werden permanent blockiert. Der Prozess ist lebendig (PID existiert), die Ports sind offen (SYN-ACK funktioniert auf Betriebssystemebene), aber die Anwendung ist hirntot.
Reverse Engineering des Exploits
Die "Ouroboros"-Nutzlast
Die Schwachstelle besteht in react-server-dom-webpack (und seine Varianten für Parcel/Turbopack). Die ungepatchte processValue Funktion fehlte eine Tiefenbegrenzung oder Zykluserkennung für Referenztypen.
Ein Angreifer kann dies als Waffe einsetzen, indem er eine Gerichtetes zyklisches Diagramm (DCG) innerhalb der Flugnutzlast.
Konzeptueller Exploit-Code (Protokollebene)
Während die eigentliche binäre Kodierung komplex ist, ist die logische Struktur des Angriffsvektors elegant einfach:
JavaScript
`// Eine JSON-Darstellung der bösartigen Flight-Struktur // Ziel: Next.js App Router Endpunkt (POST /)
{ "id": "root", "chunks": [], "value": { // Wir definieren ein Promise-Objekt manuell mit der Flight-Syntax "$": "$Promise", "status": "fulfilled", "value": { // Der Wert dieses aufgelösten Versprechens ist... ITSELF. "$": "$@root" } } }`
Wenn der Server dies parst:
- Sie sieht eine erfüllte Verheißung.
- Sie wickelt den Wert aus.
- Es sieht einen Verweis auf das Stammobjekt (das ist der Promise).
- Es wird eine Microtask geplant, um das Stammobjekt wieder zu entpacken.
- GOTO 1.
Diese Schleife findet vollständig im Speicher statt und umgeht so herkömmliche WAFs, die nach SQL-Injection-Signaturen oder großen Anfragekörpern suchen. Die Nutzlast ist oft kleiner als 1 KB.
Die "unvollständige Korrektur"-Saga (CVE-2025-67779)
Es ist wichtig zu wissen, dass der erste Patch für diese Schwachstelle innerhalb weniger Tage umgangen wurde. Die erste Korrektur versuchte, die Rekursionstiefe zu verfolgen, konnte aber bestimmte verschachtelte Strukturvarianten nicht berücksichtigen (z. B. das Einschließen des Zyklus innerhalb einer Karte oder Satz). Dies führte zu CVE-2025-67779. Daher reicht eine einfache "Aktualisierung" nicht aus; man muss sicherstellen, dass sie auf dem neuesten Stand sind. endgültig gepatchte Versionen (React 19.0.3+ / Next.js 15.0.6+).
Der stille Partner: CVE-2025-55183 (Offenlegung des Quellcodes)
Während 55184 die Verfügbarkeit vernichtet, CVE-2025-55183 zerstört die Vertraulichkeit. Diese zusätzliche Sicherheitslücke wurde gleichzeitig bekannt gegeben.
Der Leck-Mechanismus:
Server-Aktionen sind interne Funktionen. Wenn jedoch ein Angreifer eine Server-Aktion über die ID als Wert anfordert (anstatt sie aufzurufen), behandelt der anfällige Serialisierer sie als Datenobjekt. Dabei serialisiert er den kompilierten Funktionskörper als String.
Auswirkungen:
- Logik-Extraktion: Angreifer können Ihre Backend-Validierungslogik lesen (
if (!user.isAdmin) ...). - Heimliches Scraping: Hardcodierte API-Schlüssel oder interne Endpunkte werden aufgedeckt.
- Schatten-API-Entdeckung: Ungenutzte oder versteckte Server-Aktionen werden zu sichtbaren Angriffszielen.
Fortgeschrittene Verifikation: Der penetrante Ansatz
In einer Umgebung, in der viel auf dem Spiel steht, ist der Versuch, den Server zum Absturz zu bringen", um eine Schwachstelle zu beweisen, unprofessionell und gefährlich. Sträflich nutzt AI-gesteuerte Sichere Ausbeutung Strategien, um diese CVEs ohne Ausfallzeiten zu überprüfen.
Strategie 1: Bounded Recursion Probing (Safe DoS)
Anstelle einer Endlosschleife konstruiert der Penligent AI Agent eine Nutzlast mit einer Endliche Rekursionstiefe ($N=5000$).
- Die Sonde: Eine rekursive Promise-Kette, die nach 5000 Iterationen abbricht.
- Heuristische Analyse:
- Verwundbar: Der Server verarbeitet die Kette. Penligent erkennt eine eindeutige Latenzabweichung (z. B. Antwortzeit = Grundlinie + 200 ms) und eine vorübergehende Spitze bei der Heap-Nutzung.
- Gepatcht: Der neue Sicherheitsmechanismus in React 19 löst sofort einen "Cyclic Reference"-Fehler aus. Die Antwort erfolgt fast sofort (500 Internal Server Error).
- Schlussfolgerung: Wenn die Latenzzeit mit der Tiefe korreliert ($T \propto N$), wird die Schwachstelle bestätigt, ohne dass der Prozess hängen bleibt.
Strategie 2: Differenzielles Fuzzing für Quellenlecks (CVE-2025-55183)
Erkennung der Schwachstelle im Quellcode:
- Fingerabdrücke: Penligent identifiziert verfügbare Server Action IDs von legitimen clientseitigen Bundles.
- Reflektierende Injektion: Der Agent sendet geänderte Fluganfragen, die versuchen, diese IDs als Dateneigenschaften "widerzuspiegeln".
- Musterabgleich AI: Der Antwortstrom wird analysiert. Wenn die KI JavaScript-Funktionssignaturen erkennt (z. B.,
asynchrone Funktion $...,var _0x...) innerhalb der JSON-Antwort, wird ein Kritisches Informationsleck.

Aktionsplan des Ingenieurs & Abhilfemaßnahmen
Das Fenster für Angriffe ist weit offen. Automatisierte Bots scannen bereits nach offenen Next.js 15.0.x-Instanzen.
1. Die Upgrade-Matrix (strikte Durchsetzung)
Sie müssen sicherstellen, dass Ihr Abhängigkeitsbaum die sicheren Versionen auflöst. Verlassen Sie sich nicht auf semver carets (^) allein; überprüfen Sie Ihre pnpm-lock.yaml oder paket-lock.json.
| Paket | Empfindlicher Bereich | Sichere Version (Minimum) |
|---|---|---|
| react-server-dom-webpack | < 19.0.3 | 19.0.3 |
| Nächste.js | 15.0.0 – 15.0.5 | 15.0.6+ (oder 14.2.34+ für v14) |
2. Überschreibungen der Abhängigkeitsauflösung
Denn react-server-dom-webpack oft eine verschachtelte Abhängigkeit ist, sollten Sie die Auflösung in paket.json um zu verhindern, dass sich ältere Versionen einschleichen:
JSON
// package.json { "pnpm": { "overrides": { "react-server-dom-webpack": "19.0.3", "react-server-dom-turbopack": "19.0.3" } } }
3. Kontinuierliche Validierung
Sicherheit ist keine einmalige Angelegenheit. Verwenden Sie Sträflich um Ihre Bereitstellung kontinuierlich zu überwachen. Wenn neue Umgehungen (wie die in CVE-2025-67779) auftauchen, werden die KI-Modelle von Penligent aktualisiert, um auf diese Variationen zu testen und sicherzustellen, dass Ihr Perimeter gegen sich entwickelnde logische Angriffe unangreifbar bleibt.
Referenzen und Behördenlinks:
- React Sicherheitshinweis: Denial of Service und Offenlegung von Quellcode
- Next.js Offizielles Sicherheitsupdate (Dezember 2025)
- Node.js-Dokumente: Die Ereignisschleife, Timer und process.nextTick()
- NIST NVD - CVE-2025-55184 Einzelheiten


