The GaugeController
contract declares a VOTE_DELAY
of 10 days but does not enforce it in the vote()
function. This oversight allows users to cast multiple votes in rapid succession.
Affected Code :
GaugeController.sol
, specifically the vote()
function -
Issue:
Although lastVoteTime[msg.sender]
and VOTE_DELAY
are defined, there is no require
statement to ensure the caller waits 10 days before voting again. Nor is lastVoteTime[msg.sender]
updated to the current timestamp after a vote.
Exploit Scenario:
An attacker with a high veRAAC balance can call vote()
multiple times in quick succession to rapidly shift gauge weights. This repeated manipulation distorts the reward allocation process and undermines governance.
Rapid, repeated voting can skew gauge weights, giving an attacker undue influence over emission distributions.
Other users’ votes become less meaningful if one party can continuously re-vote to adjust weights.
Manual code review of GaugeController.sol
, focusing on the vote()
function implementation.
Enforce Vote Delay: Add a check in the vote()
function
Track Vote Timestamp: Immediately after a successful vote, update the lastVoteTime for msg.sender
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.