All vulnerabilities
CRITICALWeb3exploited in the wildcurated

WEB3-BYBIT-2025

Web3 · CEX · Bybit

Summary

On 21 February 2025, the crypto exchange Bybit lost about $1.5 billion in ether, the largest hack in history, to North Korea's Lazarus Group. Bybit had done what custody best-practice prescribes: the funds sat in a cold wallet behind a multisig requiring several human signers. The attackers beat it anyway, not by stealing keys but by tampering with what the signers saw. Weeks earlier they had compromised a developer at Safe, the multisig-wallet provider, and slipped malicious code into the Safe web app, so that when Bybit's executives reviewed a routine transfer, the screen showed a legitimate transaction while their hardware wallets were actually signing a malicious one that handed the wallet to the attacker. It is the defining lesson that a multisig is only as trustworthy as the screen you approve it on, and that blind-signing is the modern crypto catastrophe.

How it happened

Bybit's cold wallet was a multisig built on Safe (formerly Gnosis Safe), needing several executives to approve any movement. Rather than attack the keys, Lazarus ran a supply-chain attack on Safe itself. Around 4 February 2025 they compromised a Safe developer's Mac through a malicious Docker project, and used that access to inject malicious JavaScript into the Safe web app served from its cloud storage (an AWS S3 bucket behind app.safe.global). The code was scoped to fire only for two specific addresses: Bybit's cold-wallet contract and one the attackers controlled.

So when Bybit's three signers reviewed what looked like a routine transfer from cold to hot storage, the Safe interface showed correct, legitimate details on screen, while the data sent to their hardware wallets was different. Because the signers approved without their devices decoding the real payload, blind-signing, they authorised a delegatecall (operation type 1) to an attacker contract. Executing in the wallet's own storage context, that contract overwrote storage slot 0, the pointer to the wallet's implementation, repointing it to attacker logic that exposed sweep functions. The attacker then drained the entire balance: 401,347 ETH, about $1.46 billion at the time and climbing with ether's price toward the $1.5 billion headline. Roughly two minutes after the transaction, the attackers re-uploaded clean JavaScript to the Safe bucket to erase the evidence. The executives believed they were moving operational funds; they were signing away the vault.

The aftermath

The loss is the largest theft of any kind in history, crypto or otherwise. Crucially, Bybit survived it: it closed the gap within about 72 hours, sourcing roughly 447,000 ETH (around $1.2 billion) through emergency loans and large deposits and declaring itself fully solvent, all while processing more than 350,000 withdrawal requests through the bank run. The FBI and blockchain analysts attributed the theft to Lazarus (also tracked as TraderTraitor and APT38). The laundering was fast but neither instant nor invisible: over roughly ten days Lazarus moved the funds, swapping about 72% (some 361,000 ETH, around $900 million) through the THORChain protocol; by Bybit's own accounting about 77% remained traceable, around 20% (~$280 million) had gone dark, and roughly 3% had been frozen. Bybit launched a bounty site (LazarusBounty.com) offering a share of any funds recovered. Across 2025, North Korea-linked actors accounted for the majority of all cryptocurrency stolen worldwide.

Why Bybit still matters

Bybit shattered the comfortable belief that cold storage plus multisig is enough. The keys were never stolen. The supply-chain attack on the signing interface made trusted humans approve a malicious transaction they could not actually see. The core vulnerability is blind-signing: approving a transaction your hardware wallet cannot fully decode and display. The defences follow directly: insist on clear-signing, where the hardware device itself decodes and shows the real calldata, operation type, and target; independently simulate every multisig transaction before approval; pin and integrity-check the wallet UI; alert on any delegatecall or implementation change; and harden the entire signing supply chain, not just the keys. It was carried out by the same Lazarus Group behind Ronin, now operating at more than ten times the scale.

How to fix it

  • Treat the signing infrastructure as compromised: move remaining funds using wallets created and signed on clean, verified systems, and rotate everything the breach could touch.
  • Verify wallet-UI integrity (pinned, integrity-checked assets) before resuming any signing, since the breach was in the interface, not the keys.
  • Trace and publicly flag the stolen funds immediately; speed matters, but as Bybit showed, fast tracing keeps most of it visible even when it cannot all be frozen.

How to avoid it

  • Harden the wallet-UI supply chain: subresource integrity on hosted scripts, integrity-verified assets, and least-privilege developer access.
  • Mandate clear-signing and on-device transaction parsing so signers verify calldata, operation type, and target on the hardware wallet, never blind-sign.
  • Independently simulate every multisig transaction on isolated infrastructure and compare results before approval.
  • Alert on or block delegatecall (operation=1) and any implementation or singleton change in multisig transactions.
  • Segment and monitor signer endpoints, and require multiple independent reviews of decoded calldata through out-of-band channels.

References

Related vulnerabilities

All Web3 →