Description
Normally, the vault should fairly determine the winning team once the tournament ends, and payouts should be distributed according to user deposits on the correct team.
The current implementation allows the owner to call setWinner() at any time, even after deposits, enabling them to arbitrarily select the winner and manipulate payouts.
Likelihood:
Occurs whenever the owner calls setWinner() after deposits have been made.
Occurs whenever users trust the vault for fair distribution, since there is no restriction or timelock on winner selection.
Impact:
Impact 1: The owner can steal users’ deposits by selecting themselves or a colluding account as the winner.
Impact 2: Users’ trust and funds are completely compromised, making the vault effectively centralized and exploitable.
Proof-of-Concept (PoC)
The owner has unrestricted access to setWinner(), allowing them to override fair outcome calculations even after deposits are made.
Restrict setWinner() with a finalization time and prevent multiple calls, so the winner can only be set once after the deposit period ends. This enforces fairness and prevents the owner from arbitrarily changing outcomes.
This is owner action and the owner is assumed to be trusted and to provide correct input arguments.
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.