The castVote function in the Governance contract uses current voting power instead of historical voting power at proposal creation time, allowing users to manipulate votes through temporary voting power acquisition.
In the castVote function, voting power is checked at the time of voting rather than using a snapshot from when the proposal was created:
This creates an attack scenerio where:
An attacker can wait for a proposal to be created
Acquire voting power (e.g., through borrowing or flash loans)
Cast their vote with the temporarily acquired power
Release the voting power immediately after
The vote remains valid despite no longer having skin in the game
Allows vote manipulation through temporary token holdings and could lead to malicious proposals being passed
Manual code review
Implement vote power snapshotting:
Update the IveRAACToken interface to include:
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.