何が起きたのか
2022年1月28日、Qubit Financeは約8000万米ドル相当の暗号資産を不正に搾取されました。これはDeFi史上最大級のハッキング事件の一つであり、資金は一切返還されていません。
Qubit Financeは、Binance Smart Chain上のDeFiレンディングプロトコルであり、韓国企業**Mound Inc.**によって構築されました。同社は2021年5月に約4500万ドルのエクスプロイト被害を受けたPancakeBunnyの開発チームでもあります。Qubitは彼らの2度目の挑戦でした。
このプロトコルにはQBridgeが含まれていました。これはクロスチェーンブリッジであり、ユーザーがEthereum上でETHを預け入れると、BSC上で同等のqXETHトークンを受け取ることができ、それを担保として他の資産を借り入れることが可能でした。
Qubit FinanceはBinanceから明確に支持を受けており、Binance Smart Chain上で運用されていました。
エクスプロイトの詳細
Section titled “エクスプロイトの詳細”ステップ1 — 2つの関数、1つのイベント
Section titled “ステップ1 — 2つの関数、1つのイベント”QBridgeにはETHを預け入れる方法が2つありました:
depositETH()— 正しい関数。実際のETH(msg.value > 0)が必要。Depositイベントを発行。deposit()— ERC-20トークン用に設計された関数。トークンコントラクトのsafeTransferFrom()を呼び出す。こちらも**Depositイベント**を発行 — まったく同じイベント型。
ブリッジイベントを処理するオフチェーンリレイヤーには、この2つを区別する手段がありませんでした。
ステップ2 — ゼロアドレスがホワイトリストに登録されていた
Section titled “ステップ2 — ゼロアドレスがホワイトリストに登録されていた”ネイティブETHにはERC-20コントラクトアドレスが存在しないため、QBridgeはプレースホルダーとしてゼロアドレス(0x0000000000000000000000000000000000000000)を使用していました。このゼロアドレスがコントラクトのホワイトリストに追加されていました。
ステップ3 — EOAへの呼び出しはサイレントに成功する
Section titled “ステップ3 — EOAへの呼び出しはサイレントに成功する”deposit()がETHのresourceIDで呼び出されると、コントラクトはトークンアドレスをゼロアドレスに解決し、そこに対してsafeTransferFrom()を呼び出しました。
EVMでは、コントラクトコードを持たないアドレス(EOA)に対する関数呼び出しは、リバートもエラーも実際の送金も発生せず、サイレントに成功します。ゼロアドレスはEOAです。そのためsafeTransferFrom()は「成功」し、何も移動せず、コントラクトは正当なETH預入と同一のDepositイベントを発行しました。
このEVMの挙動は2019年の0x Protocolセキュリティアップデートで文書化されていました。Qubitチームはこれを知らなかったか、無視していました。
ステップ4 — リレイヤーがBSC上で実際のトークンを発行
Section titled “ステップ4 — リレイヤーがBSC上で実際のトークンを発行”リレイヤーはDepositイベントを検知しましたが、それが偽物であることを知る術がなく、攻撃者に対してBSC上でqXETHトークンを発行しました — 何の裏付けもないまま。
攻撃者はこのプロセスを繰り返し実行し、膨大な量の偽qXETHを蓄積しました。
ステップ5 — 偽の担保、本物のローン
Section titled “ステップ5 — 偽の担保、本物のローン”不正に発行されたqXETHを担保として使用し、攻撃者はQubit FinanceのBSCレンディングプールから約8000万ドル相当の実資産を借り入れました:WETH、BTCB、BNB、MATIC、CAKE、BUSDなど。
レンディングコントラクトは担保価値を正しくチェックしていましたが、不正はブリッジレベルで既に完了していました。
不審なパラメータ変更
Section titled “不審なパラメータ変更”調査者たちは、未だ説明されていない事実を発見しました。
元々、deposit()関数とそのresourceIDはWETH — 実際のコントラクトアドレスを持つ実在のERC-20トークン — のブリッジに使用されていました。これは正しく機能していました。
ハッキングの前のある時点で、オーナー専用関数が呼び出され、resourceIDのマッピングが変更されました — WETHのコントラクトアドレスがゼロアドレスに差し替えられたのです。この変更こそが、エクスプロイトを可能にしました。
重要な事実:
- この変更を行えるのはコントラクトオーナーのみ
- タイムロックは存在せず — 即座に反映された
- 公表はされなかった
- 説明は一切なされていない
チームの対応
Section titled “チームの対応”Mound Inc.がその後に取った行動:
- ハッカーに25万ドルを提示し、8000万ドルの返還を求めた(応答なし)
- 警察への届出を主張 — 事件番号は一切提示されなかった
- モデレーター@molehを通じて被害者をTelegramから排除
- CTOが2022年2月1日にLinkedInを削除 — ハッキングから4日後
- Binanceセキュリティや主要取引所に連絡せず、ハッカーウォレットのブラックリスト登録を行わなかった
- ハッカーに関する情報を提供したコミュニティメンバーに対応しなかった
完全な記録については、チームの対応および9つの未回答の質問を参照してください。
ハッカーウォレット
Section titled “ハッカーウォレット”0xd01ae1a708614948b2b5e0b7ab5be6afa01325c7盗まれた資産の推定額
Section titled “盗まれた資産の推定額”| 資産 | 推定USD価値 |
|---|---|
| WETH | 約2660万ドル |
| BTCB | 約1530万ドル |
| BNB | 約950万ドル |
| MATIC | 約560万ドル |
| CAKE | 約800万ドル |
| BUSD + その他 | 約1500万ドル |
| 合計 | 約8000万ドル |