
WordPress Core 4.7.0–7.1.1 को CVE-2026-87902 के लिए स्कैन करता है, जो डबल-एन्कोडेड pagename ट्रैवर्सल के माध्यम से अनऑथेंटिकेटेड LFI है, साथ में वैकल्पिक PEAR config-create RCE एस्केलेशन और मास स्कैनिंग।
WordPress Core get_page_template() / locate_template() पाथ ट्रैवर्सल एक्सप्लॉइट टूल
केवल अधिकृत सुरक्षा परीक्षण के लिए। कंप्यूटर सिस्टम तक अनधिकृत पहुँच अवैध है।
| आइटम | विवरण |
|---|---|
| CVE ID | CVE-2026-87902 |
| GHSA ID | GHSA-7hp8-65ch-5whp |
| भेद्यता प्रकार | CWE-98 — Include/Require के लिए फ़ाइलनाम का अनुचित नियंत्रण |
| CVSS v3.1 | 8.1 (उच्च) / CVSS 4.0: 9.2 (गंभीर) |
| प्रभावित घटक | WordPress Core |
| प्रभावित संस्करण | 4.7.0 से 7.1.1 तक (सभी शाखाएँ) |
| ठीक किए गए संस्करण | 7.1.2 (और 4.7.37 तक बैकपोर्ट) |
| प्रमाणीकरण आवश्यक | कोई नहीं (अनधिकृत) |
| आक्रमण वेक्टर | एकल GET अनुरोध |
| खोजकर्ता | Robert Ressl (WordPress HackerOne कार्यक्रम के माध्यम से) |
| प्रकटीकरण तिथि | 22 सितंबर, 2026 |
| वास्तविक दुनिया में शोषित | हाँ — CISA KEV कैटलॉग में सूचीबद्ध |
CVE-2026-87902, WordPress Core में एक अनधिकृत पाथ ट्रैवर्सल और लोकल फ़ाइल इन्क्लूज़न (LFI) भेद्यता है जो 2016 से जारी प्रत्येक WordPress संस्करण (4.7.0 से 7.1.1) को प्रभावित करती है। आक्रमणकर्ता को किसी खाते या प्रमाणीकरण की आवश्यकता नहीं होती। एक दुर्भावनापूर्ण pagename क्वेरी पैरामीटर तैयार करके, आक्रमणकर्ता WordPress के पेज टेम्पलेट रिज़ॉल्यूशन तंत्र को सक्रिय थीम निर्देशिका के बाहर किसी भी पठनीय .php फ़ाइल को शामिल करने के लिए प्रेरित कर सकता है। विशिष्ट सर्वर स्थितियों (PHP register_argc_argv = On और एक पठनीय pearcmd.php) के अंतर्गत, भेद्यता को रिमोट कोड एक्ज़ीक्यूशन (RCE) तक बढ़ाया जा सकता है।
| शाखा | ठीक किया गया संस्करण |
|---|---|
| 4.7.x | 4.7.37 |
| 5.0.x | 5.0.29 |
| 5.3.x | 5.3.25 |
| 5.9.x | 5.9.18 |
| 6.0.x | 6.0.16 |
| 6.6.x | 6.6.9 |
| 6.9.x | 6.9.9 |
| 7.0.x | 7.0.6 |
| 7.1.x | 7.1.2 |
भेद्यता wp-includes/template.php में get_page_template() में निहित है। जब pagename क्वेरी वेरिएबल मौजूद होता है, तो फ़ंक्शन page-{$pagename}.php बनाता है लेकिन डायरेक्टरी ट्रैवर्सल की जाँच के लिए उस मान पर validate_file() कॉल करने में विफल रहता है। उम्मीदवार फ़ाइलनाम फिर locate_template() को पास किया जाता है, जो इसे थीम निर्देशिका पथ के साथ जोड़ता है और केवल file_exists() की जाँच करता है — यह सत्यापित नहीं करता कि हल किया गया पथ थीम निर्देशिका के अंदर ही रहता है। इसलिए ../ युक्त टेम्पलेट नाम सक्रिय थीम के बाहर किसी पठनीय PHP फ़ाइल को हल कर सकता है और उसे शामिल और निष्पादित किया जा सकता है।
GET /?page_id=&pagename= → WP_Query resolves page_id, matches a published page (avoids 404) → get_page_template() urldecode()s pagename, builds page-{$pagename}.php → locate_template() concatenates candidate to theme directory, resolves via file_exists() → template-loader executes realpath() + include
WordPress pagename पर sanitize_title_for_query() लागू करता है, जो ट्रैवर्सल को रोकने के लिए शाब्दिक बिंदुओं (.) को हाइफ़न (-) से बदल देता है। यह पहले से एक बार डिकोड किए गए इनपुट पर कार्य करता है और पुनरावर्ती रूप से डिकोड नहीं करता। आक्रमणकर्ता %252e%252e%252f (डबल-एन्कोडेड ../) भेजता है:
%252e → %2e, %252f → %2fsanitize_title_for_query() %2e%2e%2f देखता है (कोई शाब्दिक बिंदु नहीं) और इसे पास कर देता हैget_page_template() आंतरिक रूप से फिर से urldecode() कॉल करता है: %2e%2e%2f → ../page- से शुरू होने वाली एक शीर्ष-स्तरीय निर्देशिका हो (जैसे, page-templates/)।page_id के रूप में प्रदान किया जा सके।.php में समाप्त होनी चाहिए (WordPress एक्सटेंशन जोड़ता है)।Windows होस्ट नोट: Win32 .. को शाब्दिक रूप से सामान्यीकृत करता है, इसलिए ट्रैवर्सल तब भी काम कर सकता है जब page- निर्देशिका मौजूद न हो। Linux पर, वह निर्देशिका वास्तव में मौजूद होनी चाहिए।
शर्तें:
register_argc_argv को On पर सेट किया गया होpearcmd.php मौजूद होहमलावर LFI के माध्यम से pearcmd.php को शामिल करता है और सर्वर पर एक PHP फ़ाइल लिखने के लिए उसके config-create कमांड का दुरुपयोग करता है, फिर मनमाने कमांड निष्पादित करने के लिए LFI के माध्यम से उस फ़ाइल को फिर से शामिल करता है।
CVE-2026-87902 को स्विट्ज़रलैंड स्थित सुरक्षा शोधकर्ता Robert Ressl द्वारा खोजा और रिपोर्ट किया गया था।
जुलाई 2026 में WordPress HackerOne कार्यक्रम के माध्यम से रिपोर्ट किया गया। WordPress सुरक्षा टीम ने फ़िक्स का समन्वय किया और इसे 22 सितंबर, 2026 को WordPress 7.1.2 के साथ जारी किया।
| तिथि | घटना |
|---|---|
| जुलाई 2026 | Robert Ressl ने WordPress HackerOne कार्यक्रम के माध्यम से भेद्यता की रिपोर्ट की |
| 22 सितंबर, 2026 | WordPress 7.1.2 फ़िक्स के साथ जारी; सलाह प्रकाशित |
| 22 सितंबर, 2026 | शाखाओं 7.0 से 4.7 तक के लिए सुरक्षा बैकपोर्ट जारी |
| 23 सितंबर, 2026 | हमलावर भेद्य साइटों की जाँच शुरू करते हैं |
| 25 सितंबर, 2026 | CISA ने CVE-2026-87902 को KEV कैटलॉग में जोड़ा |
| विशेषता | विवरण |
|---|---|
| संस्करण फ़िंगरप्रिंटिंग | मेटा जनरेटर, RSS फ़ीड, OPML, readme.html, एसेट ?ver= के माध्यम से WordPress संस्करण की पहचान करता है |
| स्मार्ट संस्करण निर्णय | यह निर्धारित करने के लिए कि लक्ष्य प्रभावित सीमा में है या नहीं, फ़िक्स्ड-संस्करण मैपिंग का उपयोग करता है |
| थीम खोज | सक्रिय थीम स्लग निकालता है, पैरेंट थीम का पता लगाता है, page-* निर्देशिकाओं की खोज करता है |
| पेज ID खोज | REST API, page-id- बॉडी क्लास, शॉर्टलिंक के माध्यम से वैध पेज ID ढूँढता है |
| LFI ओरेकल सत्यापन | नकारात्मक नियंत्रणों के साथ ओरेकल के रूप में wp-links-opml.php और wp-trackback.php जैसी सुरक्षित फ़ाइलों का उपयोग करता है |
| दोहरा-एन्कोडेड ट्रैवर्सल | sanitize_title_for_query() को बायपास करने के लिए स्वचालित रूप से / और . को दोहरा प्रतिशत-एन्कोड करता है |
| PEAR RCE शोषण | सामान्य PEAR पथों का प्रयास करता है, config-create के माध्यम से मार्कर फ़ाइलें लिखता और निष्पादित करता है |
| मास स्कैनिंग | लक्ष्य सूचियों की मल्टी-थ्रेडेड समवर्ती स्कैनिंग |
| परिणाम आउटपुट | परिणामों को vuln_lfi.txt और vuln_lfitorce.txt में सहेजता है |
pip install requests
python3 CVE-2026-87902.py
इंटरैक्टिव मेनू:
[1] एकल स्कैन LFI [2] एकल स्कैन LFI + RCE [3] मास स्कैन LFI [4] मास स्कैन LFI + RCE [5] बाहर निकलें
[1] चुनें, लक्ष्य URL दर्ज करें:
url > https://target.example.com
[2] चुनें, URL और कमांड दर्ज करें (डिफ़ॉल्ट id):
url > https://target.example.com cmd > id
[3] या [4] चुनें, लक्ष्य URL वाली फ़ाइल दर्ज करें (प्रति पंक्ति एक, टिप्पणियों के लिए #):
file > targets.txt
| फ़ाइल | सामग्री |
|---|---|
| vuln_lfi.txt | पुष्टि किए गए LFI लक्ष्य |
| vuln_lfitorce.txt | सफल RCE लक्ष्य |
TIMEOUT = 8 # अनुरोध टाइमआउट (सेकंड) THREADS = 200 # मास स्कैनिंग के लिए समवर्ती थ्रेड USE_ALL_ORACLES = False # सभी ओरेकल का उपयोग करें (अधिक सटीक लेकिन धीमा)
pagename पैरामीटर में .., %2e, %252e वाले अनुरोधों को ब्लॉक करेंpage-* निर्देशिका है या नहींregister_argc_argv सेटिंग की पुष्टि करेंयह टूल केवल अधिकृत सुरक्षा परीक्षण और शैक्षिक उद्देश्यों के लिए है। उपयोगकर्ताओं को यह सुनिश्चित करना चाहिए कि उनके पास लक्ष्य सिस्टम के लिए स्पष्ट लिखित प्राधिकरण है। अनधिकृत उपयोग CFAA, UK Computer Misuse Act और अन्य देशों के समान कानूनों का उल्लंघन कर सकता है। लेखक किसी भी दुरुपयोग के लिए कोई दायित्व स्वीकार नहीं करता।