Heap OOB in `SparseBinCount`
Medium7.1CVE-2021-41226 · Published Nov 10, 2021 · updated Jul 8, 2026
### Impact The [implementation](https://github.com/tensorflow/tensorflow/blob/e71b86d47f8bc1816bf54d7bddc4170e47670b97/tensorflow/core/kernels/bincount_op.cc#L353-L417) of `SparseBinCount` is vulnerable to a heap OOB: ```python import tensorflow as tf tf.raw_ops.SparseBincount( indices=[[0],[1],[2]] values=[0,-10000000] dense_shape=[1,1] size=[1] weights=[3,2,1] binary_output=False) ``` This is because of missing validation between the elements of the `values` argument and the shape of the sparse output: ```cc for (int64_t i = 0; i < indices_mat.dimension(0); ++i) { const int64_t batch = indices_mat(i, 0); const Tidx bin = values(i); ... out(batch, bin) = ...; } ``` ### Patches We have patched the issue in GitHub commit [f410212e373eb2aec4c9e60bf3702eba99a38aba](https://github.com/tensorflow/tensorflow/commit/f410212e373eb2aec4c9e60bf3702eba99a38aba). The fix will be included in TensorFlow 2.7.0. We will also cherrypick this commit on TensorFlow 2.6.1, TensorFlow 2.5.2, and TensorFlow 2.4.4, as these are also affected and still in supported range. ### For more information Please consult [our security guide](https://github.com/tensorflow/tensorflow/blob/ma...
Affected versions
| Package | Affected | Fixed in |
|---|---|---|
| tensorflow PyPI | >= 2.6.0, < 2.6.1 | 2.6.1 |
| >= 2.5.0, < 2.5.2 | 2.5.2 | |
| < 2.4.4 | 2.4.4 |
Details and references
### Impact The [implementation](https://github.com/tensorflow/tensorflow/blob/e71b86d47f8bc1816bf54d7bddc4170e47670b97/tensorflow/core/kernels/bincount_op.cc#L353-L417) of `SparseBinCount` is vulnerable to a heap OOB: ```python import tensorflow as tf tf.raw_ops.SparseBincount( indices=[[0],[1],[2]] values=[0,-10000000] dense_shape=[1,1] size=[1] weights=[3,2,1] binary_output=False) ``` This is because of missing validation between the elements of the `values` argument and the shape of the sparse output: ```cc for (int64_t i = 0; i < indices_mat.dimension(0); ++i) { const int64_t batch = indices_mat(i, 0); const Tidx bin = values(i); ... out(batch, bin) = ...; } ``` ### Patches We have patched the issue in GitHub commit [f410212e373eb2aec4c9e60bf3702eba99a38aba](https://github.com/tensorflow/tensorflow/commit/f410212e373eb2aec4c9e60bf3702eba99a38aba). The fix will be included in TensorFlow 2.7.0. We will also cherrypick this commit on TensorFlow 2.6.1, TensorFlow 2.5.2, and TensorFlow 2.4.4, as these are also affected and still in supported range. ### For more information Please consult [our security guide](https://github.com/tensorflow/tensorflow/blob/master/SECURITY.md) 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.
- CVSS 3.1
- CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H
- Severity from
- GitHub (reviewed advisory)
- Weakness
- CWE-125
- Also known as
- BIT-tensorflow-2021-41226, CVE-2021-41226, PYSEC-2021-418, PYSEC-2021-635, PYSEC-2021-833
- github.com/tensorflow/tensorflow/security/advisories/GHSA-374m-jm66-3vj8
- nvd.nist.gov/vuln/detail/CVE-2021-41226
- github.com/tensorflow/tensorflow/commit/f410212e373eb2aec4c9e60bf3702eba99a38aba
- github.com/pypa/advisory-database/tree/main/vulns/tensorflow-cpu/PYSEC-2021-635.yaml
- github.com/pypa/advisory-database/tree/main/vulns/tensorflow-gpu/PYSEC-2021-833.yaml
- github.com/pypa/advisory-database/tree/main/vulns/tensorflow/PYSEC-2021-418.yaml
- github.com/tensorflow/tensorflow
More TensorFlow advisories
All TensorFlow| Date | Advisory | Severity | Fixed in |
|---|---|---|---|
| Nov 102021 | Incomplete validation in boosted trees code | Critical9.3 | 2.4.4+2 more |
| Nov 102021 | Crash in `tf.math.segment_*` operations | Medium5.5 | 2.4.4+2 more |
| Nov 102021 | Crash in `max_pool3d` when size argument is 0 or negative | Medium5.5 | 2.4.4+2 more |
| Nov 102021 | Crashes due to overflow and `CHECK`-fail in ops with large tensor shapes | Medium5.5 | 2.4.4+2 more |
| Nov 102021 | Overflow/crash in `tf.tile` when tiling tensor is large | Medium5.5 | 2.4.4+2 more |
| Nov 102021 | Overflow/crash in `tf.image.resize` when size is large | Medium5.5 | 2.4.4+2 more |