CVE-2024-26149: Vyper _abi_decode Memory Overflow
Summary
If an excessively large value is specified as the starting index for an array in abidecode, it can cause the read position to overflow. This results in the decoding of values outside the intended array bounds, potentially leading to bugs in contracts that use arrays within abidecode. The advisory has been assigned low severity, because it is only observable if there is a memory write between two invocations of abidecode on the same input.
Proof of Concept
vyper event Pwn: pass
@external def f(x: Bytes[32 3]): a: Bytes[32] = b"foo" y: Bytes[32 3] = x
decodedy1: Bytes[32] = abidecode(y, Bytes[32]) a = b"bar" decodedy2: Bytes[32] = abidecode(y, Bytes[32])
if decodedy1 != decodedy2: log Pwn()
Sending the following calldata results in Pwn being emitted.
0xd45754f8 0000000000000000000000000000000000000000000000000000000000000020 0000000000000000000000000000000000000000000000000000000000000060 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0
Patches Patched in https://github.com/vyperlang/vyper/pull/3925, https://github.com/vyperlang/vyper/pull/4091, https://github.com/vyperlang/vyper/pull/4144, https://github.com/vyperlang/vyper/pull/4060.
Other sources
Vyper is a pythonic Smart Contract Language for the ethereum virtual machine. If an excessively large value is specified as the starting index for an array in abidecode, it can cause the read position to overflow. This results in the decoding of values outside the intended array bounds, potentially leading to exploitations in contracts that use arrays within abidecode. This vulnerability affects 0.3.10 and earlier versions.
— MITRE
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
pip/vyperto a version that resolves this vulnerability.Fixed in 0.4.0 - Upgrade
Upgrade
vyperto a version that resolves this vulnerability.Patch 0xd45754f8 - Upgrade
Upgrade
vyperto a version that resolves this vulnerability.Fixed in 0.3.10
Event History
Frequently Asked Questions
What is the severity of CVE-2024-26149?
CVE-2024-26149 has a high severity due to potential overflow when decoding array values.
How do I fix CVE-2024-26149?
To fix CVE-2024-26149, upgrade to Vyper version 0.4.0 or higher.
What types of software are affected by CVE-2024-26149?
CVE-2024-26149 affects Vyper versions up to and including 0.3.10.
Can CVE-2024-26149 lead to security risks?
Yes, CVE-2024-26149 can lead to bugs in smart contracts, resulting in potential security vulnerabilities.
What impact does CVE-2024-26149 have on decentralized applications?
CVE-2024-26149 can undermine the reliability of decentralized applications by causing unintended behavior in array handling.