CVE-2022-29191: TensorFlow: DoS via GetSessionTensor input validation
MEDIUM PoC AVAILABLE CISA: TRACK*A low-privileged local user can crash TensorFlow processes by passing malformed arguments to GetSessionTensor, triggering an unhandled CHECK failure. Risk is highest in shared ML environments — Jupyter hubs, training clusters, or multi-tenant notebooks where untrusted users have local access. Patch immediately to TF 2.9.0, 2.8.1, 2.7.2, or 2.6.4; restrict local access to ML compute as a compensating control.
What is the risk?
Medium severity with constrained exploitability: attack is local-only (AV:L), requires only low privileges, and impact is limited to availability (no confidentiality or integrity loss). Real-world risk escalates significantly in multi-tenant ML platforms, shared research clusters, or containerized training environments where multiple users share the same TensorFlow process. Production inference APIs exposed only over network are not directly vulnerable. Not in CISA KEV; no evidence of active exploitation.
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 2.9.0, 2.8.1, 2.7.2, or 2.6.4 — all contain the fix (commit 48305e8).
-
If patching is delayed: restrict local user access to ML compute nodes via OS-level controls (user namespaces, seccomp, cgroups).
-
In multi-tenant environments, isolate TF workloads per user via separate containers or VMs.
-
Detection: monitor for unexpected TF process crashes or CHECK failure messages in logs (grep for 'Check failed' in TF stderr).
-
Audit usage of tf.raw_ops.GetSessionTensor in your codebase — this raw op is rarely needed in TF2-native code.
What does CISA's SSVC say?
Source: CISA Vulnrichment (SSVC v2.0). Decision based on the CISA Coordinator decision tree.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2022-29191?
A low-privileged local user can crash TensorFlow processes by passing malformed arguments to GetSessionTensor, triggering an unhandled CHECK failure. Risk is highest in shared ML environments — Jupyter hubs, training clusters, or multi-tenant notebooks where untrusted users have local access. Patch immediately to TF 2.9.0, 2.8.1, 2.7.2, or 2.6.4; restrict local access to ML compute as a compensating control.
Is CVE-2022-29191 actively exploited?
Proof-of-concept exploit code is publicly available for CVE-2022-29191, increasing the risk of exploitation.
How to fix CVE-2022-29191?
1. Patch: upgrade to TF 2.9.0, 2.8.1, 2.7.2, or 2.6.4 — all contain the fix (commit 48305e8). 2. If patching is delayed: restrict local user access to ML compute nodes via OS-level controls (user namespaces, seccomp, cgroups). 3. In multi-tenant environments, isolate TF workloads per user via separate containers or VMs. 4. Detection: monitor for unexpected TF process crashes or CHECK failure messages in logs (grep for 'Check failed' in TF stderr). 5. Audit usage of tf.raw_ops.GetSessionTensor in your codebase — this raw op is rarely needed in TF2-native code.
What systems are affected by CVE-2022-29191?
This vulnerability affects the following AI/ML architecture patterns: training pipelines, model serving, shared ML notebook environments.
What is the CVSS score for CVE-2022-29191?
CVE-2022-29191 has a CVSS v3.1 base score of 5.5 (MEDIUM). The EPSS exploitation probability is 0.35%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0010.001 AI Software AML.T0029 Denial of AI Service Compliance Controls Affected
What are the technical details?
Original Advisory
TensorFlow is an open source platform for machine learning. Prior to versions 2.9.0, 2.8.1, 2.7.2, and 2.6.4, the implementation of `tf.raw_ops.GetSessionTensor` does not fully validate the input arguments. This results in a `CHECK`-failure which can be used to trigger a denial of service attack. Versions 2.9.0, 2.8.1, 2.7.2, and 2.6.4 contain a patch for this issue.
Exploitation Scenario
An attacker with a low-privileged account on a shared GPU training server (e.g., a data scientist account on a shared Jupyter hub) imports TensorFlow and calls tf.raw_ops.GetSessionTensor with deliberately malformed or out-of-bounds input arguments. The missing input validation triggers an internal CHECK assertion failure, which TensorFlow converts to a fatal abort, crashing the entire TF process. If the victim is running a long training job in the same process or on the same shared server, the job is killed with no checkpoint recovery. In a multi-tenant notebook environment, this disrupts all users sharing that kernel or worker process.
Weaknesses (CWE)
CWE-20 — Improper Input Validation: The product receives input or data, but it does not validate or incorrectly validates that the input has the properties that are required to process the data safely and correctly.
- [Architecture and Design] Consider using language-theoretic security (LangSec) techniques that characterize inputs using a formal language and build "recognizers" for that language. This effectively requires parsing to be a distinct layer that effectively enforces a boundary between raw input and internal data representations, instead of allowing parser code to be scattered throughout the program, where it could be subject to errors or inconsistencies that create weaknesses. [REF-1109] [REF-1110] [REF-1111]
- [Architecture and Design] Use an input validation framework such as Struts or the OWASP ESAPI Validation API. Note that using a framework does not automatically address all input validation problems; be mindful of weaknesses that could arise from misusing the framework itself (CWE-1173).
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H References
- github.com/tensorflow/tensorflow/blob/f3b9bf4c3c0597563b289c0512e98d4ce81f886e/tensorflow/core/kernels/session_ops.cc Exploit 3rd Party
- github.com/tensorflow/tensorflow/commit/48305e8ffe5246d67570b64096a96f8e315a7281 Patch 3rd Party
- github.com/tensorflow/tensorflow/releases/tag/v2.6.4 Release 3rd Party
- github.com/tensorflow/tensorflow/releases/tag/v2.7.2 Release 3rd Party
- github.com/tensorflow/tensorflow/releases/tag/v2.8.1 Release 3rd Party
- github.com/tensorflow/tensorflow/releases/tag/v2.9.0 Release 3rd Party
- github.com/tensorflow/tensorflow/security/advisories/GHSA-fv25-wrff-wf86 Exploit 3rd Party
- github.com/gclonly/im Exploit
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