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.
What is the risk?
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.
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 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.
How is it classified?
Which compliance frameworks are affected?
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.24%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0010.001 AI Software AML.T0016.001 Software Tools AML.T0049 Exploit Public-Facing Application Compliance Controls Affected
What are the technical details?
Original Advisory
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)
CWE-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: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