The GaugeController::vote function lacks validation for the total voting weight across all gauges per user. While it checks that individual vote weights don't exceed WEIGHT_PRECISION (100%), it fails to ensure that the sum of a user's votes across all gauges of all types doesn't exceed 100%. This allows users to vote with more than their fair share of voting power by allocating 100% to multiple gauges.
This vulnerability undermines the democratic voting system by allowing users to have more influence than intended, potentially leading to:
Unfair reward distribution
Manipulation of gauge weights
Centralization of voting power
install @nomicfoundation/hardhat-foundry
import the library in hardhat.config.cjs: require("@nomicfoundation/hardhat-foundry");
npx hardhat init-foundry
In hardhat.config.cjs you need to "comment out" the forking setting of the hardhat network
Create a foundry folder in test/unit directory
Create POC.t.sol inside of foundry folder.
Copy and paste the code below to run it.
User has voting power from locked veRAACToken
User votes 100% (10000) weight on an RWA gauge
User votes another 100% (10000) weight on a RAAC gauge
Both votes are accepted despite totaling 200% weight
Manual Review
Track the total votes of users and adding checks so that new total votes does not exceed 100%.
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.