2024 年 1 月 16 日、Socket Tech は攻撃を受け、約 330 万米ドルの損失を被りました。攻撃者は、ソケット コントラクトのデータ検証リンクの脆弱性を利用し、悪意のあるデータ入力を通じて承認されたコントラクトのユーザー資金を盗みました。この攻撃により合計 230 のアドレスに損失が発生し、単一アドレスの損失の最大額は約 656,000 米ドルでした。
背景の紹介
Socket は、クロスチェーンの安全かつ効率的なデータと資産の送信を提供する相互運用性プロトコルです。ソケット ゲートウェイ コントラクトは、ソケット流動性レイヤーとのすべてのやり取りのアクセス ポイントであり、すべての資産ブリッジと DEX が単一のメタブリッジに収束し、コスト、レイテンシー、セキュリティ ルーティングなどのユーザーの好みに基づいて最適なトランザクションが選択されます。
ハッカー攻撃の 3 日前、ソケット契約管理者は addRoute コマンドを実行して新しいルートをシステムに追加しました。ルーティングを追加する目的は、ソケット ゲートウェイの機能を拡張することでしたが、誤って重大な脆弱性が生じてしまいました。
下の図は、契約管理者を通じて追加されたルーティングの記録を示しています。
イベントの概要
- 1. 北京時間 1 月 16 日 15:03 に、攻撃者のウォレットから攻撃に使用された資金が送金されました。時間分析によると、その資金は 0xe620 からのもので、Tornado Cash から引き出した 10 BNB に関連していたことがわかりました。
- 2. これらの資金は、Socket の脆弱性を悪用する 2 つの契約の作成と実行に使用されました。最初の契約は、SocketGateway によって認可されたアドレスの USDC を標的としており (下のスクリーンショット)、127 人の被害者が約 250 万ドルを騙し取られました。
- 3. 次に、2 番目の契約は、被害者のアドレスの WETH、USDT、WBTC、DAI、および MATIC をターゲットにします。その結果、さらに 104 人の犠牲者が次の資産を失いました。
- 42.47526105 ウェス
- 347,005.65 USDT
- 2.88962154 WBTC
- 13,821.01 DAI
- 165,356.99 マティック
- 4. 攻撃者はUSDCとUSDTをETHに変換しました。
脆弱性の原因
攻撃者によって悪用される脆弱性は、新しく追加されたルーティング アドレスrouteAddressのperformAction関数に存在します。
このアドレスの PerformAction 関数の本来の機能は、Wrapping と Unwrapping の機能を支援することです。ただし、この関数には重大な脆弱性が存在します。ユーザーは検証なしで .call() の swapExtraData を通じて外部データを直接呼び出します。これは、攻撃者が任意の悪意のある関数を実行できることを意味します。
このインシデントでは、攻撃者は、transferFrom 関数をトリガーする悪意のある swapExtraData 入力を作成しました。この悪意のある呼び出しは、SocketGateway コントラクトに対するユーザーの承認を悪用し、ユーザーから資金を盗みました。
コントラクトでは、fromToken.call() が呼び出された後、残高チェックをチェックすることでユーザーの残高が正しく変更されることを保証しますが、この関数は、攻撃者が金額を 0 に設定する状況を考慮していません。
攻撃プロセスの復元
- 1. 攻撃者は、攻撃コントラクトを使用して、ソケット ゲートウェイ コントラクトで 0x00000196() を呼び出しました。
- 2. fallback() は 16 進数の署名 196 を使用して、脆弱なルーティング アドレス コントラクト (routerAddress) を呼び出します。
- 3. 以下のスクリーンショットでは、攻撃者が使用した偽の入力が確認できます。スワッピング番号はすべて 0 です。
- 4. 次に、WrappedTokenSwapperImpl.performAction() が呼び出され、スワップが実行されます。
- 5. 偽の SwapExtraData は、検証なしで fromToken (WETH) によって受け入れられ、実行されます。
- 5. 偽の SwapExtraData は、検証なしで fromToken (WETH) によって受け入れられ、実行されます。
- 6. 攻撃者は、被害者の資産がなくなるまで上記のプロセスを繰り返します。悪意のあるトランザクションが出現した後、Socket はすぐに disableRoute を呼び出し、以前に脆弱だったルートをブロックし、広範囲の攻撃を阻止しました。
- 7. 1月23日、ソケットは1,032ETHを回収したと発表し、25日には損失を全額補償すると発表した。この事件は解決されました。
イベント概要
無制限のユーザー認証を持つルーティング コントラクトでは、悪意のあるコールデータ攻撃が珍しくありません。これまでの同様の攻撃には、Dexible や Hector Bridge などがあります。 2023年2月17日、分散型取引所Dexibleが攻撃され、150万ドル以上の損失が発生した。悪用者は、悪意のある呼び出しデータを Dexible の fill() 関数に入力して、ユーザー資産を盗みます。 2023 年 6 月 2 日、Hector ネットワーク プロトコルが攻撃されました。攻撃者は偽の USDC 契約を展開し、悪意のある通話データを通じて被害者の契約から 652,000 の本物の USDC を転送しました。
ブロックチェーン集約プラットフォームは通常、一連のブリッジおよびルーティング契約をカプセル化することで流動性を向上させ、損失を削減します。ただし、この複雑なカプセル化により、セキュリティ上のさらなる課題が生じます。 Socket インシデントが解決できたことを嬉しく思います。CertiK は、プラットフォームに対する包括的な監査と検出を提供し、さまざまな集約リスクを軽減し、コミュニティの信頼と業界全体のセキュリティ レベルを向上させることに引き続き取り組んでいきます。
全てのコメント