The Governance contract's proposal execution system contains an atomicity violation where proposals can be marked as executed even when their underlying actions partially fail. This creates a critical mismatch between the proposal's recorded state and its actual execution status.
Governance.sol#_executeProposal
The executeBatch return value indicating success/failure is not captured or checked
The proposal is marked as executed regardless of whether all actions completed successfully
When a governance proposal is executed, it's like a chain of dominos, each action should either all fall perfectly or none at all. However, in the current implementation, some dominos can fall while others remain standing, creating a dangerous half-executed state.
Imagine a critical protocol upgrade proposal that needs to update both interest rates and collateral requirements. The proposal begins execution through the timelock controller, successfully updates interest rates, but fails to adjust collateral parameters. Despite this partial failure, the system marks the entire proposal as executed, leading to mismatched protocol parameters.
Impact The governance system's state tracking shows:
This isn't just a boolean mismatch, it means critical protocol parameters could be left in inconsistent states. For example, a proposal to adjust both lending rates and collateral ratios could leave the protocol with updated rates but old collateral requirements, creating immediate arbitrage opportunities.
Governance proposals can enter an inconsistent state
System state could become inconsistent if multi-action proposals partially complete
System security assumptions about atomic updates are broken
Governance decisions could be partially implemented leading to unexpected behavior
capturing the return value and requiring full execution success before marking the proposal as executed. Think of this like a bank transaction, you wouldn't want a transfer to debit one account but fail to credit another.
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.