Core Contracts

Regnum Aurum Acquisition Corp
HardhatReal World AssetsNFT
77,280 USDC
View results
Submission Details
Severity: medium
Invalid

Unauthorized Proposal Cancellation via Voting Power Manipulation

Summary

The Governance::cancel function in the governance contract contains a flawed logic check that allows anyone to cancel a proposal if the proposer’s voting power drops below the required threshold. This introduces a governance manipulation risk, where attackers can forcefully cancel legitimate proposals by temporarily reducing the proposer’s voting power (e.g., through delegation, unstaking, or flash loans). Such an exploit can be used to block governance decisions, prevent security upgrades, or disrupt fund allocations.

Vulnerability Details

if (msg.sender != proposal.proposer &&
_veToken.getVotingPower(proposal.proposer) >= proposalThreshold) {
revert InsufficientProposerVotes(proposal.proposer,
_veToken.getVotingPower(proposal.proposer), proposalThreshold,
"Proposer lost required voting power");
}

💥 Issue: If the proposer's voting power is manipulated below proposalThreshold, anyone can cancel the proposal even if the proposer still wants it to continue.

https://github.com/Cyfrin/2025-02-raac/blob/main/contracts/core/governance/proposals/Governance.sol#L262

Impact

1️⃣ Beanstalk Governance Attack (2022) - Flash Loan Manipulation

📌 What Happened?

  • The Beanstalk protocol, a DeFi stablecoin project, allowed governance votes based on token holdings.

  • Attackers took out a $1 billion flash loan, giving them temporary majority voting power.

  • They passed a proposal that transferred $182 million from the treasury to their own wallet.

💥 Relation to Your Exploit:

  • In your case, an attacker could use a flash loan to temporarily boost their voting power, remove delegations from the proposer, and cancel a critical proposal before repaying the loan.


2️⃣ MakerDAO Delegate Attack Attempts (2020)

📌 What Happened?

  • MakerDAO’s governance system allows users to delegate voting power.

  • There have been multiple documented attempts to bribe large delegates into shifting their votes at crucial moments.

  • Some proposals were deliberately blocked by suddenly shifting votes before they could pass.

💥 Relation to Your Exploit:

  • Attackers in your case could bribe delegates to remove delegation from the proposer, causing their voting power to drop below the threshold, allowing a proposal to be canceled.


3️⃣ Compound Governance Proposal #64 Attack Attempt (2021)

📌 What Happened?

  • A malicious governance proposal was submitted to upgrade the Compound protocol with a backdoor.

  • The proposal would have passed, but voting power was manipulated at the last minute by large whales moving funds.

  • The attack failed, but it highlighted how voting power shifts can be used to influence governance decisions.

💥 Relation to Your Exploit:

  • Attackers in your case could strategically move voting power away from the proposer, ensuring that the proposal gets canceled before execution.

Tools Used

Recommendations

Modify the cancel() function to require explicit proposer approval:

if (msg.sender != proposal.proposer) {
revert("Only proposer can cancel");
}
Updates

Lead Judging Commences

inallhonesty Lead Judge 7 months ago
Submission Judgement Published
Invalidated
Reason: Incorrect statement

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.

Give us feedback!