Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
cve-2026-32475-elementor-pro-lab — A/B Docker लैब + CVE-2026-32475 के लिए PoC (Elementor Pro Forms अनप्रमाणित मनमाना फ़ाइल अपलोड -> सत्यापन/मूव लूप डिसिंक के माध्यम से RCE) | Kitploit
उपकरण/GitHubGitHub/dinosn/cve-2026-32475-elementor-pro-lab
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणवेब सुरक्षापेनिट्रेशन टेस्टिंगलर्निंग और शिक्षालैब और अभ्यास
GitHubdinosn/cve-2026-32475-elementor-pro-lab

cve-2026-32475-elementor-pro-lab

A/B Docker लैब + CVE-2026-32475 के लिए PoC (Elementor Pro Forms अनप्रमाणित मनमाना फ़ाइल अपलोड -> सत्यापन/मूव लूप डिसिंक के माध्यम से RCE)

रिपॉजिटरी देखें
26घं 43मि पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

CVE-2026-32475 — Elementor Pro फॉर्म्स में बिना प्रमाणीकरण के मनमाना फ़ाइल अपलोड → RCE

A/B डॉकर लैब जो CVE-2026-32475 (CVSS 9.x, Patchstack; Elementor Pro फॉर्म्स फ़ाइल अपलोड फ़ील्ड, प्रभावित ≤ 4.2.1, 2026-08-19 को 4.2.2 में ठीक किया गया; Tin Pham / TF1T द्वारा रिपोर्ट किया गया) को पुन: प्रस्तुत करता है। बिना प्रमाणीकरण, कोई उपयोगकर्ता इंटरैक्शन नहीं।

केवल अधिकृत परीक्षण / शिक्षा। यह लैब पूरी तरह से 127.0.0.1 पर डिस्पोज़ेबल डॉकर कंटेनरों में चलता है। PoC को उन सिस्टमों पर न लगाएं जिनका परीक्षण करने के लिए आप स्पष्ट रूप से अधिकृत नहीं हैं। build.sh एक सार्वजनिक GPL मिरर से Elementor Pro स्रोत लाता है; इस रिपॉजिटरी में कोई प्रीमियम कोड पुनर्वितरित नहीं किया गया है।

मूल कारण — एक वैलिडेशन/मूव लूप डिसिंक

modules/forms/fields/upload.php। दो लूप समान पुनर्गठित $_FILES['form_fields'][$id] को पुनरावृत्त करते हैं लेकिन एक खाली भाग (UPLOAD_ERR_NO_FILE) को अलग तरह से संभालते हैं:

root@kitploit:~
// validation()  — line ~269
foreach ( $_FILES['form_fields'][ $id ] as $index => $file ) {
    if ( ! $field['required'] && UPLOAD_ERR_NO_FILE === $file['error'] ) {
        return;                         // <-- इस फ़ील्ड की शेष सभी वैलिडेशन छोड़ देता है
    }
    ...
    if ( ! $this->is_file_type_valid( $field, $file ) ) {           // एक्सटेंशन अनुमति/अस्वीकृति सूची
        $ajax_handler->add_error( $id, 'This file type is not allowed.' );
    }
}

// process_field() — line ~418
foreach ( $_FILES['form_fields'][ $id ] as $index => $file ) {
    if ( UPLOAD_ERR_NO_FILE === $file['error'] ) {
        continue;                       // <-- केवल खाली भाग छोड़ता है, आगे बढ़ता रहता है
    }
    $filename  = uniqid() . '.' . pathinfo( $file['name'], PATHINFO_EXTENSION ); // हमलावर एक्सटेंशन, कोई पुनर्जांच नहीं
    move_uploaded_file( $file['tmp_name'], trailingslashit( $uploads_dir ) . $filename );
}

एक वैकल्पिक अपलोड फ़ील्ड को दो भागों के साथ भेजें — पहले एक खाली, फिर PHP पेलोड। validation() खाली भाग पर पहुंचता है और .php की जांच करने से पहले ही return कर देता है; process_field() खाली भाग से आगे continue करता है और .php को wp-content/uploads/elementor/forms/<uniqid()>.php पर ले जाता है। get_blacklist_file_ext() ब्लॉकलिस्ट (php,phtml,pht,shtml,…) केवल validation() के अंदर चलती है, इसलिए इसे पूरी तरह से बायपास कर दिया जाता है।

पूरी तरह से बिना प्रमाणीकरण: wp_ajax_nopriv_elementor_pro_forms_send_form (ajax-handler.php:295)।

यह केवल राइट नहीं, RCE क्यों है

get_ensure_upload_dir() फॉर्म्स निर्देशिका में केवल Options -Indexes + Header set Content-Disposition attachment युक्त एक .htaccess डालता है। यह एक ब्राउज़र डाउनलोड संकेत है — Apache + mod_php पर .php अभी भी सर्वर-साइड निष्पादित होता है; हमलावर (curl) केवल डाउनलोड हेडर के साथ कमांड आउटपुट प्राप्त करता है। फॉर्म्स मॉड्यूल में कोई unlink क्लीनअप नहीं है, इसलिए शेल स्थायी रहता है।

एकमात्र पूर्वशर्त

एक प्रकाशित पेज जिसमें Elementor Pro फॉर्म विजेट है जिसमें फ़ाइल अपलोड फ़ील्ड है जिसका आवश्यक = नहीं (! $field['required'] शाखा) है। फ़ील्ड कॉन्फ़िगरेशन सर्वर-साइड से _elementor_data से पढ़ा जाता है, इसलिए हमलावर इसे टॉगल नहीं कर सकता — लेकिन "वैकल्पिक अनुलग्नक" फ़ील्ड सामान्य हैं।

