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.
Risk Assessment
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.
Affected Systems
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| tensorflow | pip | — | No patch |
Do you use tensorflow? You're affected.
Severity & Risk
Attack Surface
Recommended Action
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.
Classification
Compliance Impact
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.05%.
Technical Details
NVD Description
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)
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
AI Threat Alert