Normal behavior: Users deposit before the event start, pick a country, the owner sets the winner after the event ends, and only winners can withdraw their proportional share via the vault’s guarded withdraw() logic. Losers should not be able to retrieve their stake after the event starts.
Issue: The contract inherits ERC4626 and does not restrict the standard ERC4626 entrypoints. A losing user can call the inherited withdraw(uint256 assets, address receiver, address owner) (or redeem) to pull their own assets out at any time, bypassing the event winner rules enforced by the custom withdraw() with no arguments. This breaks the game’s economics and lets losers recover funds outside the intended rules.
Likelihood: High
Occurs whenever a user holds shares; the ERC4626 withdraw/redeem functions remain publicly callable throughout the lifecycle, without any guards.
Any game rules are prevented with this method, making it an obvious choice for anyone who loses to call this function
No gating ties these functions to event timing or winner status; knowledgeable users will frequently exploit this to reclaim funds.
Impact: High
Losers can recover principal (minus deposit fee), shrinking the prize pool and violating event rules.
The stored stakes in the contract remain intact, resulting in skewed results in calculations for the winners
When all players play in their best interest, all losers would withdraw their money when they lose, breaking the game, and emptying the prize pool
Winners receive less than intended, and overall vault economics are compromised; potential griefing before or after event end.
Explanation:
User deposits and joins (country 8).
After event ends, owner sets winner to 7 (user lost).
User calls inherited ERC4626 withdraw(assets, receiver, owner) to pull out their stake anyway.
Assertions show user recovers funds (only fee lost), bypassing the custom winner check.
This leaves the vault completely drained, in case of this example with 1 user. But the poc shows that this can be done for any user.
All public endpoints of ERC4624 that can impact the shares should be blocked/overridden. In this case it is important to do so for withdraw and redeem, but also the mint function is at risk.
Note that the deposit function has the exact same signature as in ERC4624 and is already overwritten, that function is safe.
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.