SWC-112_delegatecall
Delegatecall to Untrusted Callee
Description: There exists a special variant of a message call, named
delegatecall
which is identical to a message call apart from the fact that the code at the target address is executed in the context of the calling contract andmsg.sender
andmsg.value
do not change their values. This allows a smart contract to dynamically load code from a different address at runtime. Storage, current address and balance still refer to the calling contract.Calling into untrusted contracts is very dangerous, as the code at the target address can change any storage values of the caller and has full control over the caller’s balance.
Remediation: Use
delegatecall
with caution and make sure to never call into untrusted contracts. If the target address is derived from user input ensure to check it against a whitelist of trusted contracts.
vulnerability contract 1:
1 | pragma solidity ^0.4.24; |
vulnerability contract 2:
1 | pragma solidity ^0.4.24; |