出典:CertiK Chinese Community
2024年1月16日、Socket Techが攻撃を受け、約330万ドルの損失を被りました。攻撃者は、Socketの契約の1つのデータ検証リンクの脆弱性を悪用し、悪意のあるデータ入力によって認可された契約からユーザー資金を盗みました。この攻撃により、合計で230のアドレスが被害を受け、最大の単一アドレスは約656,000ドルの損失を被りました。
背景
Socketは、チェーン全体で安全で効率的なデータと資産の転送を提供する相互運用プロトコルです。ソケット・ゲートウェイの契約は、すべてのアセットブリッジとDEXが一意のメタブリッジに集約され、コスト、待ち時間、セキュリティなどのユーザーの好みに基づいて最適なトランザクション・ルーティングを選択する、ソケット・モビリティ層とのすべての相互作用のアクセスポイントです。
ハッキングの3日前、Socketの契約管理者はaddRouteコマンドを実行し、システムに新しいルートを追加しました。ルートを追加する目的は、Socket Gatewayの機能を拡張することでしたが、うっかり重大な脆弱性を導入してしまいました。
次の画像は、契約管理者経由で追加されたルートのログを示しています:
イベントの概要
1.1月16日の15:03 BSTに、攻撃者のウォレットは攻撃で使用された資金を送金しました。この資金が0xe620から来たもので、トルネードキャッシュから引き出された10 BNBに関連していることが、私たちの時間的分析で示唆されています。
2.これらの資金は、Socketの脆弱性を悪用する2つの契約を作成し、実行するために使用されました。最初の契約は、SocketGatewayを認可したアドレスのUSDCをターゲットにしました(以下のスクリーンショット).127人の被害者は約250万ドルをだまし取られました。
3.次に、2つ目の契約は、被害者のアドレスにあるWETH、USDT、WBTC、DAI、MATICをターゲットにしました。
-42.48WETH
-347,005.65USDT
-2.89WBTC
-13,821.01DAI
-165,356.99MATIC
4.攻撃者はUSDCとUSDTをETHに変換しました。
脆弱性の原因
攻撃者によって悪用された脆弱性は、performAddress内の新しく追加されたrouteAddressに存在します。
このアドレス内のformAction関数の本来の機能は、関数のラップとアンラップを支援することでした。
しかし、この関数には重大な脆弱性があります。ユーザーが認証なしで .call() 内の swapExtraData を介して外部データを呼び出すことができるため、攻撃者は任意の悪意のある関数を実行することができます。
このインシデントでは、攻撃者は transferFrom 関数をトリガーする悪意のある swapExtraData 入力を作成しました。この悪意のある呼び出しは、ユーザーから資金を盗むために、SocketGatewayコントラクトのユーザーの権限を悪用しました。
コントラクトは、fromToken.call()呼び出し後に残高チェックを行うことで、ユーザーの残高が正しく変化することを保証しますが、この関数は、攻撃者が金額をゼロに設定するケースを考慮していません。
攻撃フローの復元
1.攻撃契約を使って、攻撃者はSocket Gateway上で0x000000を呼び出します。コントラクトの0x00000196()を呼び出します。
2. 16進シグネチャ196を使用して、脆弱なrouterAddressコントラクト上でfallback()を呼び出します。
3.下のスクリーンショットでは、攻撃者が使用した偽の入力を見ることができます。https://img.jinse.cn/7176269_image3.png" alt="image">
4.次にWrappedTokenSwapperImpl.performAction()がSwap.
5.何の検証もなしに、偽のSwapExtraDataがfromToken(WETH)によって受け入れられ、実行される。
6. 攻撃者は、被害者の資産がなくなるまで上記のプロセスを繰り返します。悪意のあるトランザクションが現れた後、Socketは素早くdisableRouteを呼び出し、以前の脆弱なルートをブロックし、より広範囲の攻撃を止めました。
7.1月23日、Socketは1,032ETHを回収したと発表し、25日にはすべての損失を全額返済すると発表しました。この事件は解決しました。
インシデントの概要
無制限のユーザーライセンスを持つルーティング契約では、悪意のあるcalldata攻撃は珍しいことではありません。攻撃は珍しくありません。
以前の同様の攻撃には、DexibleとHector Bridgeがあります。
2023年2月17日、分散型取引所のDexibleが攻撃され、150万ドル以上の損失が出ました。悪意のあるカルデータをDexibleのfill()関数に送り込み、ユーザーの資産を盗み出しました。
2023年6月2日、Hectorネットワークのプロトコルが攻撃されました。攻撃者は偽のUSDCコントラクトを展開し、悪意のあるcalldataを介して被害者のコントラクトから652,000USDCを送金しました。
ブロックチェーン集約プラットフォームは通常、一連のブリッジ契約とルーティング契約をカプセル化することで、流動性を高め、消耗を抑えます。しかし、この複雑なカプセル化は、セキュリティにさらなる課題をもたらす可能性があります。