About 2,900 rsETH walked out of a Gnosis Safe wallet on Ethereum on Tuesday, worth roughly $7.8 million. The person who found the bug never got to keep a single token of it.
A bot known as “yoink” spotted the attack transaction before it confirmed, front-ran it and took the tokens instead. It paid roughly $47,000 to jump the queue, then moved 2,882 rsETH to a separate address. Security firms BlockSec, Blockaid and SlowMist all described the same sequence.
The check that approved everybody
The victim’s wallet was configured to let a helper contract move money for it. That’s a normal setup, and if you automate any part of your trading you probably have something similar sitting in your own approvals list right now.
The helper was supposed to confirm that whoever called it had permission. SlowMist and BlockSec found the check approved anyone who named the helper itself as the target. So the contract vouched for its own caller, which means it vouched for everyone.
“The root cause was a flawed authorization check in the Multicall contract,” AstraSec said in a post on X.
The exit ran through a token nobody had heard of an hour earlier
The attacker dumped around 2,900 rsETH into a trading pool built minutes before the theft, paired against a worthless token called Permissionless Attacker Token. The wallet got a receipt for it. The receipt was worth nothing.
That’s the part worth sitting with. On paper the wallet made a trade. It swapped $7.8 million of liquid staking tokens for a line item with no buyers, and every step of that was authorized.
Safe’s own contracts held up fine
The firms looking at this agreed on where the failure sat, and it wasn’t in Safe’s core contracts. It was in a component the wallet owner had chosen to trust and wire in on top.
I’ve read enough of these post-mortems to expect the headline blame to land on the best-known name in the transaction. It usually doesn’t belong there. The audited base layer does what it says, and the thing bolted onto it decides who gets to spend your money.
Kelp froze one address for 24 hours
Kelp DAO, which issues rsETH, says its contracts are secure and rsETH is fully collateralized.
“We’ve detected potential suspicious activity on an address that received rsETH a few hours ago,” KelpDAO wrote on X. “Out of an abundance of caution, we’ve placed that address under a temporary 24-hour pause. During this window, rsETH cannot move in or out of it.”
$47,000 for an $7.8 million interception
Yoink’s bid works out to roughly six-tenths of a percent of what it collected. That’s the going rate for being faster than the person who did the actual work, and it’s why writing a working exploit and getting paid for one are now separate problems.
The original attacker built the pool, found the broken check and constructed the call. A bot read it in transit and took the proceeds.
Go look at what your modules can do
If you run a Safe with an automation helper attached, the useful exercise this week isn’t reading another thread about Multicall. It’s opening your wallet’s module list and asking what each entry is allowed to call, and who it believes when it’s told the caller is legitimate.
This wallet’s answer was: anyone who asks nicely enough to name the helper as the destination. Nobody noticed until 2,900 rsETH had already left.