CVE-2021-29574: TensorFlow: null ptr deref in MaxPool3DGradGrad ops
HIGH PoC AVAILABLEAny TensorFlow deployment running versions below 2.5.0 (or un-backpatched 2.1.x–2.4.x) that exposes 3D pooling gradient operations is vulnerable to process crashes or potential code execution via crafted empty tensors. Patch immediately to TF 2.5.0+ or the applicable backport; no known workaround exists for the raw op. Audit model-serving endpoints that accept user-controlled tensor inputs — these are your highest-risk exposure.
Risk Assessment
CVSS 7.8 with local attack vector understates real-world risk in ML serving contexts. When TensorFlow model-serving APIs (TF Serving, FastAPI wrappers, custom gRPC endpoints) accept arbitrary operator inputs, the 'local' constraint effectively becomes remote. Low complexity and no user interaction required makes this trivially exploitable once access is achieved. No CISA KEV listing and 2021 vintage reduce urgency, but unpatched TF instances remain common in research and production ML pipelines.
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 TensorFlow 2.5.0, or apply backports to 2.4.2 / 2.3.3 / 2.2.3 / 2.1.4 per GHSA-828x-qc2p-wprq.
-
Input validation: Add pre-execution tensor shape validation — reject any tensor with zero-sized dimensions before passing to pooling gradient ops.
-
Sandbox: Run TF Serving processes under seccomp/AppArmor profiles to limit blast radius of crashes.
-
Monitoring: Alert on abrupt TF Serving process restarts or SIGSEGV signals in model-serving pods.
-
Inventory: Identify all internal deployments using TF 2.1–2.4 via dependency scanning (pip-audit, Trivy for containers).
Classification
Compliance Impact
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2021-29574?
Any TensorFlow deployment running versions below 2.5.0 (or un-backpatched 2.1.x–2.4.x) that exposes 3D pooling gradient operations is vulnerable to process crashes or potential code execution via crafted empty tensors. Patch immediately to TF 2.5.0+ or the applicable backport; no known workaround exists for the raw op. Audit model-serving endpoints that accept user-controlled tensor inputs — these are your highest-risk exposure.
Is CVE-2021-29574 actively exploited?
Proof-of-concept exploit code is publicly available for CVE-2021-29574, increasing the risk of exploitation.
How to fix CVE-2021-29574?
1. Patch: Upgrade to TensorFlow 2.5.0, or apply backports to 2.4.2 / 2.3.3 / 2.2.3 / 2.1.4 per GHSA-828x-qc2p-wprq. 2. Input validation: Add pre-execution tensor shape validation — reject any tensor with zero-sized dimensions before passing to pooling gradient ops. 3. Sandbox: Run TF Serving processes under seccomp/AppArmor profiles to limit blast radius of crashes. 4. Monitoring: Alert on abrupt TF Serving process restarts or SIGSEGV signals in model-serving pods. 5. Inventory: Identify all internal deployments using TF 2.1–2.4 via dependency scanning (pip-audit, Trivy for containers).
What systems are affected by CVE-2021-29574?
This vulnerability affects the following AI/ML architecture patterns: model serving, training pipelines, inference endpoints.
What is the CVSS score for CVE-2021-29574?
CVE-2021-29574 has a CVSS v3.1 base score of 7.8 (HIGH). The EPSS exploitation probability is 0.01%.
Technical Details
NVD Description
TensorFlow is an end-to-end open source platform for machine learning. The implementation of `tf.raw_ops.MaxPool3DGradGrad` exhibits undefined behavior by dereferencing null pointers backing attacker-supplied empty tensors. The implementation(https://github.com/tensorflow/tensorflow/blob/72fe792967e7fd25234342068806707bbc116618/tensorflow/core/kernels/pooling_ops_3d.cc#L679-L703) fails to validate that the 3 tensor inputs are not empty. If any of them is empty, then accessing the elements in the tensor results in dereferencing a null pointer. The fix will be included in TensorFlow 2.5.0. We will also cherrypick this commit on TensorFlow 2.4.2, TensorFlow 2.3.3, TensorFlow 2.2.3 and TensorFlow 2.1.4, as these are also affected and still in supported range.
Exploitation Scenario
An adversary with access to a model-serving API (internal user, compromised service account, or attacker who pivoted to the ML cluster) crafts an inference request that routes through a model containing a MaxPool3DGradGrad layer. They submit a payload with one or more empty tensors (shape [0, x, x, x, x]). TensorFlow dereferences the null data pointer when accessing tensor elements, causing the serving process to crash. In a containerized environment without restart policies, this takes the model offline. A sophisticated attacker may chain this with heap manipulation techniques on specific kernel/allocator combos for controlled code execution within the serving pod.
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/a3d9f9be9ac2296615644061b40cefcee341dcc4 Patch 3rd Party
- github.com/tensorflow/tensorflow/security/advisories/GHSA-828x-qc2p-wprq 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