#38169 [SC-Insight] Deferred Evaluation Of `Default_Return_Value` May Skip Side Effect Execution
Description
Brief/Intro
Vulnerability Details
def _unpack_returndata(buf, fn_type, call_kwargs, contract_address, context, expr):
...
if call_kwargs.default_return_value is not None:
...
override_value = wrap_value_for_external_return(call_kwargs.default_return_value)
stomp_return_buffer = ["seq"]
if not call_kwargs.skip_contract_check:
stomp_return_buffer.append(_extcodesize_check(contract_address))
stomp_return_buffer.append(make_setter(return_buf, override_value))
unpacker = ["if", ["eq", "returndatasize", 0], stomp_return_buffer, unpacker] #use default_return_value if returndatasize == 0
unpacker = ["seq", unpacker, return_buf]
return unpacker, ret_ofst, ret_lenImpact Details
References
Proof of Concept
Proof of Concept
Previous#37483 [BC-Insight] There is a trace discrepancy for Nethermind when handling EOF from PUSH opcodeNext#37462 [BC-Low] Invalid RLP decoding for single bytes
Was this helpful?