flawopen.com/Teardowns/cve-2026-105750-docling-html-render-local-file-disclosure
CVE-2026-105750: Kebocoran file lokal pada rendering HTML Docling
Versi Docling sebelum 2.118.1 dapat membocorkan file teks lokal ketika kode Python merender HTML tidak tepercaya dari filesystem Path dengan render_page=True dan Playwright terpasang. Jalur browser tidak menerapkan enable_local_fetch dan tidak membatasi akses ke direktori dokumen. Tingkatkan ke 2.118.1 atau lebih baru.
Bayangkan konverter dokumen sebagai petugas yang memotret halaman di browser. Sebuah pengaturan menyatakan “jangan ambil file lokal”, tetapi salah satu jalur rendering tetap meloloskan permintaan itu. Jika halaman yang dikirim membuat browser menampilkan file yang dapat dibaca konverter, teks yang terlihat dapat masuk ke gambar dokumen yang dikembalikan. Perbaikan memeriksa pengaturan tersebut dan membatasi file lokal yang diizinkan ke direktori dokumen sumber.
Konsep Kunci & Istilah
Docling HTML backend- Komponen Docling yang memproses HTML dan dapat merender halaman di browser tanpa antarmuka untuk mengambil tata letak visualnya.
HTMLBackendOptions(render_page=True)- Opsi API Python yang mengaktifkan jalur rendering browser. Secara default opsi ini nonaktif.
enable_local_fetch- Opsi kebijakan yang mengatur apakah file lokal dapat diambil sebagai sumber daya dokumen. Setiap backend harus menerapkannya pada semua permintaan sumber daya.
Playwright- Dependensi otomatisasi browser opsional yang digunakan untuk rendering halaman HTML Docling.
Path input- File sumber yang diberikan sebagai jalur sistem file. Berbeda dari stream, input ini memberi jalur browser origin file URL.
CWE-863- Incorrect Authorization: filter permintaan mode render tidak menerapkan kebijakan akses file lokal yang telah dikonfigurasi.
Pemetaan kerangka kerja
- Referensi CWE untuk kelemahan yang dijelaskan dalam panduan ini: CWE-863
Analisis Akar Masalah (Root Cause)
Pada versi terdampak dalam mode render, HTMLDocumentBackend._get_browser_request_block_reason() mengizinkan URL file: sebelum memeriksa enable_local_fetch atau membatasi jalur yang sudah di-resolve ke direktori dokumen sumber. Advisori menyatakan bahwa Docling 2.82.0–2.90.x sama sekali tidak memfilter permintaan dalam mode render. Batas yang rentan adalah kebijakan permintaan sumber daya browser, bukan pemrosesan HTML secara umum atau semua deployment Docling. Advisori GitHub mengklasifikasikan akar masalah sebagai CWE-863 dan juga mencantumkan CWE-552 untuk dampak kebocoran; halaman ini memakai CWE-863 sebagai klasifikasi akar masalah utama.
Alur Serangan Langkah demi Langkah
Aplikasi mengaktifkan rendering HTML opsional
Deployment terdampak memakai API Python dengan HTMLBackendOptions(render_page=True) dan Playwright terpasang. Konfigurasi default, CLI Docling, dan docling-serve tidak termasuk konfigurasi terdampak menurut advisori.
Aplikasi memberikan HTML sebagai filesystem Path
Advisori membatasi input terdampak pada HTML tidak tepercaya yang diberikan sebagai Path. Input stream memakai page.set_content() dengan origin opaque dan tidak terdampak jalur subresource file ini.
Browser tanpa antarmuka meminta sumber lokal
HTML dapat memicu permintaan subresource saat dirender. Callback terdampak mengizinkan file: tanpa menerapkan otorisasi fetch lokal; meskipun opsi aktif, sumber daya tidak dibatasi ke direktori sumber seperti pada jalur tanpa render.
Teks yang dapat dibaca bisa muncul di gambar hasil render
Dampak yang diungkap terbatas pada teks yang ditampilkan file lokal di area terlihat browser. JavaScript dinonaktifkan di browser mulai Docling 2.91.0; jangan menggeneralisasi masalah ini sebagai eksekusi kode arbitrer atau pembacaan byte tak terlihat.
Filter yang diperbaiki memulihkan kedua pemeriksaan
Docling 2.118.1 mengizinkan dokumen sumber itu sendiri dimuat, memblokir permintaan file lain kecuali enable_local_fetch aktif, dan membatasi subresource lokal yang diizinkan ke direktori dokumen.
Kode Sumber: Rentan vs Aman
Cuplikan rentan menunjukkan aturan yang mengizinkan file: tanpa syarat sebagaimana dijelaskan advisori maintainer; ini bukan file sumber lengkap. Cuplikan perbaikan mengikuti upstream commit 1612b88: izinkan HTML sumber, wajibkan enable_local_fetch untuk file lokal lain, resolve jalur permintaan, lalu batasi ke direktori dokumen. Tingkatkan ke 2.118.1 atau lebih baru, jangan menyalin cuplikan fokus ini. Penanganan terpisah untuk data:, about:, dan blob: berada di luar aturan file lokal.
Cuplikan sumber: docling/backend/html_backend.py — cuplikan kebijakan permintaan dan rendering
# Jalur render terdampak: file: diizinkan sebelum pemeriksaan kebijakan pengambilan lokal.
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)
# Di _get_browser_request_block_reason():
if scheme == "file":
if self._is_allowed_browser_file_request(request_url):
return None
# Jika tidak, kembalikan alasan permintaan diblokir.
Daftar Periksa Penguatan Sistem Rekayasa
- ✓Tingkatkan instalasi
doclingdandocling-slimke 2.118.1 atau lebih baru; verifikasi paket yang dipakai layanan Python aktif, bukan hanya lingkungan pengembangan. - ✓Cari integrasi Python yang menggunakan
HTMLBackendOptions(render_page=True)dan periksa apakah Playwright terpasang; menurut advisori CLI, docling-serve, mode default, dan input stream tidak terdampak. - ✓Sebelum upgrade, jangan render HTML tidak tepercaya dengan
render_page=True; bila kompatibel, berikan dokumen sebagai stream, bukan filesystemPath. - ✓Jalankan konversi dengan identitas berhak minimum dan akses sistem file minimal; jangan mount rahasia aplikasi ke proses yang memproses dokumen tidak tepercaya.
- ✓Biarkan
enable_local_fetchnonaktif untuk input tidak tepercaya dan pastikan callback yang diperbaiki membatasi sumber file yang diizinkan ke direktori sumber. - ✓Tambahkan regression test untuk dokumen sumber, file lokal di luar direktori saat fetch lokal nonaktif, dan file di dalam direktori saat fetch aktif; pastikan permintaan diblokir atau diizinkan sesuai harapan.
- ✓Pisahkan isu ini dari
CVE-2026-105751: kebocoran tersebut berada di backend OpenDocument Format Docling dan memiliki perbaikan terpisah pada 2.120.3. Lihat artikel terkait di referensi. - ✓Jika layanan terdampak memproses HTML tidak tepercaya, nilai teks yang mungkin terlihat di viewport hasil render dan ikuti proses respons organisasi terhadap paparan rahasia.