फ़ाइलनाम पुनर्प्राप्ति (पूरी तरह से रिमोट, कोई फ़ाइलसिस्टम एक्सेस नहीं)

संग्रहीत नाम = uniqid() = %08x%05x = (यूनिक्स-सेकंड)(माइक्रोसेकंड)। सेकंड HTTP Date प्रतिक्रिया हेडर द्वारा ठीक लीक होता है; केवल माइक्रोसेकंड (0–999999) अज्ञात है → एक सीमित ≤10⁶ ऑनलाइन GET ब्रूट। poc.py --recover प्रतिक्रिया आगमन समय पर माइक्रोसेकंड को एंकर करता है (सह-स्थित / NTP-सिंक ⇒ सेकंड–मिनट; यहाँ: ~26k अनुरोध) और राइट को रिमोट कोड निष्पादन में बदल देता है।

लैब लेआउट

सेवापोर्टElementor Pro
wp-vulnhttp://127.0.0.1:89753.6.4 — असुरक्षित (प्रामाणिक ट्री; validation() डिसिंक ≤4.2.1 के समान)
wp-patchedhttp://127.0.0.1:89763.6.4 जिसमें 4.2.2-समकक्ष फिक्स है (return → continue, लूप को संरेखित करना)

स्टैक: wordpress:php7.4-apache (mod_php) + MariaDB 10.6 + Elementor (फ्री) 3.6.8 + Elementor Pro 3.6.4। प्रत्येक वेरिएंट में एक एडमिन (admin/labpass) और एक प्रकाशित पेज "CVE-2026-32475 Lab" (post_id=5, form_id=frm00001, अपलोड फ़ील्ड field_cv, आवश्यक=नहीं) है।

संस्करण नोट। कोई स्वच्छ 4.2.1/4.2.2 स्रोत सार्वजनिक रूप से पुनर्वितरित नहीं किया जा सकता, इसलिए लैब प्रामाणिक 3.6.4 ट्री चलाता है, जिसका validation()/process_field() डिसिंक उस कोड के बाइट-समान है जिसका CVE-2026-32475 वर्णन करता है (बग लंबे समय से निष्क्रिय है; 4.2.2 ने दोनों लूपों को संरेखित किया)। A/B "पैच्ड" बिल्ड ठीक उसी संरेखण को लागू करता है।

बिल्ड और रन

Docker + Docker Compose और आउटबाउंड नेटवर्क की आवश्यकता है (छवियों, Elementor फ्री, और Elementor Pro स्रोत मिरर को खींचने के लिए)। build.sh प्रामाणिक Elementor Pro ट्री को स्वचालित रूप से क्लोन करता है।

root@kitploit:~
git clone https://github.com/dinosn/cve-2026-32475-elementor-pro-lab
cd cve-2026-32475-elementor-pro-lab
bash build.sh          # प्लगइन क्लोन करें + compose up + WP/Elementor इंस्टॉल करें + फॉर्म पेज बनाएं (दोनों वेरिएंट)
bash verify.sh         # A/B प्रमाण: असुरक्षित शेल लिखता+निष्पादित करता है; पैच्ड अस्वीकार करता है। सफाई करता है।

एक्सप्लॉइट

root@kitploit:~
# पूरी तरह से रिमोट बिना प्रमाणीकरण RCE (पेज से post_id/form_id/field_id स्वचालित रूप से निकालता है):
python3 poc.py -t http://127.0.0.1:8975 --page-id 5 --recover -c "id; uname -a"

# केवल ब्लॉकलिस्ट बायपास साबित करें (निरीक्षण के लिए शेल छोड़ें):
python3 poc.py -t http://127.0.0.1:8975 --post-id 5 --form-id frm00001 --field-id field_cv

फ़ाइलें

  • docker-compose.yml — 2× (WordPress + MariaDB), असुरक्षित:8975 / पैच्ड:8976
  • elementor-pro-vuln/ — प्रामाणिक Elementor Pro 3.6.4 (असुरक्षित); build.sh द्वारा जनरेटेड, git-अनदेखा
  • elementor-pro-patched/ — समान ट्री, validation() return→continue; patch_pro.sh द्वारा जनरेटेड, git-अनदेखा
  • evidence/verify_transcript.txt — एक कैप्चर किया गया सफल verify.sh रन
  • install_wp.sh — WP + Elementor फ्री का wp-cli इंस्टॉल + Pro सक्रिय करें + फॉर्म पेज बनाएं + अपलोड अनुमतियाँ ठीक करें
  • setup_page.php — वैकल्पिक अपलोड फ़ील्ड के साथ Elementor फॉर्म पेज बनाता है
  • patch_pro.sh — पैच्ड ट्री प्राप्त करता है + एक-पंक्ति डिफ प्रिंट करता है
  • poc.py — बिना प्रमाणीकरण डिसिंक अपलोड + uniqid() फ़ाइलनाम पुनर्प्राप्ति + RCE
  • verify.sh — स्वतंत्र फ़ाइलसिस्टम ओरेकल के साथ A/B प्रमाण (निष्पादन साबित करता है, केवल राइट नहीं)
  • build.sh — एक-शॉट बिल्ड

सफाई / टियरडाउन

root@kitploit:~
cd /root/cve-2026-32475-lab && docker compose down -v
टूल डाउनलोड करें