Crypto NewsSecurity

Half a dollar bought every vote in one of the Term Finance vaults that was drained

Term Finance's vaults were drained on 23 August after an attacker bought governance votes rather than breaking any code. We read the chain: on seven of the eight vault DAOs the attacker held 100% of the vote, and one of them cost 50 cents.

Editorial hero: an old brass ballot box photographed straight on, lid open and interior empty, large and unobstructed on clear newsprint, headed TERM FINANCE with the subtitle $951 OF VOTES DRAINED THE VAULT

Term Finance’s vault layer was emptied on Sunday 23 August 2026. No contract was broken. The attacker deposited money, received vault shares, wrapped those shares into governance tokens, voted, waited, and then executed a proposal that handed the vaults to a contract it controlled.

We pulled the chain apart ourselves rather than take the summaries. The headline number, roughly $951 for the winning stake, is the expensive half of the operation. The other half cost about the price of lunch.

What the vote actually cost

Voting power in Term’s vault DAOs comes from wrapping vault shares into an Aragon governance token. On the ETH Meta Vault, the attacker deposited 0.5 ether at 05:21:47 UTC on 17 August, received 0.4852161828053485 tmvETH, and wrapped it.

Calling the Aragon TokenVoting plugin ourselves at the proposal’s snapshot block returns a total voting power of 0.5352161828053484. The attacker’s ballot, recorded in the VoteCast log, was 0.48521618280534848. That is 90.658% of every vote in existence.

The reason is on the other side of the ratio. The vault had 2,838.97 tmvETH in issue at that block, and 0.535 of them carried a vote. Just under 0.019% of the shares in the vault held all of the governance.

Then there is the second attack, which almost nobody has looked at. Seven Term Strategy Vault DAOs were taken with a total outlay of 20.087932 USDC and 0.009973 WETH, seeded on 21 August. We queried each of the seven plugins. On every one, the attacker’s voting power is identical to the plugin’s entire total voting power, to the last unit. Not a majority. All of it, because on those seven nobody else had ever wrapped a single share.

The cheapest was tsvParityPrimeUSDC. Half a dollar bought the whole electorate.

Eight Term Finance vault DAOs and the stake that controlled each vote. The ETH Meta Vault at 90.66 per cent from 0.5 ETH, and seven strategy vaults each at 100 per cent, the cheapest from 0.503572 USDC.
Read from the VoteCast logs and each plugin's own totalVotingPower.

The proposal wore the safety mechanism as a costume

This is the detail that explains the six days nobody intervened.

The proposal on the ETH Meta Vault was Aragon proposal 5, created at 05:25:35 UTC on 17 August. Its on-chain metadata, decoded from the ProposalCreated log, reads:

Vote YES to VETO the curator’s proposed vault parameter changes. Otherwise, the transaction will become executable when this proposal expires.

Its title was “Veto strategy vault parameter change”. That is Term’s own veto template, the mechanism by which token holders block a curator. In the queue it looked like routine curator business rather than an attack sitting in the open.

Behind the title were 17 actions. They set the Zodiac Delay modifier’s cooldown to zero and its expiration to zero, enabled the DAO itself as a module, pulled the debt back from four legitimate strategies, then added a contract called “Fixed Recipient WETH Exit Strategy” at 0x184f2E57b4cE135181FA2A2166AC394339016338 as a strategy with an unlimited ceiling and pushed the vault into it.

Six days and one hour, then twelve seconds

The window has been widely reported as seven days. The chain says otherwise. The plugin’s minimum duration reads 522,000 seconds, which is six days and one hour, and the ProposalCreated event opens the vote at 05:25:35 UTC on 17 August and shuts it at 06:25:35 UTC on 23 August. The seven strategy-vault plugins are shorter still, at 176,400 seconds, two days and one hour.

The execution transaction is timestamped 23 August 2026 at 06:25:47 UTC. Twelve seconds after the vote closed, 2,841.7435357919617 WETH left the ETH Meta Vault. The vault had held 2,926.2158842305485 WETH in the block before, so 97.11% of it went, and 84.47 WETH is what the vault reports holding today.

Twenty-two minutes later the second execution took 1,679,639.290442 USDC out of the seven strategy vaults, and 48 seconds later it was swapped into 1,679,642.454089 DAI.

Timeline: 0.5 ETH deposited at 05:21 UTC on 17 August, wrapped into votes a minute later, the proposal opened at 05:25:35 under a veto title, ran 522,000 seconds unopposed, closed at 06:25:35 UTC on 23 August and executed twelve seconds afterwards, moving 2,841.74 WETH.
Every timestamp taken from the transaction logs on Ethereum mainnet.

The parameters were not unusual, the participation was

