Headline
CVE-2022-29204: Allow 0 for number of segments in `unsorted_segment_join_op.cc` · tensorflow/tensorflow@20cb187
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.UnsortedSegmentJoin
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 num_segments
is a positive scalar but there is no validation. Since this value is used to allocate the output tensor, a negative value would result in a CHECK
-failure (assertion failure), as per TFSA-2021-198. Versions 2.9.0, 2.8.1, 2.7.2, and 2.6.4 contain a patch for this issue.
@@ -94,8 +94,10 @@ class UnsortedSegmentJoinOp : public OpKernel {
errors::InvalidArgument(“Number of segments cannot be empty.”));
auto num_segments = num_segments_tensor.scalar<NUM_SEGMENTS_TYPE>()();
OP_REQUIRES(context, num_segments > 0,
errors::InvalidArgument(“Number of segments must be positive”));
OP_REQUIRES(
context, num_segments >= 0,
errors::InvalidArgument(
"Number of segments must be non-negative but got ", num_segments));
OP_REQUIRES(context, segment_dims != 0,
errors::InvalidArgument(“Segment_id cannot have rank 0”));
Related news
### Impact The implementation of [`tf.raw_ops.UnsortedSegmentJoin`](https://github.com/tensorflow/tensorflow/blob/f3b9bf4c3c0597563b289c0512e98d4ce81f886e/tensorflow/core/kernels/unsorted_segment_join_op.cc#L83-L148) does not fully validate the input arguments. This results in a `CHECK`-failure which can be used to trigger a denial of service attack: ```python import tensorflow as tf tf.strings.unsorted_segment_join( inputs=['123'], segment_ids=[0], num_segments=-1) ``` The code assumes `num_segments` is a positive scalar but there is no validation: ```cc const Tensor& num_segments_tensor = context->input(2); auto num_segments = num_segments_tensor.scalar<NUM_SEGMENTS_TYPE>()(); // ... Tensor* output_tensor = nullptr; TensorShape output_shape = GetOutputShape(input_shape, segment_id_shape, num_segments); ``` Since this value is used to allocate the output tensor, a negative value would result in a `CHECK`-failure (assertion failure), as per [TFSA-2021-198](https://github...
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.