All vulnerabilities
CVE-2026-47214GHSA-q29v-xc37-wh5mPYSEC-2026-2146

Docling: Unsafe URI and Path Handling in HTML Backend

docling-project doclingpipLibraries & packages
CVSS
7.1High
ExploitationNo known exploitationNot in CISA KEV, which does not prove it is unexploitedCISA KEV
Exploit odds (EPSS)0.37%Chance of exploitation activity in the next 30 days, higher than 30% of CVEs. Scored 23 Oct 2026FIRST EPSS
Fixed in2.94.0Fixed versionGitHub
Published26 Jun 2026Updated 19 Oct 2026CVE List

What fixes it

  • 2.94.0docling, pipGitHub
  • 2.94.0docling, PyPIOSVpip install "docling>=2.94.0"

A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.

Description

Impact

The HTML backend did not perform sufficient validation during resource handling:

  • Accepted file:// URIs enabling local file system access when enable_local_fetch=True
  • Path resolution allowed traversal outside intended directories via ../ sequences and absolute paths
  • Did not block internal network resources under enable_remote_fetch=True
  • HTTP redirects were not validated, potentially redirecting to unintended schemes
  • No resource limits for remote image downloads and data: URIs

Patches

Fixed in versions 2.91.0 (initial fixes) and 2.94.0 (additional improvements). The fixes implement:

  • Updated local path treatment: absolute files always blocked, relative paths require enable_local_fetch=True (default: False) and containment within configured base_path for path traversal protection
  • file:// scheme stripped & treated as local path (above)
  • IP address validation to prevent SSRF
  • HTTP redirect validation, connection and read timeouts
  • Size limit for both remote images (with streaming download) and base64-decoded data URIs

Workarounds

Keep both enable_local_fetch=False and enable_remote_fetch=False (defaults) when processing untrusted HTML documents.

References

Text from GitHub Advisory Database

Affected versions 53

  • docling, pip< 2.94.0GitHub
  • doclingaffected: < 2.94.0CVE List
  • docling, PyPIfrom first release, fixed in 2.94.0OSV
  • docling, PyPI0.1.0OSV
  • docling, PyPI0.1.1OSV
  • docling, PyPI0.1.2OSV
  • docling, PyPI0.2.0OSV
  • docling, PyPI0.3.0OSV
  • docling, PyPI0.3.1OSV
  • docling, PyPI0.4.0OSV
  • docling, PyPI1.0.0OSV
  • docling, PyPI1.0.1OSV
  • docling, PyPI1.0.2OSV
  • docling, PyPI1.1.0OSV
  • docling, PyPI1.1.1OSV
  • docling, PyPI1.1.2OSV
  • docling, PyPI1.10.0OSV
  • docling, PyPI1.11.0OSV
  • docling, PyPI1.12.0OSV
  • docling, PyPI1.12.1OSV
  • docling, PyPI1.12.2OSV
  • docling, PyPI1.13.0OSV
  • docling, PyPI1.13.1OSV
  • docling, PyPI1.14.0OSV
  • docling, PyPI1.15.0OSV
  • docling, PyPI1.16.0OSV
  • docling, PyPI1.16.1OSV
  • docling, PyPI1.17.0OSV
  • docling, PyPI1.18.0OSV
  • docling, PyPI1.19.0OSV
  • docling, PyPI1.19.1OSV
  • docling, PyPI1.2.0OSV
  • docling, PyPI1.2.1OSV
  • docling, PyPI1.20.0OSV
  • docling, PyPI1.3.0OSV
  • docling, PyPI1.4.0OSV
  • docling, PyPI1.5.0OSV
  • docling, PyPI1.6.0OSV
  • docling, PyPI1.6.1OSV
  • docling, PyPI1.6.2OSV
  • docling, PyPI1.6.3OSV
  • docling, PyPI1.7.0OSV
  • docling, PyPI1.7.1OSV
  • docling, PyPI1.8.0OSV
  • docling, PyPI1.8.1OSV
  • docling, PyPI1.8.2OSV
  • docling, PyPI1.8.3OSV
  • docling, PyPI1.8.4OSV
  • docling, PyPI1.8.5OSV
  • docling, PyPI1.9.0OSV
  • docling, PyPI2.0.0OSV
  • docling, PyPI2.1.0OSV
  • docling, PyPI2.10.0OSV

References 8