UXLINKが約1130万ドル盗まれた技術分析
イベントの説明
9月23日、UXLINKプロジェクトのマルチシグウォレットの秘密鍵が漏洩し、約1130万ドルの資産が盗まれ、複数の中央集権型(CEX)および分散型(DEX)取引所に分散移転されました。攻撃を受けた直後、私たちはUXLINKと共にこの攻撃を調査分析し、資金の流れを監視しました。UXLINKは緊急に各取引所に連絡し、疑わしい資金の凍結を要請し、警察および関連機関に法的支援と資産回収を求める報告を行いました。ハッカーの大部分の資産は各取引所によって凍結され、コミュニティが直面するさらなるリスクを最小限に抑えました。プロジェクト側はコミュニティに対して透明性を保つことを約束し、ExVulも引き続き事件の進展を分析し追跡します。

(https://x.com/UXLINKofficial/status/1970181382107476362)
最新の進展
ハッカーの資金流通過程において、取引所に流入した資金は凍結されました。初期のチェーン上の追跡により、以前にUXLINKの資産を盗んだハッカーは、Inferno Drainerフィッシング攻撃に遭った疑いがあることが判明しました。確認の結果、彼らが不正に取得した約5.42億枚の$UXLINKトークンは「承認されたフィッシング」手法によって盗まれました。
ハッカーによるフィッシング取引: https://arbiscan.io/tx/0xa70674ccc9caa17d6efaf3f6fcbd5dec40011744c18a1057f391a822f11986ee
無許可の1B $UXLINK鋳造: https://arbiscan.io/tx/0x2466caf408248d1b6fc6fd9d7ec8eb8d8e70cab52dacff1f94b056c10f253bc2

攻撃分析
- 以前の契約は、マルチシグのオーナーに悪意のある操作または秘密鍵の漏洩があったため、悪意のあるアドレスがマルチシグアカウントに追加され、契約の署名閾値(threshold)が1にリセットされました。つまり、単一のアカウントの署名だけで契約操作を実行できる状態になりました。ハッカーは新しいオーナーアドレスを0x2EF43c1D0c88C071d242B6c2D0430e1751607B87に設定しました。
(https://arbiscan.io/tx/0x8504a830e7a7a1ca0308a71130efdebddd78b90a1dcc8a64d7c1d86261754689)
- 攻撃者は最初にGnosis Safe Proxy契約のexecTransaction関数を呼び出しました。この関数は悪意のあるマルチシグメンバーを削除するための入口となり、その後のすべての悪意のある操作はこの取引の内部で実行されました。
(https://arbiscan.io/address/0x7715200141cfd94570bc9d97260ec974ee747972#code)
- execTransactionを呼び出す際、攻撃者はそのdataパラメータに悪意のある操作を指定しました:delegatecall方式でSafe: Multi Send Call Only 1.3.0を実行する契約を呼び出しました。

(https://arbiscan.io/address/0x40a2accbd92bca938b02010e17a5b8929b49130d)
- Safe: Multi Send Call Only 1.3.0のmultiSend関数内で、実行フローがGnosis Safe Proxy契約のremoveOwnerにコールバックされました。具体的なプロセスは次の通りです:攻撃者は代理契約に対してdelegatecallを実行し、MultiSend実装契約を呼び出し、それを代理契約のコンテキスト内でmultiSendを実行させました。その後、multiSendは攻撃者が構築したパラメータに基づいてcall方式でGnosis Safe Proxy契約自身をコールバックし、removeOwner関数をトリガーして既存のオーナーアドレスを削除しました。


(https://arbiscan.io/address/0x40a2accbd92bca938b02010e17a5b8929b49130d#code)
- 呼び出しが成功する核心は、条件msg.sender == address(this)を満たすことです。removeOwner関数内では、外部からの直接呼び出しを防ぐために、契約はauthorized検証を設定しており、その内部ロジックは通常、呼び出し元が契約自身である必要があります (msg.sender == address(this))。したがって、契約内部のプロセスが自身をコールバックする場合にのみ、removeOwnerが成功裏に実行されます。


- ハッカーは上記の手法を用いて、マルチシグ内の他のオーナーを一つずつ削除し、マルチシグメカニズムを破壊し、最終的に契約を掌握しました。

- これにより、攻撃者は上記の手順を繰り返すことで、元のマルチシグの安全メカニズムを完全に無効化しました。この時点で、単一の悪意のあるオーナーの署名だけでマルチシグ検証を通過し、契約を完全に制御することが可能になりました。
(https://arbiscan.io/txs?a=0x2ef43c1d0c88c071d242b6c2d0430e1751607b87\&p=2)
まとめ
マルチシグオーナーに悪意のある操作または秘密鍵の漏洩があったため、攻撃者は悪意のあるアドレスをマルチシグメンバーとして追加し、Gnosis Safe Proxyの署名閾値(threshold)を1に設定し、元のマルチシグの安全設計が完全に無効化されました。その後、単一の悪意のあるオーナーがマルチシグ検証を通過できるようになりました。攻撃者はその後、契約内の他のオーナーを段階的に削除し、最終的に契約を完全に制御し、さらに契約資産を移転し、チェーン上で悪意のある$UXLINKトークンを鋳造しました。
今回の攻撃事件は、マルチシグ管理がブロックチェーンの安全性において重要な役割を果たすことを浮き彫りにしました。プロジェクトはSafeマルチシグメカニズムを採用し、複数のマルチシグアカウントを設定しましたが、管理方法に欠陥があったため、最終的にマルチシグ設計が形骸化しました。ExVulチームは、プロジェクト側がマルチシグ管理において分散化を実現することを推奨します。例えば、異なるメンバーがそれぞれ秘密鍵を保管し、多様な秘密鍵の保管方法を採用することで、マルチシグメカニズムが本来の安全防護効果を発揮できるようにすることが重要です。
付録
以下はExVulチームがチェーン上で追跡した疑わしいハッカーアドレスです:

















