
CVE-2026-64638 (XSS2Shell) के लिए गैर-विनाशकारी डिटेक्टर — WordPress प्री-ऑथ XSS रिफ्लेक्शन प्रिमिटिव
WordPress wp-login.php में CVE-2026-64638 ("XSS2Shell") रिफ्लेक्शन प्रिमिटिव के लिए गैर-विनाशकारी, डिपेंडेंसी-मुक्त डिटेक्टर
CVE-2026-64638, WordPress कोर में प्री-ऑथेंटिकेशन रिफ्लेक्टेड XSS है, जिसे PWN.AI द्वारा 2026-08-07 को प्रकट किया गया (CVSS 8.9, CWE-79) और 7.0.3 में पैच किया गया, जिसके बैकपोर्ट प्रत्येक अनुरक्षित ब्रांच (6.9.6, 6.8.7, 6.7.6, 6.6.6, 6.5.9, …) में दिए गए।
मूल कारण PHP के strip_tags() और WordPress के KSES सैनिटाइज़र के बीच एक पार्सर डिफरेंशियल है:
strip_tags() जब < के बाद व्हाइटस्पेस आता है तो टैग को पहचानने से इनकार कर देता है, इसलिए < area id=x> जैसा उपयोगकर्ता-नाम सादे टेक्स्ट के रूप में बच जाता है।<area id="x"> एलिमेंट में पुनः पार्स करता है।इससे हमलावर-चयनित DOM इंजेक्शन प्राप्त होता है जिसमें चयनित id/class/href एट्रिब्यूट होते हैं — यह प्रकाशित मल्टी-स्टेज चेन (DOM क्लोबरिंग → REST JSONP → एप्लिकेशन पासवर्ड चोरी → प्लगइन अपलोड → लॉग-इन किए गए एडमिन पीड़ित के विरुद्ध RCE) के पीछे का प्रिमिटिव है।
दो गैर-विनाशकारी प्रोब (रैंडम मार्कर उपयोगकर्ता-नाम के साथ एक विफल लॉगिन):
<b>marker</b> त्रुटि प्रतिक्रिया में बिना एस्केप किए दिखाई देता है।< area id=marker> strip_tags() से बच जाता है और प्रतिक्रिया में लाइव/नॉर्मलाइज़्ड एलिमेंट (जैसे area id="marker") के रूप में पुनः प्रकट होता है।कोई पेलोड कुछ भी निष्पादित नहीं करता; टूल केवल यह मापता है कि हमलावर का HTML लाइव DOM के रूप में रेंडर होता है या नहीं। वैकल्पिक अतिरिक्त सुविधाएँ:
--version — फ़ीड <generator> टैग के माध्यम से कोर संस्करण का फ़िंगरप्रिंट।--jsonp — सत्यापित करें कि प्रकाशित चेन द्वारा उपयोग किया गया REST JSONP एनवलप (_jsonp/_envelope) पहुंच योग्य है।python3 xss2shell_check.py https://example.com
python3 xss2shell_check.py --jsonp --verbose https://example.com
python3 xss2shell_check.py --version https://example.com
python3 xss2shell_check.py --json https://example.com
Python 3.6+, केवल stdlib। कोई डिपेंडेंसी नहीं।
| कोड | अर्थ |
|---|---|
| 0 | असुरक्षित (रिफ्लेक्शन प्रिमिटिव मौजूद) |
| 1 | पैच किया गया / असुरक्षित नहीं |
| 2 | त्रुटि (पहुंच योग्य नहीं, WAF चुनौती, अप्रत्याशित प्रतिक्रिया) |
<area id="…">) है। एट्रिब्यूट कोटिंग KSES जनरेशन के अनुसार भिन्न होती है (पुराना कस्टम पार्सर: <area id=x>; DOMDocument: <area id="x"> / <area id="x" />), इसलिए सभी रूपों का मिलान किया जाता है। कच्चा < area …> पास-थ्रू, बिना पुनः-पार्सिंग के, ब्राउज़र में निष्क्रिय टेक्स्ट है, प्रिमिटिव नहीं — इसे RAW_TEXT_ONLY के रूप में रिपोर्ट किया जाता है और यह गलत-सकारात्मक (false positive) उत्पन्न नहीं करता।login_errors फ़िल्टर या CDN/WAF प्रतिक्रियाओं को फिर से लिखता है, या लॉगिन त्रुटि उपयोगकर्ता-नाम को कभी प्रतिध्वनित नहीं करती।केवल अधिकृत सुरक्षा परीक्षण। यह टूल विशेष रूप से उन प्रणालियों के परीक्षण के लिए है जिनके आप स्वामी हैं या जिनके मूल्यांकन की आपके पास स्पष्ट लिखित अनुमति है। अनधिकृत परीक्षण अधिकांश क्षेत्राधिकारों में अवैध है।
| फ़्लैग | उद्देश्य |
|---|
--version | कोर संस्करण का फ़िंगरप्रिंट (फ़ीड जनरेटर टैग, होमपेज मेटा फ़ॉलबैक) |
--jsonp | यह भी सत्यापित करें कि REST JSONP एनवलप (_jsonp/_envelope) पहुंच योग्य है |
-v, --verbose | प्रोब प्रतिक्रिया स्निपेट प्रिंट करें (रिपोर्ट के लिए साक्ष्य) |
--json | मशीन-पठनीय JSON परिणाम (CI / ऑटोमेशन) |
| देखा गया व्यवहार | निर्णय | एग्ज़िट |
|---|
<b>marker</b> बिना एस्केप किए प्रतिध्वनित | RAW_HTML — असुरक्षित | 0 |
< area id=marker> को लाइव <area id="marker"> में पुनः पार्स किया गया (कोई भी कोटिंग / वॉइड फॉर्म) | AREA_BYPASS — असुरक्षित | 0 |
| उपयोगकर्ता-नाम HTML-एस्केप किया गया | ESCAPED — असुरक्षित नहीं | 1 |
| टैग हटाए गए, टेक्स्ट शेष रहता है | STRIPPED — असुरक्षित नहीं | 1 |
कच्चा < area …> पारित हो जाता है लेकिन कभी पुनः पार्स नहीं होता | RAW_TEXT_ONLY — निष्क्रिय टेक्स्ट, असुरक्षित नहीं | 1 |
| कोई प्रतिध्वनि नहीं | NOT_REFLECTED — असुरक्षित नहीं | 1 |
| प्रोब अवरुद्ध (HTTP ≥ 400 / चुनौती पृष्ठ) या लक्ष्य पहुंच योग्य नहीं | त्रुटि | 2 |