3 years ago a critical bug was found OZ governor regarding quorums. The vulnerability was quickly fixed by OZ.
The same exact issue is present in our codebase too.
For a vote to be queued or executed he needs to have more FOR than AGAINST votes, but before that it would need to first pass the quorum. Bellow we can see that quorum is veTotalSupply * quorumNumerator / 100, where quorumNumerator can be 2 and up to 20, with 4 as default.
In order for votes to pass we first need 4% (by default) of voting power to have been voted on this proposal.
However, if proposals don't pass this threshold nothing happens to them, they just sit. They are not active and cannot be voted FOR or AGAINST, but with a move in quorumNumerator they can "pass" and be queued.
Example:
Current quorum threshold is 10%
There is not that much activity and a vote reaches 9% with 60% FOR and 40 AGAINST
Since it didn't reach quorum it didn't get queued or executed
After one year the activity has increased drastically
A new proposal passes for the quorum to be lowered to 8%
The first proposal gets executed by a malicious user and the funds get send to a contract that is long dead
Old, long gone proposals, that have not reached their quorum can be queued and executed.
This is of course dangerous as 1 or 2 or 3 yaer old proposals might send funds to contracts that aren't active anymore.
Manual review
Add an expiry to proposals, for example after they have finished they have 1 month to be queued or they will be expired.
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.