Incorrect values can be logged when raw_log
builtin is called with memory or storage arguments to be used as topics.
A contract search was performed and no vulnerable contracts were found in production. In particular, no uses of raw_log()
were found at all in production; it is apparently not a well-known function.
The build_IR
function of the RawLog
class fails to properly unwrap the variables provided as topics. Consequently, incorrect values are logged as topics.
x: bytes32
@external
def f():
self.x = 0x1234567890123456789012345678901234567890123456789012345678901234
raw_log([self.x], b"") # LOG1(offset:0x60, size:0x00, topic1:0x00)
y: bytes32 = 0x1234567890123456789012345678901234567890123456789012345678901234
raw_log([y], b"") # LOG1(offset:0x80, size:0x00, topic1:0x40)
Fixed in https://github.com/vyperlang/vyper/pull/3977.
Incorrect values can be logged which may result in unexpected behavior in client-side applications relying on these logs.
{ "nvd_published_at": "2024-04-25T18:15:08Z", "cwe_ids": [ "CWE-20" ], "severity": "MODERATE", "github_reviewed": true, "github_reviewed_at": "2024-04-25T19:53:10Z" }