CVE-2024-32481

Medium

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.

SeverityMedium
CVSS5.3
Exploit probability—
ProductVyper
PublishedApr 25, 2024
First seenApr 25, 2024
Weakness typeCWE-681CWE-681

How to fix

Update
  • vyper0.4.0, 0.4.0b1 or later

Affected products

ProductAffected versionsFixed in
vyperlang vyper0.3.8 ≤ v ≤ 0.3.10, 0.4.0—
vyperPyPI0.3.8 ≤ v < 0.4.0, 0.3.8 ≤ v < 0.4.0b10.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.

In the Intelligence 360 plan

Attack Surface Management

See the assets tied to your domains, the technologies they run and known vulnerabilities in one list.