The quorum for proposal is actively calculated for every proposal where is should be set and stable after the proposal is created. This allows users which are near lock expiring time to manipulate the quorum and pass dangerous proposals.
state is a function that is responsible for returning correct proposal state based on current votes. It uses quorum() function to perform checks against current voting state.
The issue is that quorum function uses current total voting power not total voting power at the snapshot. This allows user to vote for proposal and after his lock expires, he can withdraw and lower the TotalVotingPower. Not only his votes are recorded on state but also the total quorum is smaller which allows attacker or attackers to manipulate the voting results and pass dangerous proposals.
User can manipulate voting and pass dangerous proposals.
Manual Review, Hardhat
Use snapshots to record totalVotingPower at the proposal creation. Quorum should not change for the proposal because it opens possibilities for attackers to manipulate voting.
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.