Root Cause
Term Labs' governance system allowed token-weighted on-chain voting to approve asset transfers from strategy vaults. The governance token had low on-chain liquidity, which meant a relatively small capital outlay could acquire a controlling share.
The protocol had no:
- Minimum quorum sufficient to resist a small capital attacker
- Timelock between proposal passing and execution (or an insufficient one)
- Guardian/veto mechanism to block malicious proposals
This is a structural governance capture vulnerability, not a smart-contract code bug.
// Conceptual vulnerable governance pattern
function executeProposal(uint256 proposalId) external {
Proposal storage p = proposals[proposalId];
require(p.forVotes > p.againstVotes, "vote failed"); // no quorum floor
require(block.timestamp >= p.eta, "timelock active"); // timelock may be zero or very short
// execute arbitrary call — attacker voted to drain the vault
(bool ok,) = p.target.call(p.calldata_);
require(ok);
}
Attack Steps
| Step | Action |
|---|---|
| 1 | Attacker withdrew 2 ETH (~$951 equivalent) from Tornado Cash to fund attack wallets |
| 2 | Purchased enough TERM governance tokens at low market cost to hold a majority vote |
| 3 | Submitted governance proposals to call transfer() on strategy vault contracts |
| 4 | Voted in favour with the majority stake; proposals passed without contest |
| 5 | Executed proposals: drained |
| 6 | Swapped USDC to ~1.6M DAI; laundered through mixers |
Impact
- Loss: ~$8.5M (2,843 ETH + 1.68M USDC)
- Chain: Ethereum
- Protocol: Term Labs (Term Finance)
- Attack cost: ~$951 — a 9,000× return on capital
- Flagged by CertiK
Lessons for Auditors
- Governance token market cap must exceed potential exploit gain. If the cost to acquire a majority vote is less than the value of assets under governance, the protocol is exploitable by construction. Model this ratio explicitly during audits.
- Timelocks are a critical last line of defence. A 48–72 hour timelock between proposal passing and execution gives the community and team time to detect and cancel malicious proposals. Zero or short timelocks are unacceptable for asset-transfer proposals.
- Quorum requirements must scale with TVL. Static quorum thresholds become inadequate as TVL grows or as governance token liquidity shrinks. Use TVL-relative quorum floors.
- Monitor for large unexpected token acquisitions. Pre-attack governance token accumulation is detectable. Protocols should have on-chain watchers that alert on sudden large transfers into voting wallets before governance windows open.