In the Governance.sol contract the cancel function can be called by anyone if the proposer's voting power drops below the proposal threshold over time, allowing malicious actors to cancel proposals.
The vulnerability arises from the cancel function, which allows anyone to cancel a proposal if the proposer's voting power drops below the proposal threshold. Since the voting power of a proposer decays linearly over time due to the nature of it, it is possible for the proposer's voting power to drop below the threshold during the proposal's lifecycle. This allows any user to call the cancel function and cancel the proposal, even if the proposer initially had sufficient voting power.
Consider the following scenario:
A user creates a proposal with sufficient voting power (e.g., 150,000) above the proposal threshold (e.g., 100,000).
Over time, the user's voting power decays linearly due to the nature of its calculation.
Before the proposal is executed, the user's voting power drops below the proposal threshold (e.g., to 90,000).
Any user can now call the cancel function and cancel the proposal, even if the proposal had significant support.
By allowing anyone to cancel a proposal if the proposer's voting power drops below the threshold, the protocol introduces a potential attack vector where malicious actors can disrupt the governance process. Proposals that have significant support and are close to execution can be canceled, undermining the integrity and reliability of the governance system. This can lead to frustration among users and a lack of trust in the protocol's governance mechanisms.
Manual Review
To mitigate this vulnerability, update the cancel function to restrict cancellation to a whitelist of users or abolish the cancel functionality as a whole.
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.