← Back to results
Vulnerability record · public intelligence
CVE-2026-105744
HIGH

Docling has arbitrary file read/write (and command execution when shell-escape is enabled) when rendering untrusted TikZ with the opt-in Tectonic engine

Published Oct 5, 2026 · Updated Nov 3, 2026

Severity · CVSSHIGH · Not scored
Known exploitationNot listed
EPSS / likelihood0.37%
QFinch risk scoreNot available

Original summary

Normalized public record · Updated Nov 3, 2026

Docling has arbitrary file read/write (and command execution when shell-escape is enabled) when rendering untrusted TikZ with the opt-in Tectonic engine

Publisher and source text is retained separately from QFinch interpretation.

QFinch assessment

When the LaTeX backend is configured to render TikZ pictures with the Tectonic engine (LatexBackendOptions(tikzengine="tectonic")), the TikZ body and the document preamble from the input file are compiled by Tectonic without any restriction on TeX's file primitives. A crafted .tex file can read files the process can read and write files at paths the process can write. If the caller also sets tikzengineallowshellescape=True, the document can run shell commands through \write18.

Potential impact

Disclosure of local files readable by the process, and creation or overwrite of files writable by the process. Writing to startup or configuration files can lead to code execution. With shell escape enabled, commands run directly.

Technical context

docling/backend/latex/engines/tectonic.py writes the picture source into a temporary document and runs the tectonic binary on it. resolvelocaldependency only decides which files are staged into the temporary directory. It does not limit what TeX opens at compile time, so: - \input{/abs/path}, \verbatiminput{...} and \openin read arbitrary files, and their content can be typeset into the rendered picture that ends up in the conversion output. For an in-memory DocumentStream, staging is skipped entirely. - \immediate\openout / \write create or overwrite files outside the temporary directory. Neither needs shell escape. Tectonic's --untrusted flag does not block them either. Separately, the TectonicEngine constructor defaults to allowshellescape=True. The LaTeX backend always passes tikzengineallowshellescape explicitly (default False), so this default only affects code that instantiates TectonicEngine directly.

Evidence: public source records

Affected products

Affected scope reported by the available public evidence
Affected package, product or rangeFix status
Consult the referenced vendor advisory for affected versions.Consult source advisory

Matching a version is only one part of assessing exposure. QFinch has not assessed your environment on this public page.

Remediation

Apply the vendor-supported fixed release or mitigation, then verify the affected component is no longer reachable.

  1. Confirm the affected product and reachable code path exist in your environment.
  2. Apply the vendor-supported patch or mitigation from the primary advisory.
  3. Rescan the exact deployed revision and retain verification evidence.
Review primary references

Evidence coverage

FIRST-EPSSCVE-LIST-V5
SSVC priority
MEDIUM
Confidence
Not available
Aliases
None reported

Scores appear only when corresponding evidence exists. Missing data is never interpreted as zero risk.

Sources and record history

  1. Security advisory ↗
  2. Source repository ↗
  3. Patch commit ↗
  4. Source repository ↗

Record history

Published Oct 5, 2026 · Last refreshed Nov 3, 2026