The recordVote function in veRAACToken can be exploited by attackers to prevent legitimate users from voting by front-running their transactions and marking them as having already voted.
The recordVote function allows any address to record a vote for any voter without authorization:
The issue is that there's no validation to ensure that:
The caller is the actual voter
The caller is the Governance contract
The voter actually intended to cast a vote
Attackers can front-run legitimate voting transactions and mark users as having voted
Users can be permanently prevented from voting on specific proposals
The governance system can be manipulated by blocking specific voters
Manual Review
Restrict the function to be called only by the Governance contract or require the voter to be the caller.
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.