Normal behavior: After the event ends and the winner is set, each winning user should only be able to withdraw their proportional share of the finalized vault assets based on winning shares at the time of finalization. No user should be able to increase their payout after finalization.
Issue: The contract snapshots totalWinnerShares and finalizedVaultAsset in setWinner, but in withdraw() it uses the current balanceOf(msg.sender) at withdrawal time. Because the inherited ERC4626 mint function is still publicly callable, a winner can mint additional shares after setWinner to inflate their balance and withdraw more than their allocated share.
Likelihood: High
High incentive for any winner to call to inflate the shares and maximize payout
Occurs whenever a winner can call ERC4626 mint after setWinner, because totalWinnerShares is fixed while balanceOf remains mutable.
No guard prevents post-finalization share inflation; a single winner can drain the vault by inflating their shares.
Impact: High
Winning users can withdraw more than their fair allocation, draining funds that belong to other winners.
Final payouts become incorrect and can drain the vault balance.
Two users (user1, user2) pick the winning country; a third user (user3) picks a losing country.
Both user1 and user2 should be able to claim their prize, which is half of user3 deposit (minus the fees)
After the winner is set, user1 calls ERC4626 mint to inflate their shares, then calls the guarded withdraw() and drains more than the correct profit.
The vault will be completely drained by user1, who will receive all the assets
User2 cannot claim any assets anymore, as the vault is empty, even though user2 also won
Block ERC4626 mint to prevent post-finalization share inflation.
Compute withdrawals based on a snapshot of winning shares (already available via userSharesToCountry[user][winnerCountryId]) rather than the live balanceOf(msg.sender) at withdrawal.
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.