CVE-2021-37686: Infinite loop in TensorFlow Lite
Impact The strided slice implementation in TFLite has a logic bug which can allow an attacker to trigger an infinite loop. This arises from newly introduced support for ellipsis in axis definition:
cc for (int i = 0; i < effectivedims;) { if ((1 << i) & opcontext->params->ellipsismask) { // ... int ellipsisendidx = std::min(i + 1 + numaddaxis + opcontext->inputdims - begincount, effectivedims); // ... for (; i < ellipsisendidx; ++i) { // ... } continue; } // ... ++i; }
An attacker can craft a model such that ellipsisendidx is smaller than i (e.g., always negative). In this case, the inner loop does not increase i and the continue statement causes execution to skip over the preincrement at the end of the outer loop.
Patches We have patched the issue in GitHub commit dfa22b348b70bb89d6d6ec0ff53973bacb4f4695.
The fix will be included in TensorFlow 2.6.0. This is the only affected version.
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 members of the Aivul Team from Qihoo 360.
Other sources
TensorFlow is an end-to-end open source platform for machine learning. In affected versions the strided slice implementation in TFLite has a logic bug which can allow an attacker to trigger an infinite loop. This arises from newly introduced support for ellipsis in axis definition. An attacker can craft a model such that ellipsisendidx is smaller than i (e.g., always negative). In this case, the inner loop does not increase i and the continue statement causes execution to skip over the preincrement at the end of the outer loop. We have patched the issue in GitHub commit dfa22b348b70bb89d6d6ec0ff53973bacb4f4695. TensorFlow 2.6.0 is the only affected version.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
pip/tensorflow-gputo a version that resolves this vulnerability.Fixed in 2.6.0rc2 - Upgrade
Upgrade
pip/tensorflow-cputo a version that resolves this vulnerability.Fixed in 2.6.0rc2 - Upgrade
Upgrade
pip/tensorflowto a version that resolves this vulnerability.Fixed in 2.6.0rc2 - Upgrade
Upgrade
TensorFlowto a version that resolves this vulnerability.Fixed in 2.6.0 - Upgrade
Upgrade to a fixed release to a version that resolves this vulnerability.
Patch dfa22b348b70bb89d6d6ec0ff53973bacb4f4695
Event History
Frequently Asked Questions
What is the severity of CVE-2021-37686?
CVE-2021-37686 is classified as a high-severity vulnerability due to its potential to cause an infinite loop.
How do I fix CVE-2021-37686?
To fix CVE-2021-37686, update TensorFlow to version 2.6.0rc2 or later.
Which versions of TensorFlow are affected by CVE-2021-37686?
CVE-2021-37686 affects TensorFlow versions between 2.3.0 and 2.4.3, as well as specific 2.6.0 release candidates.
What is the impact of CVE-2021-37686?
CVE-2021-37686 can lead to denial of service by causing applications to hang in an infinite loop.
Is CVE-2021-37686 present in TensorFlow GPU installations?
Yes, CVE-2021-37686 impacts both TensorFlow CPU and GPU installations that are running affected versions.