CVE-2023-32058: Vyper vulnerable to integer overflow in loop
Impact
Due to missing overflow check for loop variables, by assigning the iterator of a loop to a variable, it is possible to overflow the type of the latter.
In the following example, calling test returns 354, meaning that the variable a did store 354 a value out of bound for the type uint8.
Vyper @external def test() -> uint16: x:uint8 = 255 a:uint8 = 0 for i in range(x, x+100): a = i return convert(a,uint16)
The issue seems to happen only in loops of type for i in range(a, a + N) as in loops of type for i in range(start, stop) and for i in range(stop), the compiler is able to raise a TypeMismatch when trying to overflow the variable.
thanks to @trocher for reporting
Patches
patched in 3de1415ee77a9244eb04bdb695e249d3ec9ed868
Workarounds
Other sources
Vyper is a Pythonic smart contract language for the Ethereum virtual machine. Prior to version 0.3.8, due to missing overflow check for loop variables, by assigning the iterator of a loop to a variable, it is possible to overflow the type of the latter. The issue seems to happen only in loops of type for i in range(a, a + N) as in loops of type for i in range(start, stop) and for i in range(stop), the compiler is able to raise a TypeMismatch when trying to overflow the variable. The problem has been patched in version 0.3.8.
— MITRE
Affected Software
Remediation
Event History
Frequently Asked Questions
What is CVE-2023-32058?
CVE-2023-32058 is a vulnerability in the Vyper smart contract language for the Ethereum virtual machine that allows for an overflow of loop variables, potentially resulting in a type overflow.
How does CVE-2023-32058 affect Vyper?
CVE-2023-32058 affects Vyper prior to version 0.3.8, where a missing overflow check for loop variables may lead to the overflow of the type of the variable.
What is the severity of CVE-2023-32058?
The severity of CVE-2023-32058 is high, with a severity value of 7.5.
How can I fix CVE-2023-32058?
To fix CVE-2023-32058, you should update Vyper to version 0.3.8 or later, which includes the necessary overflow check for loop variables.
What is the Common Weakness Enumeration (CWE) of CVE-2023-32058?
The Common Weakness Enumeration (CWE) of CVE-2023-32058 is CWE-190, which relates to an integer overflow or wraparound.