
Concrete CMS के लिए IDOR पर गहन राइट-अप, जिसमें message_detail एंडपॉइंट, प्राधिकरण की कमी का मूल कारण, हमले के परिदृश्य, प्रभाव और समाधान शामिल हैं।
CVE-2026-8237, Concrete CMS 9.5.0 और इससे पहले के संस्करणों में अनुपस्थित प्राधिकरण जाँच (missing authorization checks) के कारण उत्पन्न एक Insecure Direct Object Reference (IDOR) भेद्यता है। यह दोष /ccm/frontend/conversations/message_detail एंडपॉइंट में मौजूद है, जो केवल उपयोगकर्ता द्वारा प्रदान किए गए संदेश पहचानकर्ता (message identifier) के आधार पर वार्तालाप संदेशों की पूर्ण सामग्री लौटाता है। चूँकि एप्लिकेशन यह सत्यापित नहीं करता है कि अनुरोधकर्ता निर्दिष्ट संदेश तक पहुँचने के लिए अधिकृत है या नहीं, एक अनप्रमाणित (unauthenticated) हमलावर संदेश IDs की गणना कर सकता है और वार्तालाप सामग्री प्राप्त कर सकता है जो निजी रहनी चाहिए। उन संदेशों से जुड़े फ़ाइल अनुलग्नक डाउनलोड URLs भी उजागर हो सकते हैं। यह समस्या Concrete CMS 9.5.1 में ठीक कर दी गई है।
| गुण | मान |
|---|---|
| उत्पाद | Concrete CMS |
| प्रभावित संस्करण | 9.5.0 और इससे पहले |
| सुधारित संस्करण | 9.5.1 |
| प्रभावित एंडपॉइंट | /ccm/frontend/conversations/message_detail |
एंडपॉइंट, क्लाइंट-नियंत्रित message ID का उपयोग करके एक वार्तालाप संदेश प्राप्त करता है, बिना यह सत्यापित किए कि वर्तमान उपयोगकर्ता के पास उस विशिष्ट संदेश तक पहुँचने की अनुमति है या नहीं।
भेद्य कार्यप्रवाह (workflow) अवधारणात्मक रूप से इस प्रकार है:
उपयोगकर्ता messageId प्रदान करता है
↓
सर्वर संदेश प्राप्त करता है
↓
कोई प्राधिकरण जाँच नहीं
↓
पूर्ण संदेश सामग्री लौटाता है
चूँकि स्वामित्व या पहुँच अनुमतियों की कभी जाँच नहीं की जाती, हमलावर अन्य उपयोगकर्ताओं के वार्तालाप संदेशों तक पहुँचने के लिए messageId मान बदल सकते हैं।
मान लें कि एक वैध अनुरोध संदेश 150 प्राप्त करता है:
GET /ccm/frontend/conversations/message_detail?messageId=150
एक हमलावर केवल पहचानकर्ता बदल देता है:
GET /ccm/frontend/conversations/message_detail?messageId=151
यदि सर्वर पहुँच से वंचित करने के बजाय संदेश 151 की सामग्री के साथ प्रतिक्रिया करता है, तो हमलावर निजी वार्तालापों और उनसे जुड़े अनुलग्नकों की गणना करने के लिए IDs को बढ़ाता रह सकता है।
सफल शोषण एक हमलावर को निम्नलिखित की अनुमति दे सकता है:
यह भेद्यता मुख्य रूप से गोपनीयता को प्रभावित करती है क्योंकि संवेदनशील जानकारी बिना प्राधिकरण के उजागर की जा सकती है।
| मीट्रिक | स्कोर |
|---|---|
| CVSS v3.1 (NVD) | 5.3 (मध्यम) |
| CVSS v4.0 (Concrete CMS) |
नोट: विक्रेता ने वास्तविक भेद्य स्रोत कोड प्रकाशित नहीं किया है। निम्नलिखित उदाहरण केवल भेद्यता पैटर्न को दर्शाता है।
$messageId = $_GET['messageId'];
$message = $conversationRepository->find($messageId);
// Missing authorization check
return response()->json([
'message' => $message->getContent(),
'attachments' => $message->getAttachments()
]);
एप्लिकेशन उपयोगकर्ता-नियंत्रित messageId पर भरोसा करता है और यह पुष्टि किए बिना अनुरोधित संदेश लौटाता है कि अनुरोधकर्ता उस तक पहुँचने के लिए अधिकृत है।
$messageId = $_GET['messageId'];
$message = $conversationRepository->find($messageId);
if (!$authorizationService->canView($currentUser, $message)) {
return response()->json([
'error' => 'Access denied'
], 403);
}
return response()->json([
'message' => $message->getContent(),
'attachments' => $message->getAttachments()
]);
सुधारित कार्यान्वयन किसी भी वार्तालाप डेटा को लौटाने से पहले सर्वर-पक्ष प्राधिकरण जाँच करता है। भले ही हमलावर messageId को संशोधित करे, अनुरोध तब तक अस्वीकार कर दिया जाता है जब तक कि उपयोगकर्ता के पास उस विशिष्ट संदेश तक पहुँचने की अनुमति न हो। यह वार्तालाप सामग्री और अनुलग्नकों के अनधिकृत प्रकटीकरण को रोकता है।
| 6.3 (मध्यम) |