40分で56億ドル。
攻撃者は秘密鍵を盗んだわけでも、サーバーに侵入したわけでもありません。
ただ、Binanceのホットウォレットに権限付与の署名をさせただけです。すると、ウォレットは自ら資金を送金してしまいました。
オンチェーン上には、「外部アドレスが資産を持ち出した」形跡はありません。Binance 14が通常の出金を行ったように見えます。
EIP-7702とは何か?一言で説明してください。
イーサリアムのPectraアップグレードにより、一般的なウォレットでもスマートコントラクトのコードを一時的に借りられるようになりました。
技術の進歩に聞こえますね。
しかし、柔軟性の裏側にはこんな危険もあります。署名ひとつで、あなたのウォレットが他人のATMになってしまうのです。
攻撃の手順は3段階。
第1段階:コントラクトをデプロイする。中身はsweepという関数ひとつだけ。ETHと指定したトークンをすべて、指定したアドレスに送る。
第2段階:Binance 14の認可署名を手に入れる。このsweepコードをBinanceのホットウォレットに「組み込む」。
第3段階:3分24秒後、Binanceのホットウォレットアドレス上で直接、資産を一掃する処理を呼び出す。
オンチェーンでは、「外部アドレスが資産を持ち去る」動きは一切ない。見た目には、Binance自身が資金を移しているだけだ。
攻撃者は1件のトランザクションに50件の認可を詰め込み、nonceをNからN+49まで並べた。そのうちひとつが通ることに賭けたのだ。
結果として、有効になったのはひとつだけだった。
委任から最初の資産一掃まで、わずか3分24秒。
Binanceのリスク管理システムは、これを阻止できなかった。
その後、40分にわたる「自分で自分を空にする」事態が続いた。
Binance 14自身が呼び出しを開始し、167,464 ETHと63種類のトークンを送金。手数料は1ドル未満だった。
Binance 16がほぼ間を置かずに続き、さらに28,005 ETHを送金した。
その後、資産は細かく分散された。PEPE 7.77兆、UNI 702万、wBETH 29,934が、ひとつずつ新規アドレスへ送られた。
夜が明ける頃には、イーサリアム、ビットコイン、トロン、複数のL2にまたがって、56億4,300万ドルが流出していた。
Tether、Circle、Ripple、World Libertyが連携して約25億4,000万ドルを凍結した。全体の45%にあたる。しかし、悪意ある委任は今も取り消されていない。
EIP-7702の本来の目的は、ウォレットをより柔軟にすることだった。
しかし、柔軟であることは安全であることを意味しない。アカウント抽象化の物語が長く語られるなか、誰もが「より優れたユーザー体験」「より低い参入障壁」「よりスマートなウォレット」をうたってきた。
誰も真剣に答えていない問いがある。認可そのものが攻撃対象となり、たった一度の署名で、あるアドレスに任意のコードを実行させられるとしたら、安全性のモデルは本当に成り立つのか?
これはBinanceだけの脆弱性ではない。イーサリアムのアカウント抽象化をめぐる物語全体が、答えなければならない問いだ。
テクノロジーそのものに悪意はない。だが、テクノロジーの「柔軟性」にはブレーキが必要だ。
今回は、そのブレーキがなかった。次は、56億ドルでは済まないかもしれない。

