原題:「SlowMist:Cetusからの2億3000万ドルの盗難の分析」
原著者:Victory, Lisa、SlowMist Technology
5月22日、コミュニティニュースによると、SUIエコシステムの流動性プロバイダーであるCetusが攻撃を受けた疑いがあり、流動性プールの深さが大幅に減少し、Cetus上の複数のトークン取引ペアが下落しました。推定損失額は2億3000万ドルを超える。その後、Cetusは「プロトコルにインシデントが検出されました。安全上の理由から、スマートコントラクトは一時的に停止されています。現在、チームがインシデントを調査中です。近日中にさらなる調査結果を発表します」という発表を行いました。
インシデント後、SlowMist のセキュリティ チームが分析に介入し、セキュリティ警告を発行しました。以下は攻撃手法と資金移動の詳細な分析です。

(https://x.com/CetusProtocol/status/1925515662346404024)
攻撃トランザクションの 1 つ:https://suiscan.xyz/mainnet/tx/DVMG3B2kocLEnVMDuQzTYRgjwuuFSfciawPvXXheB3x
このインシデントの核心は、攻撃者がオーバーフローを引き起こしながら検出をバイパスするためのパラメータを注意深く構築し、最終的に非常に少量のトークンを使用して大量の流動資産と交換したことです。具体的な手順の分析は次のとおりです。 1.攻撃者はまずフラッシュローンを通じて 10,024,321.28 haSUI を借り入れ、プール価格を 18,956,530,795,606,879,104 から 18,425,720,184762886 に急落させ、価格が 99.90% 下落しました。 2.攻撃者は、流動性ポジションを開くために、非常に狭い価格帯を慎重に選択しました。 ティック下限: 300000 (価格: 60,257,519,765,924,248,467,716,150) ティック上限: 300200 (価格: 60,863,087,478,126,617,965,993,239) 価格帯の幅: わずか 1.00496621% 3.次に攻撃の核心部分が登場します。攻撃者は10,365,647,984,364,446,732,462,244,378,333,008単位の膨大な流動性を追加したと主張していますが、抜け穴により、システムは1トークンAしか収集しませんでした。 攻撃者が1トークンで膨大な流動性を交換できた理由を分析してみましょう。主な理由は、get_delta_a 関数の checked_shlw にオーバーフロー検出バイパスの脆弱性があることです。攻撃者はこの点を悪用し、実際に追加する必要がある haSUI の量に関するシステムの計算に重大な偏差を引き起こしました。オーバーフローが検出されなかったため、システムは必要なhaSUIの量を誤って判断し、攻撃者は少量のトークンで大量の流動資産を換金することができ、攻撃に成功しました。 システムが、このような膨大な流動性を追加するために必要な haSUI の量を計算すると、次のようになります。 ここで重要なのは、checked_shlw 関数の実装に重大な欠陥があることです。実際、0xffffffffffffffff <<192 未満の入力値はオーバーフロー チェックをバイパスします。しかし、これらの値を64ビット左シフトすると、結果がu256の表現範囲を超え、上位データが切り捨てられ、理論値よりも大幅に小さい結果になります。これにより、システムは後続の計算で必要な haSUI の量を過小評価することになります。 · 間違ったマスク: 0xffffffffffffffff << 192 = 非常に大きい数 (約 2^256-2^192) · ほぼすべての入力がこのマスクより小さいため、オーバーフロー検出がバイパスされます · 実際の問題: n >= 2^192 の場合、n<< 64 は u256 の範囲を超え、切り捨てられます 攻撃者の中間値 liquidity * sqrt_price_diff = 6277101735386680763835789423207666908085499738337898853712: ・エラー マスク未満であるため、オーバーフロー検出をバイパスします ・ただし、64 ビット左シフトすると u256 の最大値を超えるため、超過部分が切り捨てられます ・最終的な計算結果はおよそ 1 未満ですが、切り上げられるため、商は 1 に等しくなります 4.最終的に、攻撃者は流動性を削除し、巨額のトークン収入を得ました: · 1 回目の削除: 10,024,321.28 haSUI · 2 回目の削除: 1 haSUI · 3 回目の削除: 10,024,321.28 haSUI 5.攻撃者はフラッシュローンを返済し、およそ 10,024,321.28 haSUI と 5,765,124.79 SUI の純利益を得て攻撃が完了しました。 攻撃後、Cetus は修復パッチをリリースしました。具体的な修復コードについては、https://github.com/CetusProtocol/integer-mate/pull/7/files#diff-c04eb6ebebbabb80342cd953bc63925e1c1cdc7ae1fb572f4aad240288a69409 を参照してください。 修復された checked_shlw 関数は次のとおりです: 修復手順: 不正なマスク 0xffffffffffffffff << を修正しました。 192 正しいしきい値 1 << 192 判定条件を n > から修正しました。 mask to n >= mask 64 ビットの左シフトによってオーバーフローが発生する可能性がある場合に、オーバーフロー フラグを正しく検出して返すことができるようにします 分析によると、攻撃者 0xe28b50cef1d633ea43d3296a3f6b67ff0312a5f1a99f0af753c85b8b5de8ff06 は、SUI、vSUI、USDC などの資産を含めて約 2 億 3,000 万ドルの利益を得ました。 攻撃者は2日前にガス料金を準備し、攻撃前に試みたが失敗したことがわかりました。 利益を得た後、攻撃者はSui Bridge、Circle、Wormhole、Mayanなどのクロスチェーンブリッジを介して、USDC、SOL、suiETHなどの資金の一部をEVMアドレス0x89012a55cd6b88e407c9d4ae9b3425f55924919bに転送しました。 そのうち、5.2341 WBNBがBSCアドレスに転送されました。 0x89012a55cd6b88e407c9d4ae9b3425f55924919b: 次に、オンチェーンのマネーロンダリング防止および追跡ツールであるMistTrackを使用して、クロスチェーン資金を受け取るEVM上のアドレス0x89012a55cd6b88e407c9d4ae9b3425f55924919bを分析します。このアドレスは、BSC で 5.2319 BNB を受け取りましたが、まだ転送していません: この攻撃は、数値演算オーバーフローの脆弱性の威力を実証しています。攻撃者は正確な計算を通じて特定のパラメータを選択し、checked_shlw関数の欠陥を悪用して、1トークンのコストで数十億ドル相当の流動性を取得しました。これは非常に洗練された数学的攻撃です。 SlowMist セキュリティ チームは、開発者がスマート コントラクト開発におけるすべての数学関数の境界条件を厳密に検証することを推奨しています。 BlockBeats の公式コミュニティに参加しよう: Telegram 公式チャンネル:https://t.me/theblockbeats Telegram 交流グループ:https://t.me/BlockBeats_App Twitter 公式アカウント:https://twitter.com/BlockBeatsAsia攻撃分析

(攻撃シーケンス図)






プロジェクトパーティによる修復作業

MistTrack 分析



その後、攻撃者は 1,000 万ドル相当の資産を Suilend に入金しました:
また、攻撃者は 24,022,896 SUI を新しいアドレス 0xcd8962dad278d8b50fa0f9eb0186bfa4cbdecc6d59377214c88d0286a0ac9562 に転送しましたが、これはまだ転送されていません:
幸いなことに、Cetus によると、SUI Foundation および他のエコシステム メンバーと協力して、SUI で盗まれた 1 億 6,200 万ドルの資金を正常に凍結しました。 
(https://x.com/CetusProtocol/status/1925567348586815622)
このアドレスは、Ethereum で 3,000 USDT、4088 万 USDC、1,771 SOL、8,130.4 ETH を受け取りました。そのうち、USDT、USDC、SOLはcoW Swap、ParaSwapなどを通じてETHに交換されました:
その後、このアドレスは20,000 ETHをアドレス0x0251536bfcf144b88e1afa8fe60184ffdb4caf16に転送しましたが、まだ転送されていません:
このアドレスのEthereum上の現在の残高は3,244 ETHです:
MistTrackは上記のアドレスを悪意のあるアドレスライブラリに追加しました。同時に、アドレス残高の監視も継続して行います。 概要