CVE-2020-26266: TensorFlow: uninitialized memory read via crafted SavedModel
MEDIUM PoC AVAILABLEUpgrade TensorFlow to patched releases (1.15.5 / 2.0.4 / 2.1.3 / 2.2.2 / 2.3.2 / 2.4.0) immediately and treat every SavedModel file as executable code requiring cryptographic provenance verification before loading. Environments serving externally-sourced or quantized models carry the highest exposure—prioritize those for patching and sandbox isolation. Not actively exploited, but the low-complexity local attack vector makes this a credible supply chain or insider threat.
What is the risk?
Medium severity in isolation (CVSS 5.3, AV:L/AC:L/PR:L), but risk escalates sharply in model-serving pipelines that ingest externally-sourced SavedModels. The low attack complexity (no special conditions) and absence of user interaction lower the barrier for exploitation post-access. No evidence of active exploitation and not in CISA KEV, but quantized model deployments—common in edge and mobile scenarios—expand the affected surface beyond typical server-side TF installations.
What systems are affected?
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| TensorFlow | pip | — | No patch |
Do you use TensorFlow? You're affected.
How severe is it?
What is the attack surface?
What should I do?
5 steps-
Patch: Upgrade to TF 1.15.5, 2.0.4, 2.1.3, 2.2.2, 2.3.2, or 2.4.0. Run SCA/SBOM tooling to surface all TF versions across your environment.
-
Model provenance: Enforce cryptographic signing and hash verification of all SavedModel artifacts before loading—treat model files as code, not data.
-
Sandbox inference: Load untrusted models inside isolated containers with seccomp/AppArmor profiles; restrict heap-dump capabilities to limit disclosure impact.
-
Least privilege: Ensure model-serving processes run under low-privilege service accounts to contain post-exploitation lateral movement.
-
Detect: Alert on anomalous memory usage spikes in TF serving processes; flag unverified model loads in CI/CD and model registry audit logs.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2020-26266?
Upgrade TensorFlow to patched releases (1.15.5 / 2.0.4 / 2.1.3 / 2.2.2 / 2.3.2 / 2.4.0) immediately and treat every SavedModel file as executable code requiring cryptographic provenance verification before loading. Environments serving externally-sourced or quantized models carry the highest exposure—prioritize those for patching and sandbox isolation. Not actively exploited, but the low-complexity local attack vector makes this a credible supply chain or insider threat.
Is CVE-2020-26266 actively exploited?
Proof-of-concept exploit code is publicly available for CVE-2020-26266, increasing the risk of exploitation.
How to fix CVE-2020-26266?
1. Patch: Upgrade to TF 1.15.5, 2.0.4, 2.1.3, 2.2.2, 2.3.2, or 2.4.0. Run SCA/SBOM tooling to surface all TF versions across your environment. 2. Model provenance: Enforce cryptographic signing and hash verification of all SavedModel artifacts before loading—treat model files as code, not data. 3. Sandbox inference: Load untrusted models inside isolated containers with seccomp/AppArmor profiles; restrict heap-dump capabilities to limit disclosure impact. 4. Least privilege: Ensure model-serving processes run under low-privilege service accounts to contain post-exploitation lateral movement. 5. Detect: Alert on anomalous memory usage spikes in TF serving processes; flag unverified model loads in CI/CD and model registry audit logs.
What systems are affected by CVE-2020-26266?
This vulnerability affects the following AI/ML architecture patterns: model serving, training pipelines, MLOps/CI-CD model registries, edge inference (quantized/TFLite).
What is the CVSS score for CVE-2020-26266?
CVE-2020-26266 has a CVSS v3.1 base score of 5.3 (MEDIUM). The EPSS exploitation probability is 0.24%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0010.001 AI Software AML.T0010.003 Model AML.T0011.000 Unsafe AI Artifacts AML.T0018.002 Embed Malware Compliance Controls Affected
What are the technical details?
Original Advisory
In affected versions of TensorFlow under certain cases a saved model can trigger use of uninitialized values during code execution. This is caused by having tensor buffers be filled with the default value of the type but forgetting to default initialize the quantized floating point types in Eigen. This is fixed in versions 1.15.5, 2.0.4, 2.1.3, 2.2.2, 2.3.2, and 2.4.0.
Exploitation Scenario
An adversary with write access to a shared model registry (compromised CI/CD credentials, malicious insider, or dependency confusion attack) replaces a legitimate quantized TensorFlow SavedModel with a crafted variant. When the ML serving infrastructure pulls and loads this model for inference, Eigen's uninitialized quantized floating-point buffers are accessed, causing the runtime to read stale heap contents. Depending on heap layout at the time of load, this leaks fragments of previously processed tensor data—potentially including inference inputs from other tenants in a multi-tenant serving environment—without triggering explicit errors or alerting on-call teams.
Weaknesses (CWE)
CWE-908 — Use of Uninitialized Resource: The product uses or accesses a resource that has not been initialized.
- [Implementation] Explicitly initialize the resource before use. If this is performed through an API function or standard procedure, follow all required steps.
- [Implementation] Pay close attention to complex conditionals that affect initialization, since some branches might not perform the initialization.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L References
- github.com/tensorflow/tensorflow/commit/ace0c15a22f7f054abcc1f53eabbcb0a1239a9e2 Patch 3rd Party
- github.com/tensorflow/tensorflow/security/advisories/GHSA-qhxx-j73r-qpm2 Exploit Patch 3rd Party
Timeline
Related Vulnerabilities
CVE-2020-15196 9.9 TensorFlow: heap OOB read in sparse/ragged count ops
Same package: tensorflow CVE-2020-15205 9.8 TensorFlow: heap overflow in StringNGrams, ASLR bypass
Same package: tensorflow CVE-2020-15208 9.8 TFLite: OOB read/write via tensor dimension mismatch
Same package: tensorflow CVE-2019-16778 9.8 TensorFlow: heap overflow in UnsortedSegmentSum op
Same package: tensorflow CVE-2022-23587 9.8 TensorFlow: integer overflow in Grappler enables RCE
Same package: tensorflow