Back to Flash News

15.45 ETH Stolen from ether.fi Legacy Queue Vulnerability

The legacy AtomicQueue contract of ether.fi was exploited, resulting in approximately 15.45 ETH being transferred away. The root cause was the lack of access control on the solver parameter passed to the solve() function.

This function neither verifies that the solver equals msg.sender nor requires a signature, registration, or authorization. The attacker first used updateAtomicRequest() to write a malicious AtomicRequest, then forcibly designated the victim's address as the solver; the queue subsequently called finishSolve on the victim, executing want.transferFrom(solver, users[i], assetsToUser), withdrawing the ERC-20 allowance previously granted to the contract. What was stolen was the user's residual authorization, not the principal of the treasury.

Public technical details reveal that the exploited system was the old withdrawal queue built by Veda, not the current Liquid treasury. The attacker also internally deployed nearly worthless tokens, forged quotes, and completed the extraction in a single transaction using a wrapper contract and the solver contract, with on-chain records showing about 15.4536 ETH and gas fees of approximately 0.000685 ETH. After being exchanged through a decentralized exchange, the funds were split into multiple transactions of 10, 1, and 0.1 ETH entering a mixer. ExVul issued a public alert first, while SlowMist claimed to have privately notified the ether.fi team in advance and published the attacker's address and the vulnerability contract address.

In a normal process, users would list their treasury share tokens liquidETH for exchange into target assets, with the solver calling solve() to complete the transaction. This time, solve(offer, want, users[], runData, solver) treated the solver as a freely fillable parameter, allowing any address that still had authorization on the contract to be named as the "solver." The protocol's response includes full compensation for affected users.

From a market mechanism perspective, this is the pricing of authorized stock, not a breach of TVL. The sell orders come from addresses that still have unlimited or unrevoked authorizations; the buy orders are from vulnerability hunters exchanging cheap fake tokens for real allowances. The beneficiaries are the attackers who can scan residual allowances, as well as the team that will handle compensation and contract retirement afterward; the pressured party is the users who treat "authorizing the protocol" as a one-time action. Funds moved from user wallets via transferFrom into the attack contract, then into the mixer, with the protocol treasury itself not being directly drained.

On-chain supplements: The vulnerability contract and attack address are publicly traceable; the incident occurred in the legacy queue rather than the main staking path, indicating that the old solver interface remained callable after the main product iteration.

Source: Public information

ABAB AI Insight

After ether.fi made liquid re-staking its main product, withdrawals and transactions were separated into queues and solvers. The AtomicQueue left by Veda wrote the solver as a callable parameter but did not hardcode "who has the right to be the solver." This is similar to the 2022 Rubic routing whitelist error and the Multichain permit being bypassed, all belonging to authorization surface attacks: users think they are approving the protocol, but in reality, they are approving an allowance that any caller can borrow. The discussion of time-limited authorization schemes has been ongoing for years but has not become the default, thus the old approve has become a stockpiled attack material.

The capital path is the scanner economy. The attacker's cost is a low gas composite transaction plus an air token; the profit depends on how much unrevoked allowance can still be scanned on-chain. The protocol side uses compensation to convert reputation loss into operational expenses, avoiding the 15 ETH incident from evolving into a bank run narrative. Resource mobilization involves security companies first privately messaging and then going public, with the project team promising to cover costs, rather than immediately freezing the main treasury. The motivation is clear: the main TVL cannot be discounted due to authorization vulnerabilities in legacy interfaces.

Comparable cases include numerous DeFi incidents where "upgraded, old contracts not closed": the router has changed, but the allowance still points to the old address. The industry phase is in the tail cleanup of a control period—new treasury and new solvers have already been launched, but the old queue cannot simply self-destruct due to remaining orders or authorizations. Whoever first closes the authorization pays less in compensation; whoever makes the solver an open parameter supplies the scanners.

Structural judgment belongs to the misalignment of pricing power caused by incomplete technical replacement. The mechanism is: ERC-20 authorization is a persistent right, while the solver identity is a transient parameter. When both meet in the same function, the rights are hijacked by the parameters. The 15.45 ETH is a sample; what is truly being priced is the entire market's unexpired approve balance.

ABAB News · Cognitive Law

  1. Authorizing the protocol is equivalent to authorizing the old entry of the protocol

  2. The amount of the vulnerability is small, but the authorization stock is large

  3. If the solver does not verify identity, the allowance becomes a public good