In Tensorflow before versions 1.15.4, 2.0.3, 2.1.2, 2.2.1 and 2.3.1, the `tf.raw_ops.Switch` operation takes as input a tensor and a boolean and outputs two tensors.
Date: 2020-09
Affected: google/tensorflow, opensuse/leap
Attack vector: dos
Category: vulnerability-disclosure
Severity: Critical
CVE: CVE-2020-15190
CVE-2020-15191
CVE-2020-15192
CVE-2020-15193
CVE-2020-15194
CVE-2020-15195
CVE-2020-15196
CVE-2020-15197
CVE-2020-15198
CVE-2020-15199
CVE-2020-15200
CVE-2020-15201
CVE-2020-15202
CVE-2020-15203
CVE-2020-15204
CVE-2020-15205
CVE-2020-15206
CVE-2020-15207
CVE-2020-15208
CVE-2020-15209
CVE-2020-15210
CVE-2020-15211
CVE-2020-15212
CVE-2020-15213
CVE-2020-15214
CWE: CWE-119
CWE-122
CWE-125
CWE-134
CWE-197
CWE-20
CWE-252
CWE-476
CWE-617
CWE-754
CWE-770
CWE-787
CWE-908
CVSS: 5.3 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L)

In Tensorflow before versions 1.15.4, 2.0.3, 2.1.2, 2.2.1 and 2.3.1, the `tf.raw_ops.Switch` operation takes as input a tensor and a boolean and outputs two tensors. Depending on the boolean value, one of the tensors is exactly the input tensor whereas the other one should be an empty tensor. However, the eager runtime traverses all tensors in the output. Since only one of the tensors is defined, the other one is `nullptr`, hence we are binding a reference to `nullptr`. This is undefined behavior and reported as an error if compiling with `-fsanitize=null`. In this case, this results in a segmentation fault The issue is patched in commit da8558533d925694483d2c136a9220d6d49d843c, and is released in TensorFlow versions 1.15.4, 2.0.3, 2.1.2, 2.2.1, or 2.3.1.


Mitigations:

Architectural layers (MAESTRO):