
Execução Remota de Código Pré-Autenticação no Craft CMS
Descoberto e desenvolvido por Mohammed Idrees Banyamer
CVE-2025-32432 é uma vulnerabilidade crítica de Execução Remota de Código (RCE) pré-autenticação que afeta várias versões do Craft CMS. Ao encadear o armazenamento não saneado de dados de sessão com um gadget de desserialização inseguro, um atacante não autenticado pode executar comandos arbitrários no servidor remoto.
| Versão | Vulnerável até |
|---|---|
| Craft CMS 3.x | ≤ 3.9.14 |
| Craft CMS 4.x | ≤ 4.14.14 |
| Craft CMS 5.x | ≤ 5.6.16 |
⚠️ Todas as versões mais antigas que apresentam o comportamento de roteamento descrito também provavelmente são afetadas.
A vulnerabilidade surge ao encadear duas fraquezas distintas no endpoint assets/generate-transform:
O comportamento antigo de roteamento grava parâmetros de consulta brutos diretamente no arquivo de sessão PHP em /tmp/sess_<PHPSESSID>, sem saneamento ou filtragem.
Uma cadeia de gadgets de desserialização do Yii (FieldLayoutBehavior → PhpManager) permite que um atacante force a inclusão de um arquivo arbitrário — neste caso, o arquivo de sessão envenenado.
Impacto combinado: Comprometimento total do servidor, exfiltração de dados, movimento lateral e muito mais.
requestsurllib3# Install via requirements file
pip install -r requirements.txt
# Or install directly
pip install requests urllib3
python exploit.py -u <target_url> -c "<command>" [options]
# Auto-exploit — brute-forces Asset ID automatically
python exploit.py -u https://craft.example.com -c "id"
# With a known Asset ID — more reliable and faster
python exploit.py -u https://craft.example.com -c "cat /etc/passwd" -a 42
# Custom timeout + verbose output
python exploit.py -u https://craft.example.com -c "uname -a" -t 10 -v
Step 1 ──► Session Establishment
Fetch homepage → obtain PHPSESSID cookie
Step 2 ──► Asset ID Resolution
Provided via -a flag OR brute-forced (non-404 detection)
Step 3 ──► Session Poisoning
Malicious GET request → raw PHP injected into /tmp/sess_<PHPSESSID>
Step 4 ──► RCE Trigger
Crafted deserialisation payload → PhpManager includes session file
→ PHP executes → system command runs → output returned
💡 A saída do comando é exibida (primeiros 2.000 caracteres). Para interação completa, recomenda-se um reverse shell.
requirements.txt
requests>=2.31.0
urllib3>=2.0
Esta ferramenta destina-se exclusivamente a fins educacionais e a avaliações de segurança autorizadas.
Não a utilize contra qualquer sistema sem permissão explícita e por escrito do proprietário do sistema.
O autor não assume nenhuma responsabilidade por qualquer uso indevido ou dano causado por esta ferramenta. Ao utilizar este software, você concorda que é o único responsável pelas suas próprias ações e cumprirá todas as leis locais, nacionais e internacionais aplicáveis.
| Função | Detalhes |
|---|---|
| 🔍 Descoberta do CVE & Exploit Original | Mohammed Idrees Banyamer |
| 🐙 GitHub | @TheMursalin |
| 🤝 Refinamento do Código | Contribuições da comunidade são bem-vindas |
⭐ Se você achou isso útil, considere seguir @TheMursalin para mais exploits, writeups e ferramentas de segurança.
Este projeto é distribuído sob a Licença MIT — consulte o arquivo LICENSE para obter todos os detalhes.
| Flag | Descrição | Padrão |
|---|
-u, --url | Obrigatória. URL base do alvo (ex.: https://example.com) | — |
-c, --cmd | Obrigatório. Comando do sistema a executar (ex.: id, whoami) | — |
-a, --asset | ID de Asset válido conhecido (acelera significativamente a exploração) | Nenhum |
--scan-max | ID máximo de Asset para brute-force quando nenhum ID é fornecido | 300 |
-t, --timeout | Tempo limite da requisição em segundos | 15 |
-v, --verbose | Ativa saída detalhada/de depuração | Desativado |