CVE-2020-26267: TensorFlow: OOB read in DataFormatVecPermute op
HIGH PoC AVAILABLETensorFlow's DataFormatVecPermute raw op fails to validate format string inputs, enabling out-of-bounds memory reads, potential memory disclosure, and process crashes. Patch immediately to TF 1.15.5, 2.0.4, 2.1.3, 2.2.2, 2.3.2, or 2.4.0 — any shared training infrastructure or multi-tenant ML platform running older versions is exposed to local privilege abuse. If immediate patching is not possible, restrict access to raw_ops APIs and audit who can submit training jobs.
Risk Assessment
CVSS 7.8 High with local attack vector and low privilege requirement. In isolated single-user environments the risk is contained, but shared ML training clusters (common in enterprise MLOps platforms) significantly elevate exposure — any tenant able to submit a TF job can trigger the bug. The combination of uninitialized memory access and OOB reads creates potential for information disclosure beyond just DoS. EPSS data unavailable for this older CVE but the low exploitation complexity makes it accessible to non-expert attackers with local access.
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 TensorFlow to 1.15.5, 2.0.4, 2.1.3, 2.2.2, 2.3.2, or 2.4.0 — no workaround is viable for production.
-
INVENTORY
Identify all TF instances via 'pip show tensorflow' or 'conda list tensorflow' across training nodes, Jupyter servers, CI/CD pipelines, and model serving endpoints.
-
ISOLATE
On multi-tenant ML platforms, enforce per-user sandboxing (containers/VMs) to limit blast radius until patched.
-
DETECT
Monitor for abnormal TF process crashes (SIGABRT, SIGSEGV) in training logs — repeated crashes may indicate exploitation attempts.
-
VERIFY
After patching, confirm via 'import tensorflow as tf; print(tf.__version__)' that the patched version is active in all runtime environments.
Classification
Compliance Impact
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2020-26267?
TensorFlow's DataFormatVecPermute raw op fails to validate format string inputs, enabling out-of-bounds memory reads, potential memory disclosure, and process crashes. Patch immediately to TF 1.15.5, 2.0.4, 2.1.3, 2.2.2, 2.3.2, or 2.4.0 — any shared training infrastructure or multi-tenant ML platform running older versions is exposed to local privilege abuse. If immediate patching is not possible, restrict access to raw_ops APIs and audit who can submit training jobs.
Is CVE-2020-26267 actively exploited?
Proof-of-concept exploit code is publicly available for CVE-2020-26267, increasing the risk of exploitation.
How to fix CVE-2020-26267?
1. PATCH: Upgrade TensorFlow to 1.15.5, 2.0.4, 2.1.3, 2.2.2, 2.3.2, or 2.4.0 — no workaround is viable for production. 2. INVENTORY: Identify all TF instances via 'pip show tensorflow' or 'conda list tensorflow' across training nodes, Jupyter servers, CI/CD pipelines, and model serving endpoints. 3. ISOLATE: On multi-tenant ML platforms, enforce per-user sandboxing (containers/VMs) to limit blast radius until patched. 4. DETECT: Monitor for abnormal TF process crashes (SIGABRT, SIGSEGV) in training logs — repeated crashes may indicate exploitation attempts. 5. VERIFY: After patching, confirm via 'import tensorflow as tf; print(tf.__version__)' that the patched version is active in all runtime environments.
What systems are affected by CVE-2020-26267?
This vulnerability affects the following AI/ML architecture patterns: training pipelines, model serving, shared ML platforms.
What is the CVSS score for CVE-2020-26267?
CVE-2020-26267 has a CVSS v3.1 base score of 7.8 (HIGH). The EPSS exploitation probability is 0.02%.
Technical Details
NVD Description
In affected versions of TensorFlow the tf.raw_ops.DataFormatVecPermute API does not validate the src_format and dst_format attributes. The code assumes that these two arguments define a permutation of NHWC. This can result in uninitialized memory accesses, read outside of bounds and even crashes. 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 access to a shared Kubeflow or SageMaker training cluster submits a malicious training job that invokes tf.raw_ops.DataFormatVecPermute with crafted src_format and dst_format strings that do not represent valid NHWC permutations. The unvalidated inputs cause TensorFlow to perform out-of-bounds reads on adjacent memory, potentially exposing training data, model weights, or environment variables from co-located jobs. In a denial-of-service variant, the adversary repeatedly triggers crashes to disrupt competing training runs or delay production model deployments. No special ML knowledge is required — the exploit is a simple API call with invalid string parameters.
Weaknesses (CWE)
CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H References
- github.com/tensorflow/tensorflow/commit/ebc70b7a592420d3d2f359e4b1694c236b82c7ae Patch 3rd Party
- github.com/tensorflow/tensorflow/security/advisories/GHSA-c9f3-9wfr-wgh7 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