CVE-2021-29574: Undefined behavior in `MaxPool3DGradGrad`
Impact The implementation of tf.rawops.MaxPool3DGradGrad exhibits undefined behavior by dereferencing null pointers backing attacker-supplied empty tensors:
python import tensorflow as tf
originput = tf.constant([0.0], shape=[1, 1, 1, 1, 1], dtype=tf.float32) origoutput = tf.constant([0.0], shape=[1, 1, 1, 1, 1], dtype=tf.float32) grad = tf.constant([], shape=[0, 0, 0, 0, 0], dtype=tf.float32) ksize = [1, 1, 1, 1, 1] strides = [1, 1, 1, 1, 1] padding = "SAME"
tf.rawops.MaxPool3DGradGrad( originput=originput, origoutput=origoutput, grad=grad, ksize=ksize, strides=strides, padding=padding)
The implementation fails to validate that the 3 tensor inputs are not empty. If any of them is empty, then accessing the elements in the tensor results in dereferencing a null pointer.
Patches We have patched the issue in GitHub commit a3d9f9be9ac2296615644061b40cefcee341dcc4.
The fix will be included in TensorFlow 2.5.0. We will also cherrypick this commit on TensorFlow 2.4.2, TensorFlow 2.3.3, TensorFlow 2.2.3 and TensorFlow 2.1.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 Ying Wang and Yakun Zhang of Baidu X-Team.
Other sources
TensorFlow is an end-to-end open source platform for machine learning. The implementation of tf.rawops.MaxPool3DGradGrad exhibits undefined behavior by dereferencing null pointers backing attacker-supplied empty tensors. The implementation(https://github.com/tensorflow/tensorflow/blob/72fe792967e7fd25234342068806707bbc116618/tensorflow/core/kernels/poolingops3d.cc#L679-L703) fails to validate that the 3 tensor inputs are not empty. If any of them is empty, then accessing the elements in the tensor results in dereferencing a null pointer. The fix will be included in TensorFlow 2.5.0. We will also cherrypick this commit on TensorFlow 2.4.2, TensorFlow 2.3.3, TensorFlow 2.2.3 and TensorFlow 2.1.4, as these are also affected and still in supported range.
Affected Software
Remediation
Event History
Frequently Asked Questions
What is the severity of CVE-2021-29574?
CVE-2021-29574 is classified as a high severity vulnerability due to its potential to cause undefined behavior and system crashes.
How do I fix CVE-2021-29574?
To fix CVE-2021-29574, upgrade to TensorFlow version 2.4.2 or later.
What type of error does CVE-2021-29574 involve?
CVE-2021-29574 involves an error that can lead to dereferencing null pointers when working with empty tensors in the MaxPool3DGradGrad function.
Which versions of TensorFlow are affected by CVE-2021-29574?
CVE-2021-29574 affects TensorFlow versions up to 2.4.1, including certain 2.2.x and 2.3.x versions.
What is MaxPool3DGradGrad in the context of CVE-2021-29574?
MaxPool3DGradGrad is a TensorFlow operation that calculates gradients, and the vulnerability allows misuse of this operation when it processes empty tensors.