The delegatecall
in the fallback
function in the Proxy.sol
contract lacks a contract existence check. A failure to check for this existence may mislead a user into thinking that a failed transaction was successful.
A delegatecall to a destructed contract will return success. Due to the lack of contract existence checks, a series of botched transactions may appear to be successful even if one of the transactions fails. "The low-level functions call, delegatecall and staticcall return true as their first return value if the account called is non-existent, as part of the design of the
EVM. Account existence must be checked prior to calling if needed."
An attacker upgrades the proxy to point to an incorrect new implementation. As a result, each delegatecall returns success without changing the state or executing code. This can be used to scam users.
Manual code analysis, previous reports
Before delegate-calling into the target contract, check if it exists.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.