
WordPress 未授权RCE EXP | CVE-2026-63030
WordPress REST API batch रूट कन्फ्यूजन + SQL इंजेक्शन से अनधिकृत एडमिन निर्माण → रिमोट कोड निष्पादन तक की पूर्ण एक्सप्लॉइट श्रृंखला PoC।
केवल अधिकृत सुरक्षा परीक्षण, भेद्यता पुनरुत्पादन और अनुसंधान हेतु। अनधिकृत लक्ष्यों पर उपयोग निषिद्ध।
| आइटम | विवरण |
|---|---|
| CVE | CVE-2026-63030 |
| घटक | WordPress Core REST API (/batch/v1) |
| प्रभावित संस्करण | WordPress 6.9.0 – 6.9.4, 7.0.0 – 7.0.1 (आधिकारिक घोषणा के अनुसार) |
| आक्रमण पूर्वापेक्षा | लक्ष्य पर REST API batch सक्षम; साइट पर कम से कम एक प्रकाशित पोस्ट या पृष्ठ |
| अनुमति आवश्यकता | लॉगिन आवश्यक नहीं (प्री-ऑथ) |
| नुकसान | एक एडमिन खाता बनाना, और आगे प्लगइन अपलोड कर RCE सक्षम करना |
REST batch रूट कन्फ्यूजन
→ author__not_in SQL इंजेक्शन
→ UNION द्वारा नकली WP_Post / oEmbed cache / Customizer changeset
→ Customizer प्रकाशित करते समय मौजूदा एडमिन संदर्भ में स्विच
→ REST /wp/v2/users द्वारा नया एडमिन बनाना
→ बैकएंड पर एकल-उपयोग प्लगइन अपलोड
→ सिस्टम कमांड निष्पादन
मुख्य बात "स्टैक्ड डेटाबेस लेखन" नहीं है, बल्कि:
serve_batch_request_v1() में सत्यापन चरण और शेड्यूलिंग चरण के बीच $matches / $validation के इंडेक्स असंगत होते हैं, जिससे route confusion उत्पन्न होता है।author_exclude WP_Query के author__not_in में प्रवेश करता है और NOT IN (...) में जुड़कर SQL इंजेक्शन बनाता है।UNION SELECT द्वारा पूर्ण wp_posts पंक्ति नकली बनाई जाती है, जिससे oEmbed / Customizer तर्क ट्रिगर होता है और वर्तमान उपयोगकर्ता संदर्भ किसी मौजूदा एडमिन में बदल जाता है।proc_open / passthru / system / shell_exec / exec / popen में से कोई एक)disable_functions द्वारा सभी कमांड निष्पादन फ़ंक्शन अक्षम हैं, तब भी एडमिन निर्माण सफल हो सकता है, लेकिन RCE चरण विफल होगाCVE-2026-63030/
├── exp.py # पूर्ण एक्सप्लॉइट स्क्रिप्ट (एकल फ़ाइल, शून्य निर्भरता)
└── README.md # यह विवरण
id)python3 exp.py --url http://192.168.1.10:8080/
python3 exp.py --url http://192.168.199.134:9005/ --username mht --password 'mht666' --email [email protected] --command 'id' --timeout 60
| पैरामीटर | अनिवार्य | डिफ़ॉल्ट मान | विवरण |
|---|---|---|---|
--url | हाँ | कोई नहीं | लक्ष्य WordPress मूल URL |
--username | नहीं | wp2_<hex> | बनाए जाने वाले एडमिन का उपयोगकर्ता नाम |
--password | नहीं | Wp2!<random> | बनाए जाने वाले एडमिन का पासवर्ड |
--email | नहीं | <username>@wp2shell.invalid | बनाए जाने वाले एडमिन का ईमेल |
--command / -c | नहीं | id | एकल-उपयोग प्लगइन द्वारा निष्पादित कमांड |
--timeout | नहीं | 60 | एकल HTTP अनुरोध का टाइमआउट (सेकंड) |
[*] Creating administrator via SQLi -> customizer bridge...
[+] Generated administrator: labadmin
[*] Password: S3cure!pass
[*] Email: [email protected]
[*] Logging in as generated administrator...
[+] Authenticated.
[*] Uploading one-shot command plugin...
[*] Plugin path: http://192.168.1.10:8080/wp-content/plugins/lab_wp2_cmd_xxxxxxxx/lab_wp2_cmd_xxxxxxxx.php
[*] Executing command: id
[+] command output:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
[via: proc_open]
[*] Deleting generated administrator...
[+] Generated administrator removed.
[*] Cleaning up temporary plugin...
[+] Temporary plugin removed.
स्क्रिप्ट समाप्ति के बाद यह प्रयास करेगी:
यदि बीच में विफलता हो, तो कृपया आउटपुट में दिए गए खाता नाम और पासवर्ड का उपयोग करके मैन्युअल सफाई करें।
has been disabled for security reasons दिखाई दे, तो disable_functions द्वारा संबंधित फ़ंक्शन अक्षम हो गया है। PoC विभिन्न निष्पादन विधियों को क्रमशः आज़माएगा; यदि सभी अक्षम हैं, तो RCE उपलब्ध नहीं होगा, लेकिन एडमिन निर्माण चरण अभी भी सफल हो सकता है।wp-admin/users.php और wp-content/plugins/ में मैन्युअल जाँच करें।/batch/v1 तक अनधिकृत पहुँच को अस्थायी रूप से प्रतिबंधित करेंdisable_functions और न्यूनतम अनुमति वाले Web उपयोगकर्ता कॉन्फ़िगरेशन रखें, जिससे RCE का प्रभाव कम होइस रिपॉजिटरी का कोड केवल सुरक्षा अनुसंधान और अधिकृत भेद्यता पुनरुत्पादन के लिए है। उपयोगकर्ता को स्वयं सुनिश्चित करना होगा कि वे स्थानीय कानूनों और लक्ष्य सिस्टम की अनुमति का पालन कर रहे हैं। लेखक किसी भी दुरुपयोग के लिए जिम्मेदार नहीं है।