It is worth being fair to the settings. Reading them off the plugin, the support threshold is 500,000 parts per million, a straight 50%, and minimum participation is 50,000 parts per million, 5%. Those are ordinary Aragon numbers. A 5% quorum is only meaningless when the denominator is 0.535 tokens, and a 50% threshold is only trivial when one address holds 90% of the supply.

Minimum proposer voting power is zero, so anyone holding any wrapped share could open a proposal. Term Labs announced the design itself in January 2025: “Term is adopting @AragonProject to power Vaults’ governance!”

Term Labs shut the vaults and stopped there

Term Labs acknowledged the incident at 07:32 UTC on 23 August and posted a fuller update the same evening:

All Term Meta Vaults were shut down and dao governance roles have been revoked. This shutdown is irreversible and permanently prevents further deposits. Withdrawals remain open.

That update also says the underlying borrowing and lending markets were not affected, that Term is “coordinating with external security teams on remediation and recovery”, and that “If a shortfall remains, we will explore paths to address it.”

Both meta vaults do return isShutdown() true when queried today. What has not appeared, eight days on, is a post-mortem. Neither term.finance nor docs.term.finance carries an incident notice, a list of affected contracts, a recovery plan or a compensation process.

The documentation gap is older than the incident. Term’s Risk Disclosures page lists four risks, and they are Term Repo Risks, Smart Contract Risk, Digital Asset Risk and Ethereum Network Risk. The words governance, vault, quorum and veto appear on it zero times, and its own timestamp puts the last update at 31 October 2024, nearly two years ago.

Yearn moved to separate itself the same evening, because Term’s vaults are built on Yearn V3:

While their contracts are built on Yearn’s V3 architecture, the exploit occurred via a custom governance wrapper around the vaults and this attack vector is not applicable to standard Yearn vault setups.

PeckShield put the loss at about $8.5m, “~2,843 $ETH ($6.87M) & 1.68M USDC ($1.68M)”. The token amounts we can confirm; the dollar total depends on which ether price you pick, so treat it as PeckShield’s figure rather than a settled one.

Infographic: the arithmetic by which about $951 bought control of a DAO. The attacker deposited 0.5 ether on 17 August 2026, worth about $951. That minted 0.4852161828053485 tmvETH in vault shares. Total voting power in existence was 0.5352161828053484, so the attacker's share was 90.66 per cent. Only 0.0189 per cent of the vault's shares had ever been wrapped for voting. The voting window was 522,000 seconds, six days and one hour. Term ETH Meta Vault DAO, Aragon proposal 5, created 17 August 2026, vaults drained 23 August 2026.

Where the money is

Nothing has been returned. The consolidation wallet at 0xD5183d8BfC65a50863C62aF2538198A8288FFc13 still holds 2,543.151524194197 ether and 1,679,642.45 DAI when queried today. On 24 August the operation sent 300 ether through the Tornado Cash router in three deposits of 100, at 17:30, 17:31 and 20:53 UTC.

DefiLlama’s series records what the vaults lost as a product: $12,450,702 on 23 August, $1,607,645 on 24 August, and $1,611,940 today. Across the whole protocol the fall was $25,783,182 to $6,839,200 in a day.

The lock arrived after the door was used

One movement on the chain has not been explained by anyone. Within hours of the drain on 23 August, the ETH Meta Vault’s governance token supply jumped from 0.5352161828053484 to 2,837.814638186479, so almost every remaining vault share was wrapped for voting after the event. Today it reads 2,827.76.

It looks like a defensive lock-down, and the actor behind it is not established. What it demonstrates is the shape of the whole failure: the governance was not weak because the thresholds were low. It was weak because hardly anyone had ever turned their shares into votes, and a DAO whose electorate is empty can be joined for the price of a deposit.

Sources

  1. Proposal creation log, decoded: proposal 5, its window and its 17 actionseth.blockscout.com
  2. The ETH Meta Vault drain transaction on Etherscanetherscan.io
  3. The strategy-vault drain transaction on Etherscanetherscan.io
  4. The 0.5 ETH deposit that bought the voteseth.blockscout.com
  5. VoteCast events on all seven strategy-vault pluginseth.blockscout.com
  6. The Aragon TokenVoting plugin governing the ETH Meta Vaultetherscan.io
  7. The consolidation wallet holding the proceedsetherscan.io
  8. The relay wallet's Tornado Cash depositseth.blockscout.com
  9. Term Labs' incident update on X, 23 August 2026x.com
  10. Yearn's statement on X, 23 August 2026x.com
  11. PeckShield's alert with its loss estimatex.com
  12. Term Labs announcing the Aragon governance design, January 2025x.com
  13. DefiLlama TVL series for TermFinance Vaultsapi.llama.fi
  14. DefiLlama TVL series for TermFinanceapi.llama.fi
  15. Term Finance protocol risk disclosuresdocs.term.finance