The initialize
function is vulnerable as an attacker can outsmart the wallet admin and initialize the contract before they do.
Here is the vulnerable function:
This is an implementation of Open Zeppelin to properly initialize the implementation contract. However, the dev did not contextualize the function to the current contract.
As it is now, anyone who calls this function will be the owner, which is dangerous before a malicious entity can do this.
Here is a PoC:
wallet admins deploy the contract
attacker calls the initialize
function before the rightful owners do
attacker is in charge of the contract as the owner - albeit an unlawful one
Hijacking of the wallet.
Manual review.
Make it callable by only the admins of the wallet.
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.