Lucene search

K
githubGitHub Advisory DatabaseGHSA-VXMM-CWH2-Q762
HistoryMay 22, 2023 - 8:35 p.m.

Vyper's nonpayable default functions are sometimes payable

2023-05-2220:35:46
CWE-670
GitHub Advisory Database
github.com
8
vyper
nonpayable
default function
vulnerability
patch
workaround
calldata check
contract
security

5.3 Medium

CVSS3

Attack Vector

NETWORK

Attack Complexity

LOW

Privileges Required

NONE

User Interaction

NONE

Scope

UNCHANGED

Confidentiality Impact

NONE

Integrity Impact

LOW

Availability Impact

NONE

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N

0.001 Low

EPSS

Percentile

29.0%

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.

# @version 0.3.7

# implicitly nonpayable
@external
def foo() -&gt; 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

Affected configurations

Vulners
Node
vyperlangvyperRange<0.3.8
CPENameOperatorVersion
vyperlt0.3.8

5.3 Medium

CVSS3

Attack Vector

NETWORK

Attack Complexity

LOW

Privileges Required

NONE

User Interaction

NONE

Scope

UNCHANGED

Confidentiality Impact

NONE

Integrity Impact

LOW

Availability Impact

NONE

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N

0.001 Low

EPSS

Percentile

29.0%

Related for GHSA-VXMM-CWH2-Q762