★ delegatecall/call in proposal execution without allowlist
Compound V3 (Comet)'s assessment for RD-F-039 — scored red on the v1.7.0 rubric. The evidence below is the curator's reasoning for this score.
Evidence summary #
GovernorBravoDelegate.execute() calls timelock.executeTransaction(targets[i], values[i], signatures[i], calldatas[i], eta). Timelock.executeTransaction() performs target.call{value}(callData) with NO enforced allowlist on target or calldata. Any address can be targeted. Comet exposes approveThis(asset, manager, amount) and withdrawReserves(address to, uint amount) callable by governor/Timelock — full drain vectors. Demonstrated by Proposal 289 (July 2024): 682,191 vs 633,636 votes, $24M COMP nearly transferred; cancelled only by social negotiation with attackers.
Sources #
- GitHub
- https://www.web3isgoinggreat.com/?id=compound-dao-governance-attackretrieved 2026-04-28
Methodology #
Determine whether the governance executor contract uses `delegatecall` or `call` with proposal-supplied target, without enforcing an allowlist of permitted targets.
See the full factor methodology and distribution across all protocols →