flawopen.com/Teardowns/cve-2026-105750-docling-html-render-local-file-disclosure
CVE-2026-105750: Docling HTML रेंडरिंग में स्थानीय फ़ाइल का खुलासा
2.118.1 से पुराने Docling संस्करण स्थानीय टेक्स्ट फ़ाइलें उजागर कर सकते हैं, जब Python कोड Playwright स्थापित होने पर render_page=True के साथ filesystem Path से अविश्वसनीय HTML रेंडर करता है। ब्राउज़र पथ ने enable_local_fetch लागू नहीं किया और पहुँच को दस्तावेज़ निर्देशिका तक सीमित नहीं किया। 2.118.1 या बाद के संस्करण में अपग्रेड करें।
दस्तावेज़ कन्वर्टर को ऐसे कर्मचारी की तरह समझें जो ब्राउज़र में खुले पन्ने की तस्वीर लेता है। एक सेटिंग कहती थी “स्थानीय फ़ाइलें मत लाओ”, लेकिन रेंडरिंग का एक रास्ता फिर भी ऐसे अनुरोधों को जाने देता था। यदि दिया गया पन्ना ब्राउज़र से कन्वर्टर द्वारा पढ़ी जा सकने वाली फ़ाइल दिखवा दे, तो दिखाई देने वाला पाठ लौटाए गए दस्तावेज़ की छवि में आ सकता है। सुधार सेटिंग जाँचता है और अनुमत स्थानीय फ़ाइलों को स्रोत दस्तावेज़ की निर्देशिका तक सीमित करता है।
इस पेज के मुख्य शब्द
Docling HTML backend- Docling का वह घटक जो HTML पढ़ता है और दृश्य लेआउट लेने के लिए पृष्ठ को headless browser में रेंडर कर सकता है।
HTMLBackendOptions(render_page=True)- Python API विकल्प जो ब्राउज़र रेंडरिंग पथ चालू करता है। यह डिफ़ॉल्ट रूप से बंद रहता है।
enable_local_fetch- नीति विकल्प जो नियंत्रित करता है कि स्थानीय फ़ाइलें दस्तावेज़ संसाधन के रूप में प्राप्त की जा सकती हैं या नहीं। प्रत्येक backend को हर संसाधन अनुरोध पर इसे लागू करना चाहिए।
Playwright- Docling के HTML पृष्ठ रेंडरिंग में प्रयुक्त वैकल्पिक ब्राउज़र-स्वचालन निर्भरता।
Path input- फ़ाइल सिस्टम पथ के रूप में दी गई स्रोत फ़ाइल। stream इनपुट से अलग, यह ब्राउज़र पथ को file URL origin देता है।
CWE-863- Incorrect Authorization: रेंडरिंग मोड का अनुरोध फ़िल्टर स्थानीय फ़ाइल पहुँच की कॉन्फ़िगर की गई नीति लागू नहीं कर पाया।
फ्रेमवर्क मैपिंग
- इस गाइड में बताई गई कमजोरी के लिए CWE संदर्भ: CWE-863
मूल कारण विश्लेषण (Root Cause)
प्रभावित रेंडरिंग संस्करणों में HTMLDocumentBackend._get_browser_request_block_reason() ने enable_local_fetch जाँचने या resolved path को स्रोत दस्तावेज़ की निर्देशिका तक सीमित करने से पहले file: URL की अनुमति दी। सलाह के अनुसार Docling 2.82.0–2.90.x में रेंडरिंग मोड कोई अनुरोध फ़िल्टर ही नहीं करता था। दोष की सीमा ब्राउज़र संसाधन-अनुरोध नीति है, सामान्य HTML पार्सिंग या हर Docling deployment नहीं। GitHub सलाह मूल कारण के लिए CWE-863 और खुलासे के प्रभाव के लिए CWE-552 भी सूचीबद्ध करती है; यह लेख मूल कारण के प्राथमिक वर्गीकरण के रूप में CWE-863 चुनता है।
हमले का चरण-दर-चरण प्रवाह
ऐप वैकल्पिक HTML रेंडरिंग चालू करता है
प्रभावित deployment Python API में HTMLBackendOptions(render_page=True) और स्थापित Playwright का उपयोग करता है। सलाह के अनुसार डिफ़ॉल्ट कॉन्फ़िगरेशन, Docling CLI और docling-serve प्रभावित सेटअप में शामिल नहीं हैं।
ऐप HTML को filesystem Path के रूप में देता है
सलाह प्रभावित इनपुट को Path के रूप में दिए गए अविश्वसनीय HTML तक सीमित करती है। stream इनपुट page.set_content() के साथ opaque origin का उपयोग करता है और इस file subresource पथ से प्रभावित नहीं होता।
Headless browser स्थानीय संसाधन माँगता है
HTML रेंडरिंग के दौरान subresource अनुरोध कर सकता है। प्रभावित callback ने स्थानीय पहुँच अनुमति लागू किए बिना file: अनुरोध स्वीकार किए; विकल्प चालू होने पर भी स्रोत निर्देशिका तक सीमा नहीं थी, जबकि बिना रेंडरिंग वाला पथ यह सीमा लगाता था।
पठनीय पाठ रेंडर की गई छवि में दिख सकता है
बताया गया प्रभाव उस पाठ तक सीमित है जिसे स्थानीय फ़ाइल ब्राउज़र के दृश्य क्षेत्र में दिखाती है। Docling 2.91.0 से ब्राउज़र में JavaScript बंद है; इसे मनमाने कोड निष्पादन या अदृश्य bytes पढ़ने के रूप में न बताएं।
सुधरा फ़िल्टर दोनों जाँचें बहाल करता है
Docling 2.118.1 स्रोत दस्तावेज़ को स्वयं लोड करने देता है, enable_local_fetch चालू न हो तो अन्य file अनुरोध रोकता है और अनुमत स्थानीय subresources को दस्तावेज़ निर्देशिका तक सीमित करता है।
सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन
कमज़ोर अंश में file: की बिना शर्त अनुमति दिखाई गई है, जैसा कि maintainer सलाह में वर्णित है; यह पूरी source फ़ाइल नहीं है। सुधरा अंश upstream commit 1612b88 का अनुसरण करता है: स्रोत HTML को अनुमति देता है, अन्य स्थानीय फ़ाइलों के लिए enable_local_fetch आवश्यक करता है, माँगे गए पथ को resolve करता है और उसे दस्तावेज़ निर्देशिका में सीमित रखता है। इस अंश को कॉपी करने के बजाय 2.118.1 या बाद में अपग्रेड करें। data:, about: और blob: का अलग व्यवहार स्थानीय फ़ाइल नियम का हिस्सा नहीं है।
सोर्स अंश: docling/backend/html_backend.py — अनुरोध और रेंडरिंग नीति के केंद्रित अंश
# प्रभावित रेंडरिंग पथ: स्थानीय फ़ेच नीति की जाँच से पहले file: को अनुमति-सूची में रखा गया था।
if scheme in {"file", "data", "about", "blob"}:
return None
def _is_allowed_browser_file_request(self, request_url: str) -> bool:
local_base_path = self._get_browser_local_base_path()
if local_base_path is not None and request_url == local_base_path.as_uri():
return True # The source document itself must remain loadable.
if not self.options.enable_local_fetch or local_base_path is None:
return False
requested_path = Path(url2pathname(urlparse(request_url).path)).resolve()
return requested_path.is_relative_to(local_base_path.parent)
# _get_browser_request_block_reason() में:
if scheme == "file":
if self._is_allowed_browser_file_request(request_url):
return None
# अन्यथा अनुरोध अवरुद्ध होने का कारण लौटाएँ।
इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट
- ✓
doclingऔरdocling-slimको 2.118.1 या बाद के संस्करण में अपग्रेड करें; चालू Python सेवा में प्रयुक्त पैकेज जाँचें, केवल विकास परिवेश में नहीं। - ✓
HTMLBackendOptions(render_page=True)वाली Python integrations खोजें और Playwright की मौजूदगी जाँचें; सलाह के अनुसार CLI, docling-serve, डिफ़ॉल्ट रेंडरिंग और stream इनपुट प्रभावित नहीं हैं। - ✓अपग्रेड तक अविश्वसनीय HTML को
render_page=Trueसे रेंडर न करें; अनुकूल होने पर दस्तावेज़ filesystemPathके बजाय stream के रूप में दें। - ✓कन्वर्ज़न को कम-विशेषाधिकार पहचान और न्यूनतम फ़ाइल-सिस्टम पहुँच के साथ चलाएँ; अविश्वसनीय दस्तावेज़ पढ़ने वाली प्रक्रिया में ऐप के secrets mount न करें।
- ✓अविश्वसनीय इनपुट के लिए
enable_local_fetchबंद रखें और पुष्टि करें कि सुधरा callback अनुमत file संसाधनों को स्रोत निर्देशिका तक सीमित करता है। - ✓स्रोत दस्तावेज़, स्थानीय fetch बंद होने पर बाहर की स्थानीय फ़ाइल, और fetch चालू होने पर निर्देशिका के अंदर की फ़ाइल के लिए regression tests जोड़ें; अपेक्षित रोक या अनुमति जाँचें।
- ✓इस दोष को
CVE-2026-105751से अलग रखें: वह Docling OpenDocument Format backend का खुलासा है और 2.120.3 में अलग से सुधारा गया। संदर्भ में संबंधित लेख देखें। - ✓यदि प्रभावित सेवाओं ने अविश्वसनीय HTML संसाधित किया, तो रेंडर दृश्य में दिख सकने वाले पाठ का आकलन करें और secrets exposure पर संगठन की incident-response प्रक्रिया अपनाएँ।