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

(https://x.com/CetusProtocol/status/1925515662346404024)
関連情報
攻撃トランザクションの 1 つ:
https://suiscan.xyz/mainnet/tx/DVMG3B2kocLEnVMDuQzTYRgjwuuFSfciawPvXXheB3x
攻撃者のアドレス:
0xe28b50cef1d633ea43d3296a3f6b67ff0312a5f1a99f0af753c85b8b5de8ff06
攻撃を受けたプールのアドレス:
0x871d8a227114f375170f149f7e9d45be822dd003eba225e83c05ac80828596bc
関係するトークン:
ハスイ/スイ
攻撃分析
この事件の核心は、攻撃者がオーバーフローを引き起こしながら検出を回避できるようにパラメータを巧みに構築し、最終的にごく少量のトークンを使用して大量の流動資産と交換したことです。具体的な手順の分析は次のとおりです。

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 の範囲を超え、切り捨てられます。
攻撃者は中間値流動性 * sqrt_price_diff = 6277101735386680763835789423207666908085499738337898853712を構築します。
- エラーマスク未満、オーバーフロー検出をバイパス
- ただし、64 ビットの左シフト後、u256 の最大値を超え、余分な部分が切り捨てられます。
- 最終的な計算結果は 1 未満ですが、切り上げられているため商は 1 になります。

4. 最後に、攻撃者は流動性を削除し、巨額のトークン利益を獲得します。
- 初回引き出し: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からn >= maskに修正します。
- 64ビットの左シフトでオーバーフローが発生する可能性がある場合、オーバーフローフラグが正しく検出され、返されることを確認します。
ミストトラック分析
分析によると、攻撃者0xe28b50cef1d633ea43d3296a3f6b67ff0312a5f1a99f0af753c85b8b5de8ff06は、SUI、vSUI、USDCなどのさまざまな資産を含め、約2億3000万ドルの利益を上げました。

攻撃者は 2 日前に Gas Fee を準備し、攻撃前に試みたが失敗したことがわかりました。

利益を得た後、攻撃者は資金の一部を
USDC、SOL、suiETHは、Sui Bridge、Circle、Wormhole、Mayanなどのクロスチェーンブリッジを介してEVMアドレス0x89012a55cd6b88e407c9d4ae9b3425f55924919bにクロスチェーンされています。

そのうち、5.2341 WBNB は BSC アドレス 0x89012a55cd6b88e407c9d4ae9b3425f55924919b にクロスチェーンされました。

次に攻撃者は値を追加します
Suilendに預けられた資産1,000万ドル:

攻撃者は 24,022,896 SUI を新しいアドレス 0xcd8962dad278d8b50fa0f9eb0186bfa4cbdecc6d59377214c88d0286a0ac9562 に転送しましたが、まだ転送していません。

幸いなことに、Cetus によると、SUI Foundation と他のエコシステム メンバーの協力により、SUI で盗まれた 1 億 6,200 万ドルの資金は凍結されたとのことです。

(https://x.com/CetusProtocol/status/1925567348586815622)
次に、オンチェーンのマネーロンダリング防止および追跡ツールであるMistTrackを使用して、クロスチェーン資金を受け取るEVM上のアドレス0x89012a55cd6b88e407c9d4ae9b3425f55924919bを分析します。
このアドレスはBSCで5.2319BNBを受け取りましたが、まだ転送していません:

このアドレスは、イーサリアム上で 3,000 USDT、4,088 万 USDC、1,771 SOL、8,130.4 ETH を受け取りました。
このうち、USDT、USDC、SOLはCoW Swap、ParaSwapなどを通じてETHに交換されます。


次に、アドレスは 20,000 ETH をアドレス 0x0251536bfcf144b88e1afa8fe60184ffdb4caf16 に転送しましたが、まだ転送していません。

このアドレスのイーサリアムの現在の残高は 3,244 ETH です。

MistTrack は上記のアドレスを悪意のあるアドレス データベースに追加しました。同時に、アドレス残高の監視も継続します。
要約する
この攻撃は、数値演算オーバーフローの脆弱性の威力を実証しています。攻撃者は正確な計算を通じて特定のパラメータを選択し、checked_shlw関数の欠陥を悪用して、1トークンのコストで数十億ドル相当の流動性を取得しました。これは非常に洗練された数学的攻撃です。 SlowMist セキュリティ チームは、開発者がスマート コントラクト開発におけるすべての数学関数の境界条件を厳密に検証することを推奨しています。
