
Leichtgewichtiges Go-Toolkit plus ein dockerisiertes Next.js-Labor zum Erkunden und Triagieren von CVE-2025-55182.
Leichtgewichtiges Go-Toolkit plus ein dockerisiertes Next.js-Labor zum Untersuchen und Triage von CVE-2025-55182. Nur für Bildungszwecke und autorisierte Tests.
React2Shell_Deconstructing_a_Perfect_10_RCE.pdf und das Angriffspfad-Diagramm
checker: schneller, nebenläufiger Inventar-Scan (einzelnes Ziel, Datei oder stdin), Heuristik für RSC-Exposition, JSON-Ausgabe pro Ziel, abschließende Zusammenfassung, optional -only-vuln, -no-progress, benutzerdefiniertes -ua.poc: sendet die Exploit-artige RSC-Multipart-Anfrage und gibt den zurückgegebenen Digest aus; unterstützt benutzerdefinierte Befehle über (Standard ).-cid-c), Timeouts und Fortschrittsstatistiken.-target, -list oder -stdin; stellt https:// automatisch voran, wenn das Schema fehlt.vulnlab/) mit Next.js 15.5.6/React 19, Dockerfile und docker-compose.yml festgelegt auf localhost:3000 für sichere Reproduktion.cd checker
GOCACHE=/tmp/go-cache go build -o CVE-2025-55182 ./cmd/CVE-2025-55182
Setzen Sie GOCACHE, falls Ihre Umgebung Probleme mit Cache-Berechtigungen hat.
# Scanner
./CVE-2025-55182 checker -target https://example.com
./CVE-2025-55182 checker -list ../targets.txt -c 50 -only-vuln
cat ../targets.txt | ./CVE-2025-55182 checker -stdin -no-progress
# PoC (exploit-style request)
./CVE-2025-55182 poc -target http://localhost:3000
./CVE-2025-55182 poc -target http://localhost:3000 -c "whoami"
CVE-2025-55182 ist ein unsicherer Deserialisierungsfehler in der Art, wie React Server Components Module aus Flight-Payloads laden. In react-server-dom-webpack ruft der Helfer requireModule(metadata) ein Modul ab und gibt dann moduleExports[metadata[2]] zurück. Der Klammerzugriff durchläuft die Prototyp-Kette, sodass eine Angreifer-kontrollierte Referenz wie $1:constructor:constructor von einer exportierten Funktion zu ihrem constructor (dem globalen Function-Konstruktor) aufsteigt und beliebiges JS ausführen kann. Das Flight-Protokoll erlaubt Angreifern, diese durch Doppelpunkte getrennten Eigenschaftspfade bereitzustellen, und macht den Modul-Loader so zu einer Gadget-Kette für Remote-Code-Ausführung.
cd vulnlab
docker compose build
docker compose up
# App listens on 127.0.0.1:3000 inside the container; runs as non-root user.
Dockerfile erstellt eine Next.js-App (Node 20 Alpine), installiert Abhängigkeiten, baut und führt sie als Nicht-Root-Benutzer nextjs aus.docker-compose.yml bindet 127.0.0.1:3000:3000 standardmäßig nur für lokale Tests.Snort / Suricata (HTTP zum Server)
alert http any any -> $LAN_NETWORK any (
msg:"Potential Next.js React2Shell / CVE-2025-66478 attempt";
flow:to_server,established;
content:"Next-Action"; http_header; nocase;
content:"multipart/form-data"; http_header; nocase;
pcre:"/Content-Disposition:\s*form-data;\s*name=\"0\"/s";
pcre:"/\"status\"\s*:\s*\"resolved_model\"/s";
pcre:"/\"then\"\s*:\s*\"\$1:__proto__:then\"/s";
classtype:web-application-attack;
sid:6655001;
rev:1;
)
Abfrage (verwundbare React-RSC-Pakete)
{
"queries": {
"detect_rev2shell_react_server_components": {
"query": "SELECT name, version, path FROM npm_packages WHERE (name='react-server-dom-parcel' AND (version='19.0.0' OR (version >= '19.1.0' AND version < '19.1.2') OR version='19.2.0')) OR (name='react-server-dom-turbopack' AND (version='19.0.0' OR (version >= '19.1.0' AND version < '19.1.2') OR version='19.2.0')) OR (name='react-server-dom-webpack' AND (version='19.0.0' OR (version >= '19.1.0' AND version < '19.1.2') OR version='19.2.0'));",
"interval": 3600,
"description": "Detects vulnerable versions of React Server Components packages (react-server-dom-*) affected by CVE-2025-55182 / CVE-2025-66478 / React2Shell.",
"platform": "linux,windows,macos",
"version": "1.0"
}
}
}