
CVE पुनरुत्पादन: cve-2026-63030_60137-wordpress_rce_reproduction
खोजकर्ता: Searchlight Cyber (GPT-5.6 Sol के माध्यम से)
गंभीरता: क्रिटिकल — CVSS 9.8 (CVE-2026-63030), CVSS 9.1 (CVE-2026-60137)
स्थिति: सक्रिय रूप से शोषित — CISA KEV में जोड़ा गया
उपनाम: "wp2shell"
यह WordPress Core में एक बिना प्रमाणीकरण वाली रिमोट कोड निष्पादन (RCE) श्रृंखला है जो दो CVEs से मिलकर बनी है:
| CVE | घटक | प्रकार | CWE |
|---|---|---|---|
| CVE-2026-63030 | WP REST API बैच एंडपॉइंट | रूट कन्फ्यूज़न / एक्सेस-नियंत्रण बाईपास | CWE-436 |
| CVE-2026-60137 | WP_Query author__not_in पैरामीटर | SQL इंजेक्शन | CWE-89 |
अकेले-अकेले प्रत्येक दोष गंभीर है; संयुक्त रूप से ये एक बिना प्रमाणीकरण वाले हमलावर को लक्ष्य पर मनमाना PHP निष्पादित करने और वेबशेल तैनात करने की अनुमति देते हैं।
WordPress REST API /wp-json/wp/v2/batch पर एक बैच एंडपॉइंट उजागर करता है। रूट रिज़ॉल्यूशन में खामी के कारण (जो WP 6.9 के पुनर्लिखित रूटिंग मिडलवेयर में पेश की गई), बैच प्रोसेसर यह सही ढंग से सत्यापित नहीं करता है कि बैच के आंतरिक उप-अनुरोध बाहरी अनुरोध के प्रमाणीकरण और अनुमति जांच को विरासत में प्राप्त करते हैं। एक हमलावर ऐसा बैच पेलोड तैयार कर सकता है जो:
wp/v2/users, wp/v2/plugins) को आमंत्रित करता है।WP_REST_Server::dispatch() का लाभ उठाता है।यह रीड (पढ़ने) संचालन के लिए सभी प्रमाणीकरण सुरक्षा को बायपास करता है और पैरामीटर स्मगलिंग के साथ संयुक्त होने पर कुछ राइट (लिखने) संचालन को भी।
author__not_in SQL इंजेक्शनWP_Query क्लास एक author__not_in पैरामीटर स्वीकार करता है जो विशिष्ट लेखक आईडी द्वारा पोस्ट को बाहर करने के लिए होता है। WP_Query::get_posts() विधि में एक टाइप-कोर्सन बग (जो WP 6.9 के क्वेरी सैनिटाइज़ेशन रीफैक्टर में पेश किया गया) के कारण, जब author__not_in मानों को विशेष रूप से तैयार किए गए एसोसिएटिव ऐरे के रूप में आपूर्ति की जाती है, तो वे उचित पैरामीटराइज़ेशन के बिना सीधे SQL WHERE क्लॉज़ में अंतर्निहित (interpolated) हो जाते हैं।
इंजेक्शन post_author IN (...) जनरेटेड SQL में होता है। कच्चे SQL अंशों के साथ ऐरे को नेस्ट करके, एक हमलावर IN क्लॉज़ से बाहर निकल सकता है और मनमाने UNION / INTO OUTFILE स्टेटमेंट निष्पादित कर सकता है — बशर्ते डेटाबेस उपयोगकर्ता के पास FILE विशेषाधिकार हो।
Attacker (unauthenticated)
│
├─ POST /wp-json/wp/v2/batch
│ └─ CVE-2026-63030: Bypass auth, invoke internal query API
│ └─ CVE-2026-60137: Inject SQL via author__not_in
│ └─ UNION SELECT ... INTO OUTFILE 'webshell.php'
│ └─ Webshell deployed to web root
│ └─ RCE achieved
बैच एंडपॉइंट वेक्टर प्रदान करता है; SQLi पेलोड डिलीवरी प्रदान करता है।
| संस्करण सीमा | पूर्ण श्रृंखला |
|---|---|
| WordPress 6.9.0 – 6.9.4 | ✅ दोनों CVEs उपस्थित |
| WordPress 7.0.0 – 7.0.1 | ✅ दोनों CVEs उपस्थित |
| WordPress ≤ 6.8.x | केवल CVE-2026-63030 (SQLi शोषणीय नहीं) |
पैच WordPress 6.9.5 और 7.0.2 में जारी किए गए (दोनों 2026-07-16 को जारी हुए)।
/wp-json/wp/v2/batch 200 लौटाता है (403/404 नहीं)।--target फ्लैग के साथ PoC चलाएँ (नीचे देखें)।/wp-content/webshell.php?cmd=id पर वेबशेल की पुष्टि करें।python exploit.py --target https://target.example.com --action deploy-webshell
python exploit.py --target https://target.example.com --action exec --command "id"
python exploit.py --target https://target.example.com --action exec --command "uname -a"
POST /wp-json/wp/v2/batch को ब्लॉक करें।FILE विशेषाधिकार हटाएँ।define('DISALLOW_FILE_EDIT', true); और define('DISALLOW_FILE_MODS', true); सक्षम करें।wp-content/ के अंतर्गत अप्रत्याशित .php फ़ाइलों पर नज़र रखें।author__not_in की जाँच करें।