CVE-2024-32481
Description
Vyper is a pythonic Smart Contract Language for the Ethereum virtual machine. Starting in version 0.3.8 and prior to version 0.4.0b1, when looping over a `range` of the form `range(start, start + N)`, if `start` is negative, the execution will always revert. This issue is caused by an incorrect assertion inserted by the code generation of the range `stmt.parse_For_range()`. The issue arises when `start` is signed, instead of using `sle`, `le` is used and `start` is interpreted as an unsigned integer for the comparison. If it is a negative number, its 255th bit is set to `1` and is hence interpreted as a very large unsigned integer making the assertion always fail. Any contract having a `range(start, start + N)` where `start` is a signed integer with the possibility for `start` to be negative is affected. If a call goes through the loop while supplying a negative `start` the execution will revert. Version 0.4.0b1 fixes the issue.
How to fix
- vyper0.4.0, 0.4.0b1 or later
Affected products
| Product | Affected versions | Fixed in |
|---|---|---|
| vyperlang vyper | 0.3.8 ≤ v ≤ 0.3.10, 0.4.0 | — |
| vyperPyPI | 0.3.8 ≤ v < 0.4.0, 0.3.8 ≤ v < 0.4.0b1 | 0.4.0, 0.4.0b1 |
Check your version
Choose the product and enter the version you run to see whether it falls in the affected range.
Attack Surface Management
See the assets tied to your domains, the technologies they run and known vulnerabilities in one list.