
データ検証プロセスの脆弱性により330万ドルの損失、Socket攻撃事件の詳細を解説
TechFlow厳選深潮セレクト

データ検証プロセスの脆弱性により330万ドルの損失、Socket攻撃事件の詳細を解説
2024年1月16日、Socket Techが攻撃を受け、約330万ドルの損失が出た。本稿では、この攻撃事件の全貌を詳しく解説する。
執筆:CertiK

2024年1月16日、Socket Techが攻撃を受け、約330万ドルを損失しました。攻撃者は、Socketの特定のコントラクトにおけるデータ検証プロセスの脆弱性を悪用し、不正なデータ入力を通じてユーザー資金を盗み出しました。今回の攻撃により230のアドレスが被害を受け、最大の単一アドレスでの損失額は約65.6万ドルでした。
背景説明
Socketは、クロスチェーン間の安全かつ効率的なデータおよび資産移転を実現する相互運用性プロトコルです。Socket Gatewayコントラクトは、Socket流動性層とのすべてのやり取りのエントリーポイントであり、すべての資産ブリッジとDEXがここに集約され、コスト・遅延・セキュリティなどのユーザーの選好に基づいて最適な取引ルーティングが選ばれます。
ハッキング発生の3日前、Socketコントラクトの管理者はaddRouteコマンドを実行し、システムに新しいルートを追加しました。このルート追加はSocket Gatewayの機能拡張を目的としていましたが、結果的に重大な脆弱性を意図せず導入してしまいました。
以下は、コントラクト管理者によるルート追加の記録です。

事件の概要
1. 北京時間1月16日15時03分、攻撃者のウォレットが攻撃資金を送金しました。当該資金は0xe620から来ており、Tornado Cashからの引き出しと関連している10BNBであることが時間分析で確認されています。

2. これらの資金は、Socketの脆弱性を悪用するために2つのコントラクトを作成・実行するのに使用されました。最初のコントラクトは、SocketGatewayに承認されたアドレス内のUSDCを標的にしました(下図参照)。127人の被害者が約250万ドルを失いました。

3. 次に、2番目のコントラクトは、被害者のアドレス内にあるWETH、USDT、WBTC、DAI、MATICを狙いました。これにより、さらに104人の被害者が以下の資産を損失しました。
-
42.48 WETH
-
347,005.65 USDT
-
2.89 WBTC
-
13,821.01 DAI
-
165,356.99 MATIC
4. 攻撃者はUSDCとUSDTをETHに交換しました。

脆弱性の起源
攻撃者が悪用した脆弱性は、新しく追加されたルートアドレス「routeAddress」内のperformAction関数に存在していました。
このアドレス内のperformAction関数は本来、WrappingおよびUnwrapping機能を補助するものでした。
しかし、この関数には重大な脆弱性がありました。すなわち、ユーザーが検証なしに.call()内でswapExtraDataを通じて外部データを呼び出すことができ、攻撃者が任意の悪意ある関数を実行できる状態となっていたのです。

本件では、攻撃者が悪意のあるswapExtraDataを入力し、transferFrom関数をトリガーしました。この不正な呼び出しは、ユーザーがSocketGatewayコントラクトに与えた承認を悪用し、資金を盗み出しました。
コントラクトはfromToken.call()後にユーザー残高が正しい変化を示すかチェックするバランス検査を行いますが、攻撃者が金額を0に設定した場合については考慮されていませんでした。

攻撃手順の再現
1. 攻撃コントラクトを使用し、攻撃者はSocket Gatewayコントラクト上で0x00000196()を呼び出しました。

2. fallback()は、196という16進署名を使って、脆弱性を持つルートアドレスコントラクト(routerAddress)を呼び出します。

3. 下のスクリーンショットでは、攻撃者が使用した偽の入力値が確認できます。Swap数量はすべて0です。

4. 次にWrappedTokenSwapperImpl.performAction()が呼び出され、Swapが実行されます。

5. 検証が行われないまま、偽のSwapExtraDataがfromToken(WETH)によって受け入れられ、実行されます。

6. 攻撃者は上記の手順を繰り返し、被害者の資産が尽きるまで攻撃を継続しました。悪意ある取引が発生後、Socketは迅速にdisableRouteを呼び出し、問題のあるルートを遮断することで、さらなる被害の拡大を阻止しました。
7. 1月23日、Socketは1032ETHを回収したことを発表し、25日にはすべての被害者に全額補償を行うと宣言しました。これにより、本件は解決しました。

事件のまとめ
無制限のユーザー承認があるルートコントラクトにおいて、悪意あるcalldata攻撃は珍しいことではありません。
過去にも同様の攻撃事例があり、DexibleやHector Bridgeなどが挙げられます。
2023年2月17日、分散型取引所Dexibleが攻撃を受け、150万ドル以上を損失しました。攻撃者はDexibleのfill()関数に悪意あるcalldataを入力し、ユーザー資産を盗み出しました。
2023年6月2日、Hectorネットワークのプロトコルが攻撃を受けました。攻撃者は偽のUSDCコントラクトをデプロイし、悪意あるcalldataを利用して、被害者のコントラクトから65.2万枚の正規USDCを移転しました。
ブロックチェーンアグリゲーションプラットフォームは、複数のブリッジやルーティングコントラクトを統合することで流動性を高め、コストを削減しています。しかし、こうした複雑な統合はセキュリティ上の課題も増大させます。
Socketの今回の事件が解決したことは、関係各所の努力の賜物です。CertiKは今後も、プラットフォームに対する包括的な監査と検出を継続し、さまざまなアグリゲーションリスクを低減するとともに、コミュニティの信頼と業界全体のセキュリティレベル向上に貢献していきます。
TechFlow公式コミュニティへようこそ
Telegram購読グループ:https://t.me/TechFlowDaily
Twitter公式アカウント:https://x.com/TechFlowPost
Twitter英語アカウント:https://x.com/BlockFlow_News










