CVE-2023-33976 Overview
TensorFlow, Google's widely-used end-to-end open source platform for machine learning, contains a vulnerability in the array_ops.upper_bound function that causes a segmentation fault when not provided with a rank 2 tensor. This denial of service vulnerability can be triggered remotely by an attacker who can influence the input tensors to this function, potentially crashing TensorFlow-based applications and services.
Critical Impact
Attackers can remotely trigger a segmentation fault in TensorFlow applications by providing malformed tensor inputs to the array_ops.upper_bound function, causing application crashes and denial of service.
Affected Products
- Google TensorFlow (versions prior to 2.13)
- Google TensorFlow 2.12 (prior to the security patch)
Discovery Timeline
- 2024-07-30 - CVE CVE-2023-33976 published to NVD
- 2024-11-21 - Last updated in NVD database
Technical Details for CVE-2023-33976
Vulnerability Analysis
This vulnerability is classified under CWE-190 (Integer Overflow or Wraparound), though the immediate impact manifests as a segmentation fault when the array_ops.upper_bound function receives tensor input that does not conform to the expected rank 2 structure. The function fails to properly validate the tensor dimensions before processing, leading to memory access violations.
The vulnerability is exploitable over the network without requiring authentication or user interaction. An attacker who can control or influence input data to a TensorFlow model or application could craft malicious tensor data designed to trigger this condition. The impact is primarily availability-focused, as successful exploitation results in a complete crash of the affected TensorFlow process.
Root Cause
The root cause of this vulnerability lies in insufficient input validation within the array_ops.upper_bound function. The function assumes it will receive a properly formatted rank 2 tensor but does not verify this assumption before attempting to process the input. When a tensor of incorrect rank is provided, the function attempts to access memory regions based on invalid dimensional calculations, resulting in a segmentation fault.
Attack Vector
The attack can be executed remotely through network-accessible TensorFlow services. An attacker would craft input data containing a tensor that does not meet the rank 2 requirement expected by array_ops.upper_bound. When this malformed input is processed by a TensorFlow application utilizing this function, the application will crash due to the segmentation fault.
This attack requires no authentication and no user interaction, making it particularly dangerous for exposed TensorFlow inference endpoints or data processing pipelines. The vulnerability allows an attacker to cause a denial of service condition by repeatedly sending malformed requests.
Detection Methods for CVE-2023-33976
Indicators of Compromise
- Unexpected TensorFlow process crashes or restarts in production environments
- Segmentation fault errors in application logs associated with array_ops.upper_bound calls
- Increased error rates in TensorFlow inference services correlating with specific input patterns
- Core dumps indicating memory access violations in TensorFlow tensor operations
Detection Strategies
- Monitor application logs for segmentation fault signals (SIGSEGV) in TensorFlow processes
- Implement input validation layers that verify tensor rank before passing data to array_ops.upper_bound
- Deploy anomaly detection on TensorFlow service endpoints to identify unusual input patterns
- Configure process monitoring to alert on unexpected TensorFlow service restarts
Monitoring Recommendations
- Set up alerting for TensorFlow process crashes with automatic restart detection
- Monitor memory-related error messages in TensorFlow application logs
- Track tensor dimension mismatches in preprocessing pipelines
- Implement health checks that verify TensorFlow service stability under load
How to Mitigate CVE-2023-33976
Immediate Actions Required
- Upgrade TensorFlow to version 2.13 or later, which includes the fix for this vulnerability
- For TensorFlow 2.12 users, apply the security patches containing the cherry-picked commits
- Implement input validation to ensure tensors passed to array_ops.upper_bound are rank 2
- Review and audit all code paths that utilize array_ops.upper_bound for proper input handling
Patch Information
Google has addressed this vulnerability through commits to the TensorFlow repository. The fix is included in TensorFlow 2.13 and has been backported to TensorFlow 2.12. Users should update to these patched versions immediately.
Relevant patches:
For detailed security information, refer to the GitHub Security Advisory GHSA-gjh7-xx4r-x345.
Workarounds
- Add explicit tensor rank validation before calling array_ops.upper_bound to reject non-rank-2 inputs
- Implement try-catch exception handling around tensor operations to gracefully handle crashes
- Deploy input sanitization at service boundaries to filter malformed tensor data
- Consider running TensorFlow processes in isolated containers to limit crash propagation impact
# Input validation example before using array_ops.upper_bound
import tensorflow as tf
def safe_upper_bound(sorted_inputs, values, out_type=tf.dtypes.int32, name=None):
# Validate that sorted_inputs is rank 2
if len(sorted_inputs.shape) != 2:
raise ValueError(f"sorted_inputs must be rank 2, got rank {len(sorted_inputs.shape)}")
if len(values.shape) != 2:
raise ValueError(f"values must be rank 2, got rank {len(values.shape)}")
return tf.raw_ops.UpperBound(
sorted_inputs=sorted_inputs,
values=values,
out_type=out_type,
name=name
)
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

