CVE-2021-41224

7.1 HIGH

📋 TL;DR

This vulnerability in TensorFlow allows attackers to trigger a heap out-of-bounds memory access by providing mismatched sizes for indices and values arrays to the SparseFillEmptyRows function. This could potentially lead to memory corruption, crashes, or arbitrary code execution. All TensorFlow users running affected versions are at risk.

💻 Affected Systems

Products:
  • TensorFlow
Versions: TensorFlow 2.4.0 to 2.4.3, 2.5.0 to 2.5.1, 2.6.0, and earlier versions still in use
Operating Systems: All operating systems running TensorFlow
Default Config Vulnerable: ⚠️ Yes
Notes: Any application using the SparseFillEmptyRows function with user-controlled input is vulnerable.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Remote code execution leading to complete system compromise, data theft, or ransomware deployment.

🟠

Likely Case

Application crashes, denial of service, or memory corruption leading to unstable machine learning models.

🟢

If Mitigated

Application crashes with no data loss if proper sandboxing and privilege separation are implemented.

🌐 Internet-Facing: MEDIUM - Requires specific API access to TensorFlow functions, but many ML services expose such interfaces.
🏢 Internal Only: MEDIUM - Internal ML pipelines using TensorFlow could be compromised by malicious users or compromised dependencies.

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: UNKNOWN
Unauthenticated Exploit: ✅ No
Complexity: MEDIUM

Exploitation requires control over the inputs to SparseFillEmptyRows function, which typically requires some level of application access.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: TensorFlow 2.7.0, 2.6.1, 2.5.2, or 2.4.4

Vendor Advisory: https://github.com/tensorflow/tensorflow/security/advisories/GHSA-rg3m-hqc5-344v

Restart Required: No

Instructions:

1. Update TensorFlow using pip: 'pip install --upgrade tensorflow==2.7.0' (or appropriate patched version). 2. Verify the update completed successfully. 3. Test your ML models to ensure compatibility.

🔧 Temporary Workarounds

Input validation wrapper

all

Add validation to ensure indices and values arrays have matching sizes before calling SparseFillEmptyRows

# Python code to wrap the vulnerable function
import tensorflow as tf

def safe_sparse_fill_empty_rows(indices, values, dense_shape, default_value):
    if indices.shape[0] != values.shape[0]:
        raise ValueError('indices and values must have matching first dimension')
    return tf.raw_ops.SparseFillEmptyRows(indices=indices, values=values, dense_shape=dense_shape, default_value=default_value)

🧯 If You Can't Patch

  • Implement strict input validation for all user-provided data passed to TensorFlow operations
  • Isolate TensorFlow execution in containers or sandboxes with minimal privileges

🔍 How to Verify

Check if Vulnerable:

Check TensorFlow version: 'python -c "import tensorflow as tf; print(tf.__version__)"' - if version is 2.4.0-2.4.3, 2.5.0-2.5.1, or 2.6.0, you are vulnerable.

Check Version:

python -c "import tensorflow as tf; print('TensorFlow version:', tf.__version__)"

Verify Fix Applied:

After updating, verify version is 2.7.0, 2.6.1, 2.5.2, or 2.4.4 using the same command.

📡 Detection & Monitoring

Log Indicators:

  • TensorFlow process crashes with segmentation faults
  • Memory access violation errors in application logs
  • Unexpected termination of ML inference services

Network Indicators:

  • Sudden drops in ML service availability
  • Increased error rates in API responses from ML endpoints

SIEM Query:

source="tensorflow" AND ("segmentation fault" OR "memory violation" OR "SparseFillEmptyRows")

🔗 References

📤 Share & Export