Governance vulnerabilities in disclosed bug bounty reports

When voting power is cheap to rent and execution is fast to reach, governance is an attack surface with admin privileges attached.

Reports indexed
90
Total paid
$350k
Critical
0
Largest payout
$350k

Governance systems concentrate every privileged action behind one process, which makes flaws in that process equivalent to a compromise of the whole protocol. The findings split between acquiring voting power that should not be acquirable and executing a proposal that should not be executable.

On the acquisition side: voting weight counted at the current block instead of a snapshot, delegation that can be recycled within a transaction, and tokens that remain votable while deposited elsewhere. On the execution side: timelocks that can be bypassed through a queued call, proposal payloads that differ between the vote and the execution, and quorum computed against a supply the proposer can change.

Severity in this class is usually rated on what the successful proposal could reach, which is why so many of these reports are graded critical even where the exploit path is long.

What reviewers look for

  • Voting power read at the current block rather than from a snapshot
  • Delegation transferable within a single transaction
  • Timelock bypasses through queued or nested calls
  • Quorum measured against a supply the attacker can inflate
  • Proposal payloads mutable between voting and execution

Curated highlights

The largest disclosed payouts in this group, with our own summary of each. Every report links back to the original disclosure.

highGovernance attackEVM-Solidity$350k

Governance proposal executes arbitrary call via delegatecall module

A severe vulnerability in the governance timelock contract enabled proposal execution using DELEGATECALL without restricting the target address to a verified allowlist. Because the delegatecall target contract operated within the context of the timelock's storage without layout restrictions, a malicious proposal could overwrite key storage slots. An attacker leveraging flash loans or governance weight could pass a proposal that delegated to a custom contract, overwriting the timelock admin address in slot 0 to hijack governance authority and drain treasury funds.

DAO Treasurycode4renaJun 19, 2023Open
mediumGovernance attackEVM-Solidity$0

Reserve: The default Governor Anastasius is unable to call `resetStakes`

In Reserve Protocol, executing a proposal through the default Governor Anastasius contract to call `resetStakes` permanently reverts. During execution, `resetStakes` increments the protocol's internal staking `era` variable. However, the governance contract checks that the proposal started in the current era *after* executing the call payload rather than before. As a result, the state change induced by `resetStakes` causes the trailing era validation check to fail, preventing governance from ever executing stake resets.

Reservecode4renaOct 3, 2024Open
mediumGovernance attackEVM-Solidity$0

Reserve: Dutch auctions can fail to settle if any other collateral in the basket behaves unexpectedly

In Reserve Protocol's BackingManager, settlement of Dutch auctions attempts to chain directly into collateral rebalancing using a Solidity try-catch block. The implementation assumes that receiving empty error data inside the catch block exclusively signals an out-of-gas condition. However, external operations during rebalancing—such as interactions with upgradeable collateral tokens or calls to empty contract addresses—can also revert with empty error bytes. As a result, unexpected reverts from collateral assets cause auction settlements to fail entirely, preventing trades from clearing at fair market value.

Reservecode4renaOct 3, 2024Open
mediumGovernance attackEVM-Solidity$0

BendDAO: `YieldEthStakingLido` lacks a limit on the max stake amount, which may result in the unstake exceeding `MAX_STETH_WITHDRAWAL_AMOUNT`, resulting in the token not being retrieved

The YieldEthStakingLido contract contains a logic flaw that prevents users from unstaking funds if their staked stETH balance exceeds Lido's 1,000 stETH limit per withdrawal request. Because the contract attempts to process the entire withdrawal amount in a single batch, any position exceeding this limit will cause the transaction to revert. This leads to a denial of service where user funds become locked within the YieldEthStakingLido contract with no mechanism to recover them.

BendDAOcode4renaSep 3, 2024Open
highGovernance attackEVM-Solidity$0

BendDAO: Bad debt is never handled which places insolvency risks on BendDAO

BendDAO's current lending architecture lacks a formal mechanism for managing bad debt, creating significant solvency risk during market crashes. When the value of collateral falls below the borrowed debt, the protocol's liquidation logic fails to clear the outstanding balance, either because it cannot handle remaining debt after collateral exhaustion or because the liquidation is not economically profitable. This failure effectively traps liquidity within the protocol, preventing depositors from withdrawing their funds and resulting in an indefinite denial of service during insolvency events.

BendDAOcode4renaSep 3, 2024Open
mediumGovernance attackEVM-Solidity$0

BendDAO: Changing auction duration will have effect on ongoing auctions

The protocol incorrectly calculates auction expiration times by dynamically adding a configurable duration parameter to a loan's start timestamp. Consequently, if the protocol administrator updates the auction duration, it retroactively affects all auctions currently in progress. This can lead to unexpected premature auction closures, potentially preventing borrowers from redeeming their debt or causing liquidators to settle auctions earlier than participants anticipated.

BendDAOcode4renaSep 3, 2024Open

All reports in this group

Chains where this class shows up

Related vulnerability category pages