
MISP <= 2.5.27 - संग्रहीत क्रॉस-साइट स्क्रिप्टिंग वर्कफ़्लो इंजन के माध्यम से (doT.js टेम्पलेट इंजेक्शन).
MISP <= 2.5.27 - वर्कफ़्लो इंजन के माध्यम से संग्रहित क्रॉस-साइट स्क्रिप्टिंग (doT.js टेम्पलेट इंजेक्शन)
Franck FERMAN द्वारा खोजा गया
अवलोकन - मूल कारण - हमला श्रृंखला - संरचना - उपयोग - सुधार - संदर्भ
CVE-2025-67906 (GCVE-1-2025-0031) MISP (मैलवेयर सूचना साझाकरण प्लेटफ़ॉर्म) संस्करण 2.5.27 और उससे पहले के संस्करणों में एक संग्रहित क्रॉस-साइट स्क्रिप्टिंग (XSS) भेद्यता है।
यह भेद्यता app/View/Elements/Workflows/executionPath.ctp में स्थित है, जो वर्कफ़्लो निष्पादन पथ दृश्य घटक है। वर्कफ़्लो ट्रिगर्स का name फ़ील्ड सर्वर-साइड स्वच्छता के बिना डेटाबेस में संग्रहीत किया जाता है और बाद में doT.js टेम्पलेट इंजन के माध्यम से DOM में HTML एस्केपिंग के बिना प्रस्तुत किया जाता है। एक प्रमाणित हमलावर मनमाना HTML/JavaScript इंजेक्ट कर सकता है जो समझौता किए गए वर्कफ़्लो को देखने वाले किसी भी उपयोगकर्ता के ब्राउज़र सत्र में निष्पादित होता है।
चूंकि पेलोड डेटाबेस में संग्रहीत होता है और प्रत्येक पृष्ठ लोड पर प्रस्तुत किया जाता है, XSS स्थायी है – यह पृष्ठ ताज़ा करने पर बना रहता है, कई उपयोगकर्ताओं को प्रभावित करता है, और वर्कफ़्लो को स्पष्ट रूप से हटाए जाने तक बना रहता है।
खोज: यह भेद्यता Franck FERMAN द्वारा पहचानी गई और जिम्मेदारी से प्रकट की गई।
इस भेद्यता के लिए कई CVSS मूल्यांकन मौजूद हैं:
| स्रोत | स्कोर | गंभीरता | वेक्टर |
|---|---|---|---|
| NIST NVD | 9.0 | गंभीर | CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H |
| GCVE (CIRCL) | 7.1 | उच्च | CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:A/VC:H/VI:N/VA:N/SC:H/SI:H/SA:H |
| CNA (MITRE) | 5.4 | मध्यम | CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N |
स्कोर विचलन प्रभाव गहराई के अलग-अलग आकलन को दर्शाता है। NIST NVD स्कोर (9.0) पूर्ण गोपनीयता, अखंडता और उपलब्धता प्रभाव को ध्यान में रखता है, क्योंकि XSS पेलोड पीड़ित के सत्र विशेषाधिकारों के साथ निष्पादित होता है, जो प्रशासन-स्तरीय डेटा निष्कर्षण और वर्कफ़्लो हेरफेर को सक्षम बनाता है। CNA स्कोर (5.4) एक सामान्य XSS के लिए केवल सीमित C/I प्रभाव पर विचार करता है। GCVE CVSS 4.0 स्कोर (7.1) हमला आवश्यकताएँ (विशेषाधिकार) और सक्रिय उपयोगकर्ता इंटरैक्शन संशोधक प्रस्तुत करता है।
सभी मूल्यांकनों में दायरा बदला हुआ है क्योंकि हमलावर का पेलोड (MISP API के माध्यम से इंजेक्ट) एक अलग सुरक्षा संदर्भ (पीड़ित के ब्राउज़र सत्र) में निष्पादित होता है।
MISP का वर्कफ़्लो इंजन प्रमाणित उपयोगकर्ताओं को REST API के माध्यम से वर्कफ़्लो बनाने और संपादित करने की अनुमति देता है। वर्कफ़्लो डेटा मॉडल में एक trigger घटक शामिल है जिसमें name फ़ील्ड है। यह फ़ील्ड:
doT.js एक तेज़ जावास्क्रिप्ट टेम्पलेटिंग इंजन है। यह इंटरपोलेशन के लिए {{= }} का उपयोग करता है, जो डिफ़ॉल्ट रूप से HTML से बच नहीं पाता। MISP वर्कफ़्लो संपादक ट्रिगर मेटाडेटा (जिसमें name फ़ील्ड शामिल है) को DOM में प्रस्तुत करने के लिए doT.js का उपयोग करता है। जब name फ़ील्ड में `` जैसा HTML होता है, तो टेम्पलेट इंजन इसे कच्चे HTML के रूप में सम्मिलित करता है, और ब्राउज़र एम्बेडेड जावास्क्रिप्ट निष्पादित करता है।
सुधार के लिए आवश्यक है:
{{! }} पर स्विच करना, जो मान को HTML-एस्केप करता हैPOST /workflows/edit/{id}
{
"Workflow": {
"id": "1",
"data": "{\"1\":{\"data\":{\"name\":\"\"}}}"
}
}
data JSON फ़ील्ड के अंदर name मान इंजेक्शन बिंदु है। संपूर्ण वर्कफ़्लो ग्राफ़ अनुरोध निकाय में एक JSON स्ट्रिंग के रूप में क्रमबद्ध है।
भेद्यता एक क्लाइंट-साइड टेम्पलेट इंजन (doT.js) का उपयोग करके दृश्य वर्कफ़्लो संपादक प्रस्तुत करने के वास्तुशिल्पीय विकल्प द्वारा प्रवर्धित होती है। वर्कफ़्लो संपादक एक ग्राफिकल ड्रैग-एंड-ड्रॉप इंटरफ़ेस है जहां प्रत्येक ट्रिगर/क्रिया को एक दृश्य ब्लॉक के रूप में प्रदर्शित किया जाता है। ट्रिगर का name फ़ील्ड इन ग्राफिकल ब्लॉकों के अंदर एक लेबल के रूप में प्रस्तुत किया जाता है।
doT.js टेम्पलेट से HTML स्ट्रिंग उत्पन्न करके और उन्हें DOM में सम्मिलित करके दृश्य घटकों का निर्माण करता है। {{= }} इंटरपोलेशन सिंटैक्स अनएस्केप्ड आउटपुट उत्पन्न करता है – टेम्पलेट में इंटरपोलेट किया गया कोई भी डेटा मार्कअप के रूप में माना जाता है, न कि टेक्स्ट के रूप में। यदि उसी name फ़ील्ड को element.textContent (जो इनपुट को सादे टेक्स्ट के रूप में मानता है) या doT.js के अपने {{! }} एन्कोडेड आउटपुट सिंटैक्स के माध्यम से प्रस्तुत किया जाता, तो इनपुट सामग्री की परवाह किए बिना कोई XSS संभव नहीं होता।
हमले की सतह ठीक इसलिए मौजूद है क्योंकि:
{{= }}) का उपयोग करता हैname फ़ील्ड में संग्रहीत कोई भी स्ट्रिंग ब्राउज़र द्वारा HTML के रूप में व्याख्यायित की जाती हैयह वेब अनुप्रयोगों में एक सामान्य भेद्यता पैटर्न है जो इंटरैक्टिव दृश्य इंटरफ़ेस बनाने के लिए क्लाइंट-साइड टेम्पलेट इंजन का उपयोग करते हैं: समृद्ध प्रतिपादन की आवश्यकता टेम्पलेट और उसके डेटा स्रोतों के बीच एक अंतर्निहित विश्वास संबंध बनाती है, और कोई भी अनियंत्रित उपयोगकर्ता इनपुट जो टेम्पलेट तक पहुंचता है, निष्पादन योग्य कोड बन जाता है।
<script> क्यों नहींटेम्पलेट इंटरपोलेशन के माध्यम से इंजेक्ट किया गया एक कच्चा <script> टैग आमतौर पर इस संदर्भ में निष्पादित नहीं होगा। ब्राउज़र प्रारंभिक पृष्ठ पार्सिंग (innerHTML या समकक्ष के माध्यम से) के बाद DOM में डाले गए <script> तत्वों को नहीं चलाते हैं। HTML तत्वों पर इवेंट हैंडलर विशेषताएँ जैसे onerror, onload, या onmouseover इस प्रतिबंध को दरकिनार कर देती हैं क्योंकि वे इनलाइन जावास्क्रिप्ट को फायर करते हैं जब ब्राउज़र तत्व की विशेषताओं को संसाधित करता है, भले ही तत्व कैसे डाला गया हो।
<img src="https://raw.githubusercontent.com/franckferman/cve-2025-67906/HEAD/x" onerror="..."> वेक्टर को प्राथमिकता दी जाती है क्योंकि:
src="x" तत्काल लोड विफलता की गारंटी देता है, उपयोगकर्ता इंटरैक्शन के बिना onerror को ट्रिगर करता है<script> टैग को अवरुद्ध करने वाले CSP script-src प्रतिबंधों को दरकिनार करता है, क्योंकि निष्पादन एक गैर-स्क्रिप्ट तत्व पर इवेंट हैंडलर के माध्यम से होता हैMISP इंस्टेंस आमतौर पर कंटेंट सिक्योरिटी पॉलिसी हेडर तैनात करते हैं जो connect-src को प्रतिबंधित करते हैं, बाहरी ऑरिजिन के लिए fetch() और XMLHttpRequest कॉल को रोकते हैं। इस PoC में निष्कर्षण पेलोड API कॉल के बजाय window.location (नेविगेशन) का उपयोग करके CSP को दरकिनार करते हैं: