著者:Victory & Lisa

背景

5月22日、コミュニティからの情報によると、SUIエコシステムの流動性提供者Cetusが攻撃された疑いがあり、流動性プールの深さが大幅に減少し、Cetus上の複数のトークン取引ペアが下落し、損失額が2.3億ドルを超えると予想されています。その後、Cetusは「我々のプロトコルで事件が検出され、安全のためにスマートコントラクトは一時停止されました。現在、チームはこの事件の調査を行っています。すぐにさらなる調査声明を発表します」と発表しました。

事件発生後、SlowMistのセキュリティチームが直ちに分析に介入し、セキュリティ警告を発表しました。以下は攻撃手法と資金移転状況の詳細な解析です。

(https://x.com/CetusProtocol/status/1925515662346404024)

関連情報

攻撃取引の一部:

https://suiscan.xyz/mainnet/tx/DVMG3B2kocLEnVMDuQzTYRgjwuuFSfciawPvXXheB3x

攻撃者アドレス:

0xe28b50cef1d633ea43d3296a3f6b67ff0312a5f1a99f0af753c85b8b5de8ff06

攻撃を受けたプールのアドレス:

0x871d8a227114f375170f149f7e9d45be822dd003eba225e83c05ac80828596bc

関与するトークン:

haSUI / SUI

攻撃分析

この事件の核心は、攻撃者がパラメータを慎重に構築し、オーバーフローを引き起こしても検出を回避できるようにしたことです。最終的に非常に少ないトークン額で巨額の流動性資産と交換できるようになりました。以下は具体的な手順の解析です:

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.最終的に攻撃者は流動性を除去し、巨額のトークン利益を得る:

  • 初回除去: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ビット左シフトがオーバーフローを引き起こす可能性がある場合、オーバーフローフラグを正しく検出して返すことを確認する

MistTrack分析

分析によれば、攻撃者0xe28b50cef1d633ea43d3296a3f6b67ff0312a5f1a99f0af753c85b8b5de8ff06は約2.3億ドルを獲得しており、SUI、vSUI、USDCなどの多くの資産が含まれています。

攻撃者が2日前にガス料金を準備しており、攻撃前に一度試みたが失敗したことが分かりました:

利益を得た後、攻撃者は一部の資金を次のように

USDC、SOL、suiETHをSui Bridge、Circle、Wormhole、Mayanなどのクロスチェーンブリッジを通じてEVMアドレス0x89012a55cd6b88e407c9d4ae9b3425f55924919bにクロスチェーンしました:

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

次に、攻撃者は価値を

1,000万ドルの資産がSuilendに預けられました:

攻撃者は24,022,896 SUIを新しいアドレス0xcd8962dad278d8b50fa0f9eb0186bfa4cbdecc6d59377214に転送しましたが、現在はまだ転送されていません:

幸運なことに、Cetusによると、SUI財団や他のエコシステムメンバーの協力により、現在SUI上で1.62億ドルの盗まれた資金を凍結することに成功しました。

(https://x.com/CetusProtocol/status/1925567348586815622)

次に、私たちはオンチェーンのマネーロンダリングおよび追跡ツールMistTrackを使用して、EVM上でクロスチェーン資金を受け取るアドレス0x89012a55cd6b88e407c9d4ae9b3425f55924919bを分析します。

そのアドレスはBSC上で5.2319 BNBを受け取り、まだ転送されていません:

そのアドレスはEthereum上で3,000 USDT、4,088万 USDC、1,771 SOL、8,130.4 ETHを受け取りました。

そのうち、USDT、USDC、SOLはCoW Swap、ParaSwapなどでETHに交換されました:

次に、そのアドレスから20,000 ETHがアドレス0x0251536bfcf144b88e1afa8fe60184ffdb4caf16に転送され、まだ転送されていない:

現在、そのアドレスはEthereum上で3,244 ETHの残高があります:

MistTrackは上記の関連アドレスを悪意のあるアドレスリストに追加しました。同時に、私たちはアドレスの残高を継続的に監視します。

まとめ

今回の攻撃は数学的オーバーフローの脆弱性を示しています。攻撃者は正確な計算を通じて特定のパラメータを選択し、checked_shlw関数の欠陥を利用して、1トークンのコストで数十億の流動性を獲得しました。これは非常に精密な数学的攻撃であり、SlowMistのセキュリティチームは、開発者にスマートコントラクトの開発においてすべての数学関数の境界条件を厳密に検証することを推奨しています。