Skip to main content

docTR CVE-2026-112304

| EUVDEUVD-2026-104396 HIGH
Deserialization of Untrusted Data (CWE-502)
2026-10-19 VulnCheck GHSA-rh68-f334-2256
7.7
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Host malicious checkpoint at attacker-controlled URL
  2. Delivery
    Victim calls load_pretrained_params() on it
  3. Exploit
    torch.load unpickles crafted payload
  4. Execution
    Execute arbitrary Python code
  5. Impact
    Compromise host under loader's privileges

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A08:2025 - Software or Data Integrity Failures
ASVS 5.0
V1 - Encoding and Sanitization Safe deserialization, type allowlists
MITRE ATT&CK

2 techniques across 2 tactics: Execution, Initial Access

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires that (1) the victim application calls docTR's load_pretrained_params() on a checkpoint whose path or URL is attacker-controlled or attacker-tamperable, and (2) the environment runs a PyTorch release before 2.6, since torch 2.6+ defaults torch.load to weights_only=True and blocks arbitrary pickle execution. Key limiting factors: it is not self-triggering - a user/process must actively load the malicious checkpoint (UI:P), and deployments already on torch ≥2.6 or on patched docTR (post-commit 687503d) are not exploitable even against untrusted checkpoints. No authentication bypass is involved; the attacker's leverage is supplying the poisoned model artifact.

Impact

This is a genuine but conditionally-gated code-execution flaw rather than a drop-everything emergency. The CWE-502 pickle deserialization pattern (torch.load without weights_only=True) is a well-understood, reliable RCE primitive, and the fix is confirmed by the vendor commit (687503d) adding weights_only=True. However, multiple signals temper the real-world risk: the vendor-provided CVSS 4.0 vector carries AT:P (a specific attack requirement) and UI:P (passive user interaction), meaning exploitation depends on the victim loading an attacker-controlled checkpoint AND on running torch before 2.6 - torch 2.6+ already defaults to weights_only=True, which neutralizes the bug regardless of docTR version. No KEV listing and no EPSS score are present in the input, and no public exploit or POC is referenced (only the VulnCheck advisory and the upstream issue/patch), so there is no evidence of active exploitation or weaponization. The AV:N label reflects that the malicious checkpoint can be URL-supplied, but this is not a classic unauthenticated remote-service exploit - the attacker must get a victim to point docTR at a poisoned checkpoint. Net: a legitimately high-severity, patch-now issue for anyone loading untrusted models on older torch, but not a wormable internet-facing threat.

Exploit ScenarioDerived

An attacker publishes or links a malicious docTR model checkpoint (e.g. on a model hub, via a tampered download URL, or a shared file) containing a crafted pickle payload. A victim running docTR ≤1.1.0 on torch <2.6 calls load_pretrained_params() against that checkpoint, and torch.load deserializes the pickle, executing the attacker's Python code with the privileges of the loading process. No public POC is referenced, but the technique is standard and trivially reproducible.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 19, 2026

Arbitrary Python code execution in docTR through 1.1.0 is possible when load_pretrained_params() deserializes an attacker-controlled or tamperable checkpoint on PyTorch releases before 2.6. Unauthenticated attackers can supply the poisoned model artifact, but exploitation is conditionally gated: the victim application must load that checkpoint from a path or URL the attacker controls, and PyTorch must predate 2.6, where torch.load began defaulting to weights_only=True. No public exploit code or CISA KEV entry was identified at time of analysis, and this is a genuine but conditionally-gated code-execution flaw rather than a drop-everything emergency.

RemediationAI

Apply the vendor fix commit 687503dd15592483c4699ee51280b41938579a9e or upgrade to a docTR release that includes it; the exact released patched version is not specified in the provided data, so upstream fix availability is confirmed via commit/PR while a tagged release is not independently confirmed. The commit changes torch.load(..., weights_only=True), so patched docTR blocks pickle-based payload execution even against a malicious checkpoint. Also upgrade PyTorch to 2.6 or later, where weights_only=True is the default, or explicitly pass weights_only=True on any remaining torch.load calls; note that weights_only=True can reject checkpoints containing non-tensor Python objects, so re-save models as plain state_dicts or safetensors if compatibility breaks. Where patching is not immediately possible, avoid loading checkpoints from untrusted or user-supplied paths and URLs, verify checkpoint checksums/signatures, and restrict outbound network access to approved model sources; these controls reduce exposure but do not fully remove the deserialization risk if an attacker can still influence the checkpoint. Advisory: https://www.vulncheck.com/advisories/doctr-through-1.1.0-unsafe-deserialization-rce-via-load-pretrained-params and issue https://github.com/mindee/doctr/issues/2175.

Affected VersionsENISA

docTR 0 ≤1.1.0

Affected Packages

euvd doctr no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The issue is CWE-502 unsafe deserialization in docTR's model-loading utility, load_pretrained_params() in doctr/models/utils/pytorch.py. That function calls torch.load(archive_path, map_location='cpu') without weights_only=True, so on PyTorch releases before 2.6 the checkpoint is unpickled with full pickle semantics; a malicious checkpoint can embed pickle opcodes that invoke arbitrary Python callables when loaded, executing with the privileges of the docTR process. The CPE cpe:2.3:a:mindee:doctr:*:*:*:*:*:*:*:* identifies Mindee docTR as the affected product, and the vendor fix commit 687503dd15592483c4699ee51280b41938579a9e adds weights_only=True to that torch.load call. The vulnerability is not self-triggering: it requires the application to load a checkpoint whose path or URL is attacker-controlled or attacker-tamperable, and it is neutralized on PyTorch 2.6+ or on docTR builds containing the fix.

Know when Doctr gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (VulnCheck) PRIMARY 7.7 HIGH
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
vuln.today AI 7.5 HIGH

AV:N since checkpoints can be URL-supplied, UI:R because the victim must load the malicious checkpoint, AC:H as exploitation is gated on torch <2.6; full C/I/A impact from arbitrary code execution.

3.1 AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
Passive
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

docTR through 1.1.0 contains an unsafe deserialization vulnerability in load_pretrained_params() that loads checkpoints with torch.load without weights_only=True. Attackers who control a local or URL-supplied checkpoint can embed a malicious pickle payload to execute Python code with the loading process's privileges on torch releases before 2.6.

Executive ViewAI

Why It Matters

docTR through 1.1.0 can execute arbitrary Python code when it deserializes a tampered model checkpoint on PyTorch releases before 2.6, affecting any team that runs OCR or document-processing pipelines built on this stack. Exposure is concentrated in environments that fetch pretrained models from external URLs or user-writable paths, since the attacker must first get the victim application to load their checkpoint; locked-down deployments that only load internally vetted artifacts face materially lower risk. Leadership should track this as a scheduled remediation item rather than an emergency: no public exploit code or CISA KEV entry was identified at time of analysis, and a vendor patch is available.

Business Impact: Medium
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.3%
Top 80% exploitable
Prevalence
Low
niche open-source OCR/deep-learning library, limited production footprint
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
Medium

Priority Score

38
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +38
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Insecure deserialization occurs when an application converts serialized data (a stream of bytes representing an object's state) back into a living object without proper validation.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy