GHSA-vmjw-c2vp-p33c BIT-tensorflow-2021-37669 CVE-2021-37669 PYSEC-2021-291 PYSEC-2021-582 PYSEC-2021-780
Crash in NMS ops caused by integer conversion to unsigned
- Severity
- 0.0 / 10
- Medium · CVSS 4.0
- Exploit chance (EPSS)
- 0.18%
- Chance of exploitation in the next 30 days. Higher than 6.98% of scored vulnerabilities.
- Known exploited
- No
- Not in CISA's catalog
- Weakness
- CWE-681 Incorrect Conversion between Numeric Types
- Fix
- Available
- 3 packages have a fixed version
Description
Impact
An attacker can cause denial of service in applications serving models using tf.raw_ops.NonMaxSuppressionV5 by triggering a division by 0:
import tensorflow as tf
tf.raw_ops.NonMaxSuppressionV5(
boxes=[[0.1,0.1,0.1,0.1],[0.2,0.2,0.2,0.2],[0.3,0.3,0.3,0.3]],
scores=[1.0,2.0,3.0],
max_output_size=-1,
iou_threshold=0.5,
score_threshold=0.5,
soft_nms_sigma=1.0,
pad_to_max_output_size=True)
The implementation uses a user controlled argument to resize a std::vector:
const int output_size = max_output_size.scalar<int>()();
// ...
std::vector<int> selected;
// ...
if (pad_to_max_output_size) {
selected.resize(output_size, 0);
// ...
}
However, as std::vector::resize takes the size argument as a size_t and output_size is an int, there is an implicit conversion to usigned. If the attacker supplies a negative value, this conversion results in a crash.
A similar issue occurs in CombinedNonMaxSuppression:
import tensorflow as tf
tf.raw_ops.NonMaxSuppressionV5(
boxes=[[[[0.1,0.1,0.1,0.1],[0.2,0.2,0.2,0.2],[0.3,0.3,0.3,0.3]],[[0.1,0.1,0.1,0.1],[0.2,0.2,0.2,0.2],[0.3,0.3,0.3,0.3]],[[0.1,0.1,0.1,0.1],[0.2,0.2,0.2,0.2],[0.3,0.3,0.3,0.3]]]],
scores=[[[1.0,2.0,3.0],[1.0,2.0,3.0],[1.0,2.0,3.0]]],
max_output_size_per_class=-1,
max_total_size=10,
iou_threshold=score_threshold=0.5,
pad_per_class=True,
clip_boxes=True)
Patches
We have patched the issue in GitHub commit 3a7362750d5c372420aa8f0caf7bf5b5c3d0f52d and commit b5cdbf12ffcaaffecf98f22a6be5a64bb96e4f58.
The fix will be included in TensorFlow 2.6.0. We will also cherrypick this commit on TensorFlow 2.5.1, TensorFlow 2.4.3, and TensorFlow 2.3.4, as these are also affected and still in supported range.
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.
Affected versions
PyPI
| Package | Vulnerable | Fixed in |
|---|---|---|
| tensorflow | < 2.3.4 |
2.3.4 |
| tensorflow | >= 2.4.0, < 2.4.3 |
2.4.3 |
| tensorflow | >= 2.5.0, < 2.5.1 |
2.5.1 |
| tensorflow | >= 2.3.0, < 2.3.4>= 2.4.0, < 2.4.3 |
2.3.42.4.3 |
| tensorflow-cpu | < 2.3.4 |
2.3.4 |
| tensorflow-cpu | >= 2.4.0, < 2.4.3 |
2.4.3 |
| tensorflow-cpu | >= 2.5.0, < 2.5.1 |
2.5.1 |
| tensorflow-cpu | >= 2.3.0, < 2.3.4>= 2.4.0, < 2.4.3 |
2.3.42.4.3 |
| tensorflow-gpu | < 2.3.4 |
2.3.4 |
| tensorflow-gpu | >= 2.4.0, < 2.4.3 |
2.4.3 |
| tensorflow-gpu | >= 2.5.0, < 2.5.1 |
2.5.1 |
| tensorflow-gpu | >= 2.3.0, < 2.3.4>= 2.4.0, < 2.4.3 |
2.3.42.4.3 |
How to fix
Move to the fixed version or later with your package manager, update the lockfile, and run your tests. If the package only arrives through another dependency, upgrade that dependency first. If none of its releases pulls a fixed version yet, force the version with your package manager's override.
tensorflow PyPI → 2.3.4
- pip
pip install --upgrade "tensorflow>=2.3.4"- poetry
poetry add "tensorflow>=2.3.4"- uv
uv add "tensorflow>=2.3.4"
tensorflow-cpu PyPI → 2.3.4
- pip
pip install --upgrade "tensorflow-cpu>=2.3.4"- poetry
poetry add "tensorflow-cpu>=2.3.4"- uv
uv add "tensorflow-cpu>=2.3.4"
tensorflow-gpu PyPI → 2.3.4
- pip
pip install --upgrade "tensorflow-gpu>=2.3.4"- poetry
poetry add "tensorflow-gpu>=2.3.4"- uv
uv add "tensorflow-gpu>=2.3.4"
Severity breakdown
CVSS 4.0 0.0
CVSS:4.0/AV:L/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
- Attack vector
- Local
- Attack complexity
- Low
- Attack requirements
- None
- Privileges required
- Low
- User interaction
- None
- Confidentiality (vulnerable system)
- None
- Integrity (vulnerable system)
- None
- Availability (vulnerable system)
- High
- Confidentiality (subsequent systems)
- None
- Integrity (subsequent systems)
- None
- Availability (subsequent systems)
- None
CVSS 3.1 5.5
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
- Attack vector
- Local
- Attack complexity
- Low
- Privileges required
- Low
- User interaction
- None
- Scope
- Unchanged
- Confidentiality
- None
- Integrity
- None
- Availability
- High
Weakness
CWE-681: Incorrect Conversion between Numeric Types
When converting from one data type to another, such as long to integer, data can be omitted or translated in a way that produces unexpected values. If the resulting values are used in a sensitive context, then dangerous behaviors may occur.
How to prevent it
- Implementation: Avoid making conversion between numeric types. Always check for the allowed ranges.
References
Advisories
Other links
- github.com/tensorflow/tensorflow/security/advisories/GHSA-vmjw-c2vp-p33c
- github.com/tensorflow/tensorflow/commit/3a7362750d5c372420aa8f0caf7bf5b5c3d0f52d
- github.com/tensorflow/tensorflow/commit/b5cdbf12ffcaaffecf98f22a6be5a64bb96e4f58
- github.com/pypa/advisory-database/tree/main/vulns/tensorflow-cpu/PYSEC-2021-582…
- github.com/pypa/advisory-database/tree/main/vulns/tensorflow-gpu/PYSEC-2021-780…
- github.com/pypa/advisory-database/tree/main/vulns/tensorflow/PYSEC-2021-291.yaml
- github.com/tensorflow/tensorflow
Timeline
- Published
- Last updated by the source
- Latest EPSS score
Related advisories
| Advisory | Severity | Why it's related |
|---|---|---|
| GHSA-gjh7-xx4r-x345 TensorFlow has segfault in array_ops.upper_bound | High | Also affects tensorflow |
| GHSA-fxgc-95xx-grvq TensorFlow Denial of Service vulnerability | Medium | Also affects tensorflow |
| GHSA-93vr-9q9m-pj8p TensorFlow vulnerable to Out-of-Bounds Read in DynamicStitch | High | Also affects tensorflow |
| GHSA-qjqc-vqcf-5qvj TensorFlow vulnerable to seg fault in `tf.raw_ops.Print` | High | Also affects tensorflow |
| GHSA-7jvm-xxmr-v5cw TensorFlow vulnerable to integer overflow in EditDistance | High | Also affects tensorflow |
| GHSA-64jg-wjww-7c5w TensorFlow has Null Pointer Error in TensorArrayConcatV2 | High | Also affects tensorflow |
| GHSA-6hg6-5c2q-7rcr TensorFlow has Heap-buffer-overflow in AvgPoolGrad | High | Also affects tensorflow |
| GHSA-558h-mq8x-7q9g TensorFlow has Null Pointer Error in SparseSparseMaximum | High | Also affects tensorflow |
MergeHarbor checks every repository's dependencies against this database, ranks what matters by exploitability and reachability, routes it to the owning team and opens the fix pull request.
Check your repos with MergeHarbor