First published: Fri May 19 2023(Updated: )
### Impact in contracts with at least one regular nonpayable function, due to the callvalue check being inside of the selector section, it is possible to send funds to the default function by using less than 4 bytes of calldata, even if the default function is marked `nonpayable`. this applies to contracts compiled with vyper<=0.3.7. ```vyper # @version 0.3.7 # implicitly nonpayable @external def foo() -> uint256: return 1 # implicitly nonpayable @external def __default__(): # could receive ether here pass ``` ### Patches this was fixed by the removal of the global calldatasize check in https://github.com/vyperlang/vyper/commit/02339dfda0f3caabad142060d511d10bfe93c520. ### Workarounds don't use nonpayable default functions
Credit: security-advisories@github.com security-advisories@github.com security-advisories@github.com
Affected Software | Affected Version | How to fix |
---|---|---|
pip/vyper | <0.3.8 | 0.3.8 |
Vyperlang Vyper | <0.3.8 |
Sign up to SecAlerts for real-time vulnerability data matched to your software, aggregated from hundreds of sources.
CVE-2023-32675 is a vulnerability in the Vyper smart contract language for the Ethereum virtual machine.
CVE-2023-32675 allows funds to be sent to the default function of contracts with multiple regular nonpayable functions, even if the default function is marked nonpayable.
Vyper versions up to and excluding 0.3.8 are affected by CVE-2023-32675.
CVE-2023-32675 has a severity rating of medium (5.3).
To fix CVE-2023-32675, update Vyper to a version that is equal to or greater than 0.3.8.