Euler Finance Exploit
A missing health check on Euler's donateToReserves function let an attacker create a self-liquidatable position and walk away with $197M — most of it returned.
- Date
- Victim
- Euler Finance
- Chain(s)
- Status
- Recovered
On March 13, 2023, the Euler Finance lending protocol was exploited for roughly $197M. Nearly all of it was returned by the attacker over the following month, making this the largest recovered exploit on Ethereum at the time.
What happened
Euler exposed a donateToReserves function that allowed any holder of eTokens to donate them to the protocol's reserves. The function decremented the donor's balance but did not run a health check on the donor's resulting position.
By taking a flash loan, depositing as collateral, borrowing against it, and then donating a slice of their eToken balance, an attacker could push their own account underwater on purpose. They then liquidated themselves in the same transaction, exploiting Euler's discounted-liquidation reward to extract more value than they'd put in. Repeating in a loop drained the lending pools.
Aftermath
- The Euler team paused the contracts within hours and began on-chain negotiation with the attacker.
- The attacker returned all funds — roughly $197M — over the following weeks, citing apparent regret. The case remains unusual among large DeFi exploits.
- Euler published a detailed post-mortem and has since redeployed with re-audited contracts.
Why it matters
The bug was not in flash loans, oracles, or liquidation logic — those were all working correctly. The flaw was a single missing invariant: every function that modifies a user's balance must call the same health-check helper. Several lending protocols audited their codebases for analogous omissions in the weeks following.
Sources & on-chain evidence
- [01]medium.comhttps://medium.com/euler-xyz/the-march-13-2023-euler-attack-d5cd462f5ee2
- [02]twitter.comhttps://twitter.com/eulerfinance/status/1635413933076774914
- 0xc310a0affe2169d1f6feec1c63dbc7f7c62a887fa48795d327d4d2da2d6b111d