CVE-2026-55093: tract-nnef: integer overflow enables heap OOB read, crash
MEDIUMCISA: TRACK*CVE-2026-55093 is an integer overflow in the Rust tract inference toolkit's NNEF loader: a crafted model archive makes the size check pass on a tiny allocation while the tensor is treated as a much larger slice, leaking adjacent heap memory and later crashing the process with a segfault. Exposure is limited by a local attack vector and required user interaction (the victim must load a malicious model), and there is no public exploit, no Nuclei template and no CISA KEV listing. EPSS is low in absolute terms (0.00181) though it sits in the top 93rd percentile, and CISA SSVC says TRACK*, so this is a watch item rather than an emergency. The practical risk is organizations that ingest third-party or user-uploaded NNEF models into edge or embedded inference services, where a crash means denial of service and a leak could expose adjacent memory. Upgrade tract-nnef to 0.21.16, 0.22.2 or 0.23.1, and until then only load NNEF archives from trusted, verified sources.
What is the risk?
Medium overall (CVSS 6.1). Exploitation needs a victim to load an attacker-crafted NNEF archive (local vector, user interaction required), with low complexity and no privileges. Impact is a limited confidentiality loss (heap over-read) and a high availability impact (segfault). No out-of-bounds write or code execution was demonstrated. No public exploit, no scanner template, not in KEV. EPSS of 0.00181 (top 93rd percentile) indicates low but non-trivial relative likelihood. Exposure rises in services that accept untrusted models automatically. Downstream dependent counts and package health are unknown.
How does the attack unfold?
How severe is it?
What is the attack surface?
What should I do?
1 step1) Upgrade tract-nnef/tract to 0.21.16, 0.22.2 or 0.23.1 (or later) and rebuild and redeploy affected binaries. 2) Use cargo tree or cargo audit and the GHSA-x5mv-8wgw-29hg advisory to find tract-nnef in your dependency graph, including transitive use. 3) Until patched, load NNEF archives only from trusted, integrity-verified sources (signatures or hashes) and reject user-supplied models. 4) Run model loading in a sandboxed, low-privilege process with memory and crash isolation, and use automatic restart for inference workers. 5) Monitor for unexpected segfaults or crash loops during model loading, and for model files with abnormally large declared tensor dimensions relative to file size.
What does CISA's SSVC say?
Source: CISA Vulnrichment (SSVC v2.0). Decision based on the CISA Coordinator decision tree.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-55093?
CVE-2026-55093 is an integer overflow in the Rust tract inference toolkit's NNEF loader: a crafted model archive makes the size check pass on a tiny allocation while the tensor is treated as a much larger slice, leaking adjacent heap memory and later crashing the process with a segfault. Exposure is limited by a local attack vector and required user interaction (the victim must load a malicious model), and there is no public exploit, no Nuclei template and no CISA KEV listing. EPSS is low in absolute terms (0.00181) though it sits in the top 93rd percentile, and CISA SSVC says TRACK*, so this is a watch item rather than an emergency. The practical risk is organizations that ingest third-party or user-uploaded NNEF models into edge or embedded inference services, where a crash means denial of service and a leak could expose adjacent memory. Upgrade tract-nnef to 0.21.16, 0.22.2 or 0.23.1, and until then only load NNEF archives from trusted, verified sources.
Is CVE-2026-55093 actively exploited?
No confirmed active exploitation of CVE-2026-55093 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-55093?
1) Upgrade tract-nnef/tract to 0.21.16, 0.22.2 or 0.23.1 (or later) and rebuild and redeploy affected binaries. 2) Use cargo tree or cargo audit and the GHSA-x5mv-8wgw-29hg advisory to find tract-nnef in your dependency graph, including transitive use. 3) Until patched, load NNEF archives only from trusted, integrity-verified sources (signatures or hashes) and reject user-supplied models. 4) Run model loading in a sandboxed, low-privilege process with memory and crash isolation, and use automatic restart for inference workers. 5) Monitor for unexpected segfaults or crash loops during model loading, and for model files with abnormally large declared tensor dimensions relative to file size.
What systems are affected by CVE-2026-55093?
This vulnerability affects the following AI/ML architecture patterns: edge inference, embedded ML, model serving, model loading pipelines, on-device inference.
What is the CVSS score for CVE-2026-55093?
CVE-2026-55093 has a CVSS v3.1 base score of 6.1 (MEDIUM). The EPSS exploitation probability is 0.18%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0010.003ModelAML.T0011.000Unsafe AI ArtifactsAML.T0029Denial of AI ServiceCompliance Controls Affected
What are the technical details?
Original Advisory
Tract is a tiny, no-nonsense, self-contained TensorFlow and ONNX inference toolkit. Prior to 0.21.16, 0.22.2, and 0.23.1, tract-nnef uses unchecked usize multiplication in nnef/src/tensors.rs read_tensor for attacker-controlled tensor dimensions, the allocation size, and the reported tensor length. Loading a crafted NNEF archive through model_for_path or model_for_read reaches the default DatLoader and can make the wrapped size check accept a small allocation while data/src/tensor.rs as_slice_unchecked creates a much larger logical slice. Model construction through as_uniform can then read beyond the heap allocation and disclose adjacent data, and later access can terminate the process with a segmentation fault. The affected dense numeric tensor path does not include the independently guarded bool, String, or block-quant paths, and no out-of-bounds write or code execution was demonstrated. This issue is fixed in versions 0.21.16, 0.22.2, and 0.23.1.
Exploitation Scenario
An attacker publishes or uploads a crafted NNEF archive whose tensor dimensions are chosen so the usize multiplication wraps, producing a small allocation but a very large logical length. A developer or an automated pipeline loads the model with model_for_path or model_for_read. During model construction, as_uniform reads past the heap buffer and exposes adjacent memory, which may land in logs, outputs or later model state. Subsequent access to the oversized slice triggers a segmentation fault that kills the inference process, causing denial of service on an edge device or model-serving worker.
Weaknesses (CWE)
CWE-125Out-of-bounds ReadPrimaryCWE-190Integer Overflow or WraparoundPrimaryCWE-125Out-of-bounds ReadCWE-190Integer Overflow or WraparoundCWE-125 — Out-of-bounds Read: The product reads data past the end, or before the beginning, of the intended buffer.
- [Implementation] Assume all input is malicious. Use an "accept known good" input validation strategy, i.e., use a list of acceptable inputs that strictly conform to specifications. Reject any input that does not strictly conform to specifications, or transform it into something that does. When performing input validation, consider all potentially relevant properties, including length, type of input, the full range of acceptable values, missing or extra inputs, syntax, consistency across related fields, and conformance to business rules. As an example of business rule logic, "boat" may be syntactically valid because it only contains alphanumeric characters, but it is not valid if the input is only expected to contain colors such as "red" or "blue." Do not rely exclusively on looking for malicious or malformed inputs. This is likely to miss at least one undesirable input, especially if the code's environment changes. This can give attackers enough room to bypass the intended validation. However, denylis
- [Architecture and Design] Use a language that provides appropriate memory abstractions.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:HReferences
- github.com/sonos/tract/commit/34c7df2c9bd2a36583e09b52f3e6319bf23102e8
- github.com/sonos/tract/commit/828ec20f74c14c0923c7d7f0cff062ed222d630a
- github.com/sonos/tract/commit/ee5f019d39fb97f7d4431b883c3ce97b74c28a64
- github.com/sonos/tract/releases/tag/0.21.16
- github.com/sonos/tract/releases/tag/0.22.2
- github.com/sonos/tract/releases/tag/v0.23.1
- github.com/sonos/tract/security/advisories/GHSA-x5mv-8wgw-29hg
Timeline
Related Vulnerabilities
CVE-2024-291210.0BentoML: RCE via insecure deserialization (CVSS 10)
Same attack type: Supply ChainCVE-2025-5952810.0Flowise: Unauthenticated RCE via MCP config injection
Same attack type: Supply ChainCVE-2023-376510.0MLflow: path traversal allows arbitrary file read
Same attack type: Data LeakageCVE-2025-512010.0smolagents: sandbox escape enables unauthenticated RCE
Same attack type: Data LeakageGHSA-vvpj-8cmc-gx3910.0picklescan: security flaw enables exploitation
Same attack type: Supply Chain