The rsETH Heist: Turning Bridges Into Exit Liquidity

On April 17–18, 2026, roughly 116,500 rsETH – about 292 million USD at the time – were effectively “created” via an exploit on KelpDAO’s rsETH bridge and then used as collateral on Aave V3 to borrow large amounts of wETH. Aave itself had no classic smart contract bug, yet it ended up sitting on roughly 200 million USD in bad debt and a massive TVL exodus.This article is not about outrage; it is about architecture. How could a failure in a cross‑chain stack turn the largest DeFi lending protocol into exit liquidity for a bridge exploit?
1. Architecture Overview: rsETH, KelpDAO, LayerZero, Aave
rsETH and KelpDAO in a nutshell
rsETH is a restaking token: it represents ETH exposure plus additional yield from providing security services to other networks or protocols (EigenLayer‑style). From a technical perspective, rsETH is a derivative on staked ETH, with extra complexity from the restaking framework and its slashing/penalty logic.KelpDAO builds a protocol around rsETH, including cross‑chain bridging so that rsETH can live on multiple chains. This bridging is implemented using a messaging layer (LayerZero) and custom bridge contracts that lock/mint or burn/release rsETH across chains.
LayerZero as messaging layer
LayerZero provides a generic cross‑chain messaging infrastructure. Applications like KelpDAO implement their own bridge logic on top of that: a contract on chain A emits events, off‑chain components relay and verify them, and a contract on chain B mints/releases tokens accordingly.The critical question is always: who decides that a message (“user X deposited Y tokens on chain A”) is valid? If the validation process, keys, or configuration are compromised or poorly designed, fake messages can be accepted as if they reflected real deposits.
Aave as a modular lending protocol
Aave V3 is a generalized money market:
Governance listings define which tokens are supported.
Risk parameters (LTV, liquidation thresholds, caps) are set per asset.
Aave treats a token as “real” if it exists on‑chain, has a price feed, and has been listed by governance.
Aave does not know whether a token came from a legit deposit, a flawed bridge, or a centralized mint function. If governance has enabled an asset as collateral and the oracle returns a price, the lending engine treats it as valid collateral.
2. The Exploit: Fake Bridge Messages and Synthetic Collateral
Step 1: Forged bridge messages – phantom deposits
The exploit started on KelpDAO’s rsETH bridge built on top of the cross‑chain messaging layer. A typical lock‑mint bridge is supposed to work like this:
User locks asset on chain A in a bridge contract.
An off‑chain relayer/oracle observes the lock event.
A verified message is delivered to the bridge contract on chain B.
The bridge contract on chain B mints or releases the corresponding asset to the user.
In this incident, step 3 was the weak link.
The attacker managed to cause the target bridge contract to accept a cross‑chain message as “valid” even though there was no matching deposit on the source chain.From the bridge contract’s perspective, it simply received a legitimate callback (e.g., lzReceive or similar), telling it to release or mint rsETH to the attacker’s address.
Because the validation layer was compromised or misconfigured, the bridge contract trusted that message and released about 116,500 rsETH to the attacker – effectively out of thin air.This is not a classic reentrancy or arithmetic bug inside the Solidity code.
It is an integrity failure in the cross‑chain validation assumptions: the smart contract interface was used as designed, but the guarantee “messages represent real deposits” was broken.
Step 2: Turning fake rsETH into real wETH on Aave
Once the attacker held this freshly minted rsETH, they behaved like a perfectly normal DeFi user. rsETH had been listed on Aave V3 as a collateral asset, with parameters reflecting its perceived status as a high‑quality ETH‑derivative.The attacker then:
Deposited rsETH into Aave V3, creating a large collateral position.
Borrowed wETH against that rsETH up to the allowed LTV and health factor.
Withdrew the borrowed wETH from Aave and moved it elsewhere.
From Aave’s perspective:
Collateral: rsETH, priced via the rsETH price oracle.
Debt: wETH borrow positions of the attacker.
As long as rsETH is assumed to be real and reasonably liquid, the position looks healthy. Once you realize that part of the rsETH supply is backed by nothing (fake bridge messages), the apparent solvency evaporates, and the protocol is left holding economically worthless or impaired collateral.
3. Why Aave’s Code Was “Innocent” – but the Protocol Was Still Hit
No classic bug in Aave’s contracts
Aave did exactly what its code is supposed to do:
Accept deposits of supported tokens.
Track collateral values via oracles.
Allow borrowing within risk limits.
There was no missing access control on Aave, no reentrancy vector, no faulty liquidation logic exploited here. The attacker didn’t have to trick Aave’s contracts; they used them exactly as intended.
The real issue: hidden trust assumptions about external assets
The core problem is the implicit trust model:
If a token exists on the chain, is upgradable/audited enough, has a price oracle, and has passed governance, it is treated as a legitimate asset.
Aave has no built‑in way to distinguish “honest” supply from supply that was minted due to an upstream bridge failure.
By listing rsETH as collateral, Aave effectively inherited the full security model of:
The ETH staking layer
The restaking framework
KelpDAO’s protocol
The cross‑chain bridge / messaging layer
When that stack breaks, Aave’s solvency can be hit even though its own contracts are sound. Economically, the attack path was: Bridge exploit → fake collateral → real borrow → Aave bad debt.
4. Risk Layers: From Native Assets to Deep Derivative Stacks
You can think of DeFi assets in layered risk terms:
Native L1 assets
ETH, native chain stablecoins, etc.
Liquid staking tokens (LSTs)
stETH, cbETH, etc. – depend on the staking protocol, validator set, and slashing mechanics.
Restaking tokens / LRTs
rsETH and friends – depend on the LST plus the restaking framework and its additional slashing/contract risk.
Bridged variants of (2) or (3)
LSTs or LRTs that live on other chains via bridges or generic messaging systems.
Each layer inherits the risks of all lower layers plus its own:
rsETH depends on ETH + staking protocol + restaking infra.
Bridged rsETH depends on all of the above plus the bridge security model.
When a lending protocol like Aave accepts such an asset as collateral, it implicitly accepts the entire stack of risks. The exploit made these accumulated risks visible in one spectacular failure mode.
5. Design Lessons for Protocols: How Could This Have Been Prevented or Mitigated?
5.1 Quarantined collateral and risk buckets
Instead of treating all collateral assets uniformly, protocols can model explicit risk buckets. For example:
Bucket A: Native L1 assets + canonical LSTs with robust decentralization.
Bucket B: Restaking tokens, complex yield derivatives, RWA tokens.
Bucket C: Bridged derivatives, cross‑chain synthetic assets.
Rules for a “Bucket C” asset might include:
Lower LTV and liquidation thresholds.
Strict supply caps and slow, governance‑gated cap increases.
Isolation in a separate pool so a failure cannot trash the entire main market.
In pseudocode, a minimal risk‑bucket policy could look like:textenum RiskBucket { NATIVE, LST, RESTAKING, BRIDGED_DERIVATIVE } struct AssetConfig { RiskBucket bucket; uint256 maxLTV; // in basis points uint256 liquidationThresh; uint256 supplyCap; bool isolatedPool; } // Example: enforce stricter limits for bridged derivatives function getEffectiveLTV(address asset) public view returns (uint256) { AssetConfig memory cfg = assetConfigs[asset]; if (cfg.bucket == RiskBucket.BRIDGED_DERIVATIVE) { // Cap LTV regardless of governance intent uint256 hardCap = 4000; // 40% return cfg.maxLTV < hardCap ? cfg.maxLTV : hardCap; } return cfg.maxLTV; }
An even stronger model would refuse to allow “Bucket C” collateral in the main pool altogether and route it to a separate, limited “experimental” or “quarantined” market.
5.2 Circuit breakers for bridge and restaking events
Lending protocols can watch for anomalies and react automatically:
On‑chain: abnormal minting patterns, abnormally large deposits vs. historical baselines, sudden supply spikes.
Off‑chain: explicit incident reports from bridge teams, oracle‑level flags, security advisories.
A simple pattern is: if an asset exhibits anomalous behavior, freeze it as collateral until governance can assess the situation. In pseudocode (simplified and ignoring governance nuances):textmapping(address => bool) public collateralFrozen;mapping(address => uint256) public lastObservedTotalSupply; function checkAndUpdateSupplyAnomaly(address asset) external { uint256 currentSupply = IERC20(asset).totalSupply(); uint256 last = lastObservedTotalSupply[asset]; // First call bootstrap if (last == 0) { lastObservedTotalSupply[asset] = currentSupply; return; } // If supply increased more than 50% in one block / very short window, // mark as anomalous and freeze collateral usage. if (currentSupply > last * 150 / 100) { collateralFrozen[asset] = true; emit CollateralFrozen(asset); } lastObservedTotalSupply[asset] = currentSupply; } function canUseAsCollateral(address asset) public view returns (bool) { if (collateralFrozen[asset]) return false; // additional checks... return true; }In practice, you would use time windows, EMA baselines, and oracle‑fed signals rather than pure totalSupply jumps. But the principle is: if something looks structurally wrong, the protocol should automatically go into a conservative mode for that asset.
5.3 Governance and listing processes that model upstream risk
Collateral listing today often focuses on:
Market cap and liquidity.
Volatility profile.
Smart contract audits.
For complex derivatives and bridged tokens, that is not enough. A more appropriate checklist includes:
How exactly is the bridge validation implemented? Who holds the keys? Who can modify the configuration?
Is there a formal spec or at least a high‑assurance audit of the messaging contract and its security assumptions?
How are failures handled? Are there kill switches? Can admins arbitrarily mint?
How correlated is this asset’s risk with other assets already listed (e.g., multiple collaterals depending on the same bridge stack)?
Encoding some of this risk categorization on‑chain (via the RiskBucket example or similar) and tying it to automatic limits reduces the blast radius when something goes wrong upstream.
6. Lessons for Power Users: How to Read DeFi Risk Properly
From a power user or fund perspective, the main lesson is: you never just invest in a token; you invest in an entire security story.Key questions:
What is the deepest layer of actual security? L1 consensus, or somewhere else?
How many derivative layers sit between you and the underlying asset?
How many bridges and messaging systems are in the path?
How many protocols are coupled through this asset as collateral or LP positions?
The Aave/rsETH incident shows:
Even if the major protocol (Aave) is clean, you are still exposed to all upstream infrastructure it relies on through its collateral set.
A portfolio of “Aave + rsETH strategies” is not diversified; it is double‑levered on exactly the same restaking/bridge stack.
7. Composability: Feature and Bug at the Same Time
DeFi’s original promise was money Legos: composable building blocks you can stack at will. The Aave/rsETH exploit demonstrates the dark side of that promise: if too many blocks sit on top of a shaky bridge, the whole tower collapses when the bridge fails.On a technical level, this was a cross‑chain validation failure, not a bug in Aave’s core contracts. On an economic level, that distinction is cold comfort to depositors whose funds were locked or impaired.If we want DeFi to evolve into robust financial infrastructure, we have to modularize risk as aggressively as we modularize liquidity – across asset layers, bridges, restaking stacks, and lending protocols, not just inside isolated smart contracts.