The PerpetualVault
contract is an upgradeable Smart Contract and is missing the _disableInitializers()
function call in its constructor. As a result, an attacker could re-initialize the contract, passing in any arguments they want.
An attacker could take over ownership of the contract
Manual review
You should invoke the _disableInitializers()
function from Openzeppelin in the constructor to automatically lock it when it is deployed:
Please read the CodeHawks documentation to know which submissions are valid. If you disagree, provide a coded PoC and explain the real likelihood and the detailed impact on the mainnet without any supposition (if, it could, etc) to prove your point.
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.