GitHub Advisoryadvisory · PyPI
GHSA-qg48-85hg-mqc5 Division by 0 in `DenseCountSparseOutput`
LOW
Official page ↗
- Aliases
- CVE-2021-29554
- Ecosystem
- PyPI
- Packages
- tensorflow, tensorflow-cpu, tensorflow-gpu
- Severity
- Low
- CVSS vector
- CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:L
- Weaknesses
- CWE-369
- Reviewed
- 2021-05-18
Affected packages
• PyPI tensorflow: >= 2.3.0, < 2.3.3 → fixed in 2.3.3
• PyPI tensorflow: >= 2.4.0, < 2.4.2 → fixed in 2.4.2
• PyPI tensorflow-cpu: >= 2.3.0, < 2.3.3 → fixed in 2.3.3
• PyPI tensorflow-cpu: >= 2.4.0, < 2.4.2 → fixed in 2.4.2
• PyPI tensorflow-gpu: >= 2.3.0, < 2.3.3 → fixed in 2.3.3
• PyPI tensorflow-gpu: >= 2.4.0, < 2.4.2 → fixed in 2.4.2
Description
Impact
An attacker can cause a denial of service via a FPE runtime error in `tf.raw_ops.DenseCountSparseOutput`:
```python
import tensorflow as tf
values = tf.constant([], shape=[0, 0], dtype=tf.int64)
weights = tf.constant([])
tf.raw_ops.DenseCountSparseOutput(
values=values, weights=weights,
minlength=-1, maxlength=58, binary_output=True)
```
This is because the implementation computes a divisor value from user data but does not check that the result is 0 before doing the division:
```cc
int num_batch_elements = 1;
for (int i = 0; i < num_batch_dimensions; ++i) {
num_batch_elements *= data.shape().dim_size(i);
}
int num_value_elements = data.shape().num_elements() / num_batch_elements;
```
Since `data` is given by the `values` argument, `num_batch_elements` is 0.
Patches
We have patched the issue in GitHub commit da5ff2daf618591f64b2b62d9d9803951b945e9f.
The fix will be included in TensorFlow 2.5.0. We will also cherrypick this commit on TensorFlow 2.4.2, and TensorFlow 2.3.3, as these are also affected.
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 Yakun Zhang and Ying Wang of Baidu X-Team.
Related
Alias · CVE (1)
- CVE-2021-29554 TensorFlow is an end-to-end open source platform for machine learning. vulnerability
Weakness · CWE (1)
- CWE-369 Divide By Zero weakness
References
- https://github.com/tensorflow/tensorflow/security/advisories/GHSA-qg48-85hg-mqc5 web
- https://nvd.nist.gov/vuln/detail/CVE-2021-29554 advisory
- https://github.com/tensorflow/tensorflow/commit/da5ff2daf618591f64b2b62d9d9803951b945e9f web
- https://github.com/pypa/advisory-database/tree/main/vulns/tensorflow-cpu/PYSEC-2021-482.yaml web
- https://github.com/pypa/advisory-database/tree/main/vulns/tensorflow-gpu/PYSEC-2021-680.yaml web
- https://github.com/pypa/advisory-database/tree/main/vulns/tensorflow/PYSEC-2021-191.yaml web
- https://github.com/tensorflow/tensorflow package