
WordPress पेज-टेम्पलेट पाथ ट्रैवर्सल के कारण होने वाले स्थानीय PHP फ़ाइल इन्क्लूज़न और PEAR-आधारित RCE को पुनः उत्पन्न करने वाला Docker-आधारित स्थानीय लैब, जिसमें एक PoC स्क्रिप्ट शामिल है।
CVE-2026-87902 (WordPress पेज टेम्पलेट पार्सिंग पाथ ट्रैवर्सल → स्थानीय PHP फ़ाइल समावेशन → pearcmd फ़ाइल लेखन RCE) को पुनः उत्पन्न करने के लिए स्थानीय Docker टारगेट रेंज।
⚠️ केवल अधिकृत वातावरण में सुरक्षा अध्ययन और अनुसंधान के लिए। केवल स्थानीय Docker में चलाएँ, किसी भी अनधिकृत लक्ष्य पर उपयोग करना प्रतिबंधित है। इस कमज़ोरी को 2026-09-22 को आधिकारिक रूप से ठीक कर दिया गया है, सभी समर्थित शाखाओं के लिए पैच जारी किए जा चुके हैं।
get_page_template() उपयोगकर्ता-नियंत्रित pagename पैरामीटर पर दूसरी बार urldecode() करके उसे टेम्पलेट उम्मीदवार नामों में जोड़ता है, locate_template() file_exists() से फ़ाइल ढूँढता है और लोड करने से पहले केवल realpath/सफ़िक्स/पठनीयता जाँच करता है, यह सत्यापित नहीं करता कि पथ अभी भी थीम निर्देशिका के भीतर है(canonicalization मौजूद है, containment नहीं)| # | शर्त | यह टारगेट रेंज इसे कैसे पूरा करता है |
|---|---|---|
| 1 | प्रकाशित पेज जिसमें कोई कस्टम टेम्पलेट निर्दिष्ट नहीं है | setup.sh स्वचालित रूप से एक उदाहरण पेज बनाता और साफ़ करता है |
| 2 | सक्रिय थीम के शीर्ष स्तर पर page-* निर्देशिका | theme/mytheme/page-templates/ (सक्रिय थीम में यह निर्देशिका मौजूद है) |
| 3 | पठनीय /usr/local/lib/php/pearcmd.php | आधिकारिक php इमेज में PEAR अंतर्निहित है |
| 4 | register_argc_argv=On + लिखने योग्य स्थान | आधिकारिक इमेज में php.ini नहीं है, कंपाइल डिफ़ॉल्ट मान On है; /tmp लिखने योग्य है |
docker compose up -d # पहली बार स्वचालित रूप से इमेज खींची जाएगी (लगभग 1GB)
sh setup.sh # इंस्टॉलेशन + /flag रखना + चारों शर्तों का सत्यापन
python cve-2026-87902.py --url http://127.0.0.1:8091
अपेक्षित आउटपुट:
[*] page id : 4 (about, default template, via /index.php?rest_route=...)
[*] depth 7 : stage 1 HTTP 200, stage 2 HTTP 200
[+] marker : 'CVE-2026-87902-POC-OK' found 12 time(s) in the stage-2 response
[+] EXPLOIT SUCCESSFUL - PHP executed with the web-server account's privileges
(12 बार = PEAR कॉन्फ़िगरेशन फ़ाइल में 12 कॉन्फ़िगरेशन आइटम हैं, प्रत्येक में एक payload एम्बेड किया गया है)
stage 1 में PEAR द्वारा लिखी गई फ़ाइल देखें (#PEAR_Config 0.9 से शुरू होने वाला serialize टेक्स्ट, payload सामान्य अक्षरों के रूप में 12 कॉन्फ़िगरेशन आइटम में एम्बेड है):
docker compose exec wordpress cat /tmp/wp-pear-rce-flag.php
register_argc_argv=On के कारण query string + पर विभाजित होकर $argv बनती है, pearcmd सोचता है कि उसे टर्मिनल में कॉल किया गया है; config-create <root> <file> root(जिसमें PHP कोड एम्बेडेड है)को जैसा है वैसा लक्ष्य फ़ाइल में लिख देता है<?=...?> निष्पादित होता है, /flag पढ़कर प्रतिध्वनित करता हैCVE-2026-87902-POC-OK(कंटेनर के /flag में स्थित)setup.sh चलाएँपूर्ण सफ़ाई (कंटेनर + डेटा वॉल्यूम + इमेज):
docker compose down -v --rmi all
docker-compose.yml WordPress 7.0.2-php8.3-apache + MySQL 8.4 + wp-cli
theme/mytheme/ प्रयोग थीम (page-templates/ निर्देशिका सहित, शर्त ②)
cve-2026-87902.py PoC (ressl/cve-2026-87902-poc से, कॉपीराइट मूल लेखक के पास)
setup.sh एक-क्लिक इंस्टॉलेशन + चार शर्तों का स्व-परीक्षण