Omniscia Moby Audit
TransparentUpgradeableProxy Manual Review Findings
TransparentUpgradeableProxy Manual Review Findings
TUP-01M: Inexistent Prevention of Accidentally Sent Funds
Type | Severity | Location |
---|---|---|
Language Specific | TransparentUpgradeableProxy.sol:L106-L110 |
Description:
The UpgradeableProxy::constructor
is payable
yet may not utilize funds at all if no _data
payload is provided to it.
Impact:
An upgrade can rescue those funds, however, the recommended change is part of the OpenZeppelin library's latest implementation and thus is advised to be integrated properly.
Example:
contracts/proxy/TransparentUpgradeableProxy.sol
103constructor(address _logic, bytes memory _data) payable {104 assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1));105 _setImplementation(_logic);106 if(_data.length > 0) {107 // solhint-disable-next-line avoid-low-level-calls108 (bool success,) = _logic.delegatecall(_data);109 require(success);110 }111}
Recommendation:
We advise the code to ensure that msg.value
is 0
if the _data.length
value is zero, preventing funds from being accidentally locked during the contract's creation.
Alleviation (b02fae335f62cc1f5f4236fb4d982ad16a32bd26):
The file has been removed from the codebase rendering this exhibit no longer applicable.