Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

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

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 परिनियोजन और दूरस्थ कोड निष्पादन सक्षम करता है।

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

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

सभी देखें →

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

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

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

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

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

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 में एक बार लागू होता है और पूरे एक्शन स्विच के लिए भरोसा किया जाता है:

$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 प्रवर्धक)

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 के रूप में निष्पादित होती है।


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

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

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/ में मौजूद है:

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