CVE-2022-23583: TensorFlow: SavedModel type confusion triggers DoS crash

MEDIUM PoC AVAILABLE CISA: TRACK*
Published February 4, 2022
CISO Take

A low-privileged attacker can crash TensorFlow inference services by supplying a malicious SavedModel with mismatched dtype fields, causing CHECK assertion failures. Any platform that loads externally-supplied or user-provided SavedModels is directly exposed. Patch to TF 2.8.0, 2.7.1, 2.6.3, or 2.5.3 immediately and restrict who can push models to your serving infrastructure.

What is the risk?

Medium operational risk. CVSS 6.5 understates the practical impact for multi-tenant ML platforms: low complexity, low privileges, and network delivery make this trivially weaponizable for service disruption. Confidentiality and integrity are unaffected, but availability impact is high for shared inference endpoints. Organizations running internal-only, air-gapped model serving with controlled model provenance face significantly lower exposure.

What systems are affected?

Package Ecosystem Vulnerable Range Patched
TensorFlow pip No patch
195.8K OpenSSF 7.1 3.7K dependents Pushed 2d ago 4% patched ~1372d to patch Full package profile →

Do you use TensorFlow? You're affected.

How severe is it?

CVSS 3.1
6.5 / 10
EPSS
0.8%
chance of exploitation in 30 days
Higher than 51% of all CVEs
Exploitation Status
Exploit Available
Exploitation: MEDIUM
Sophistication
Moderate
Exploitation Confidence
medium
CISA SSVC: Public PoC
Public PoC indexed (trickest/cve)
Composite signal derived from CISA KEV, VulnCheck KEV, CISA SSVC, EPSS, Metasploit, Exploit-DB, trickest/cve, Nuclei templates, and inthewild.io exploitation reports.

What is the attack surface?

AV AC PR UI S C I A
AV Network
AC Low
PR Low
UI None
S Unchanged
C None
I None
A High

What should I do?

6 steps
  1. Patch: upgrade to TensorFlow 2.8.0, or cherry-pick to 2.7.1, 2.6.3, or 2.5.3.

  2. Validate SavedModel integrity at ingestion: verify SHA-256 checksums and digital signatures before loading.

  3. Restrict model upload permissions — only allow trusted CI/CD pipelines or verified model registries to push SavedModels to serving infrastructure.

  4. Run model loading in isolated sandboxed processes with resource limits so a crash does not take down the entire inference service.

  5. Monitor for unexpected process exits or CHECK failure logs in TensorFlow serving logs as an indicator of exploitation attempts.

  6. Enforce protobuf schema validation on SavedModel files before deserialization.

What does CISA's SSVC say?

Decision Track*
Exploitation poc
Automatable No
Technical Impact partial

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:

EU AI Act
Article 15 - Accuracy, Robustness and Cybersecurity Article 9 - Risk Management System
ISO 42001
A.6.2 - AI System Design and Development — System Robustness A.9.3 - AI System Operation — Integrity of AI Inputs
NIST AI RMF
GOVERN 1.1 - AI Risk Policies and Accountability MANAGE 2.2 - Mechanisms to Sustain Value of Deployed AI Systems
OWASP LLM Top 10
LLM05:2025 - Improper Output Handling / Supply Chain Vulnerabilities

Frequently Asked Questions

What is CVE-2022-23583?

A low-privileged attacker can crash TensorFlow inference services by supplying a malicious SavedModel with mismatched dtype fields, causing CHECK assertion failures. Any platform that loads externally-supplied or user-provided SavedModels is directly exposed. Patch to TF 2.8.0, 2.7.1, 2.6.3, or 2.5.3 immediately and restrict who can push models to your serving infrastructure.

Is CVE-2022-23583 actively exploited?

Proof-of-concept exploit code is publicly available for CVE-2022-23583, increasing the risk of exploitation.

How to fix CVE-2022-23583?

1. Patch: upgrade to TensorFlow 2.8.0, or cherry-pick to 2.7.1, 2.6.3, or 2.5.3. 2. Validate SavedModel integrity at ingestion: verify SHA-256 checksums and digital signatures before loading. 3. Restrict model upload permissions — only allow trusted CI/CD pipelines or verified model registries to push SavedModels to serving infrastructure. 4. Run model loading in isolated sandboxed processes with resource limits so a crash does not take down the entire inference service. 5. Monitor for unexpected process exits or CHECK failure logs in TensorFlow serving logs as an indicator of exploitation attempts. 6. Enforce protobuf schema validation on SavedModel files before deserialization.

What systems are affected by CVE-2022-23583?

This vulnerability affects the following AI/ML architecture patterns: model serving, training pipelines, multi-tenant ML platforms, model registries, inference endpoints.

What is the CVSS score for CVE-2022-23583?

CVE-2022-23583 has a CVSS v3.1 base score of 6.5 (MEDIUM). The EPSS exploitation probability is 0.78%.

What is the AI security impact?

Affected AI Architectures

model servingtraining pipelinesmulti-tenant ML platformsmodel registriesinference endpoints

MITRE ATLAS Techniques

AML.T0010.003 Model
AML.T0011.000 Unsafe AI Artifacts
AML.T0018 Manipulate AI Model
AML.T0029 Denial of AI Service
AML.T0043.003 Manual Modification

Compliance Controls Affected

EU AI Act: Article 15, Article 9
ISO 42001: A.6.2, A.9.3
NIST AI RMF: GOVERN 1.1, MANAGE 2.2
OWASP LLM Top 10: LLM05:2025

What are the technical details?

Original Advisory

Tensorflow is an Open Source Machine Learning Framework. A malicious user can cause a denial of service by altering a `SavedModel` such that any binary op would trigger `CHECK` failures. This occurs when the protobuf part corresponding to the tensor arguments is modified such that the `dtype` no longer matches the `dtype` expected by the op. In that case, calling the templated binary operator for the binary op would receive corrupted data, due to the type confusion involved. If `Tin` and `Tout` don't match the type of data in `out` and `input_*` tensors then `flat<*>` would interpret it wrongly. In most cases, this would be a silent failure, but we have noticed scenarios where this results in a `CHECK` crash, hence a denial of service. The fix will be included in TensorFlow 2.8.0. We will also cherrypick this commit on TensorFlow 2.7.1, TensorFlow 2.6.3, and TensorFlow 2.5.3, as these are also affected and still in supported range.

Exploitation Scenario

An adversary with a low-privilege account on a shared ML platform (e.g., a researcher account on an internal Kubeflow or MLflow deployment) crafts a SavedModel where the protobuf tensor descriptors for a binary op have a deliberately mismatched dtype — e.g., declaring float32 but providing int32 data. They upload this model to the model registry. When the inference service loads and executes the model, the templated binary operator in cwise_ops_common.h receives corrupted type data, the flat<> accessor interprets memory with the wrong type, and TensorFlow triggers a CHECK failure that crashes the serving process. If the service lacks process isolation or auto-restart, all tenants on that inference endpoint experience a complete outage until an operator intervenes.

Weaknesses (CWE)

CWE-843 — Access of Resource Using Incompatible Type ('Type Confusion'): The product allocates or initializes a resource such as a pointer, object, or variable using one type, but it later accesses that resource using a type that is incompatible with the original type.

Source: MITRE CWE corpus.

CVSS Vector

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

Timeline

Published
February 4, 2022
Last Modified
November 21, 2024
First Seen
February 4, 2022

Related Vulnerabilities