In Rescuable
smart contract, initializeOwnership()
function has no access control which will lead to the contract being compromised.
Take a look at the initializeOwnership()
functionality:
The function is just external
with no access control at all meaning anybody can just call it and initialize a new owner. The contract has important functions such as rescueTokens()
that may allow protocol to handle emergency situations and it has onlyOwner
modifier meaning only the owner can call it. So if the owner is compromised, anybody can call it. This vulnerability can have significant impact on the contracts in scope if the new functionality is introduced as well.
Anybody can set a new owner of the contract.
Manual review.
Set owner in the constructor()
and then add onlyOwner()
modifier to the initializeOwnership()
.
Aside from `Rescuable.sol` being OOS, this is invalid based on codehawks guidelines regarding unprotected initializers. Additionally, this should be called concurrently when deploying a new proxy, but this submissions does not identify that particular issue of an uninitialized owner for proxy contracts
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.