Root Cause
Tectonic Finance accepted TONIC — its own native governance token — as collateral in its lending markets. TONIC had approximately $305K in weekly trading volume, making its spot price trivially manipulable relative to Tectonic's ~$120M in TVL.
The oracle configuration read TONIC's price directly from on-chain spot prices without any circuit breaker, time-weighted average price (TWAP), or volatility-based collateral suspension. When an attacker drove the spot price up ~100× in ~10 minutes via coordinated thin-pool purchases, the lending contracts accepted the inflated valuation as collateral — because that is exactly what they were programmed to do.
// Simplified vulnerable collateral valuation (Tectonic V1 pattern):
function getBorrowCapacity(address account) view returns (uint256) {
uint256 tonicPrice = priceOracle.getUnderlyingPrice(tTONIC); // Reads live spot — no TWAP
uint256 tonicBal = tTONIC.balanceOf(account);
uint256 collatValue = tonicBal * tonicPrice / 1e18;
return collatValue * collateralFactor / 1e18;
}
// Fix: replace getUnderlyingPrice() with a 30-min TWAP source and
// add: require(priceDeviation(tonicPrice) < MAX_DEVIATION, "price spike");
This is a textbook thin-liquidity oracle manipulation: the lending protocol's code was correct, but its price source was insecure for a low-liquidity asset. Governance tokens are especially dangerous collateral because a hostile actor controls the token supply and can inflate price with minimal capital relative to the protocol's TVL.
Attack Steps
| Step | Action |
|---|---|
| 1 | Attacker identifies TONIC's thin liquidity ($305K weekly volume vs. ~$120M protocol TVL) |
| 2 | Executes coordinated market buys to drive TONIC spot price ~100× in ~10 minutes |
| 3 | Deposits inflated TONIC as collateral across 9 Tectonic lending markets |
| 4 | Borrows $120.4M in blue-chip assets (USDC, ETH, CRO, and others) against worthless collateral |
| 5 | Begins bridging funds off-chain via Cronos cross-chain bridges |
| 6 | Cronos validators detect anomaly; vote to halt block production |
| 7 | Validators execute rollback of 10,961 blocks (~1h 54m of chain history) — the largest such rollback on any major EVM chain |
| 8 | $111.2M (92.4%) recovered; $9.19M that had already settled cross-chain is permanently lost |
Impact
- Gross attempted exploit: $120.4M
- Recovered via chain rollback: $111.2M (92.4%)
- Permanent loss: $9.19M (confirmed in post-mortem, September 8, 2026)
- Chain disruption: Cronos halted block production; all transactions from the 1h 54m rollback window — including non-exploit user activity — were reverted
- L-BTC equivalent: N/A — EVM exploit on Cronos
- Price impact: TONIC collapsed >99% post-rollback after the manipulation unravelled
Lessons for Auditors
- Never use spot price for collateral valuation of illiquid assets. Require at minimum a 30-minute TWAP from a tamper-resistant source (Uniswap V3, Chainlink, or a multi-source median). A $305K weekly volume token cannot safely secure a $120M lending book.
- Apply a zero or near-zero collateral factor to protocol-native governance tokens. A protocol's own token is uniquely susceptible to price inflation by insiders or attackers who can cheaply manipulate the supply. Many protocols now hard-code a 0% collateral factor for their own governance token.
- Add price-deviation circuit breakers. A check such as
require(newPrice <= lastAcceptedPrice * 110 / 100)per block would have blocked the 10-minute 100× pump from ever reaching the collateral valuation function. - Chain rollback is a governance recovery mechanism, not a security feature. It reverts non-exploit user transactions, harms transaction finality guarantees, and only partially works when cross-chain bridges have already settled. Protocol-level safeguards are always preferable to relying on validator coordination for incident response.
- Bridge rate-limiting protects against loss amplification. The $9.19M escaped specifically because bridge transactions settled before the rollback. Protocols and bridge operators should implement large-withdrawal delays or circuit breakers during anomalous on-chain activity.