2025年5月22日、Sui上で最大の集中流動性DEXであるCetus Protocolが壊滅的なエクスプロイトに見舞われ、複数のプールで流動性が枯渇し、推定2億2300万ドルの損失が発生しました。この事件は2025年最大のDeFiハックとなり、特に固定小数点演算に関連するスマートコントラクトセキュリティの重大な脆弱性を浮き彫りにしました。
エクスプロイトは、カスタムオーバーフロー防止関数 checked_shlw() の欠陥から発生しました。不適切な定数と比較により、この関数は、固定小数点u256演算で使用される左シフトを実行する前に、安全でない条件を検出できませんでした。この見落としにより、トークン投入量などの重要なデルタ計算中に最上位ビットがサイレントに切り捨てられることを可能にし、ユーザーが提供する必要のあるトークン量などを決定する際の計算が不正になりました。攻撃者は、流動性サイズやティック/価格範囲設定などのパラメータを慎重に操作することで、プロトコルを、実質的に1単位のトークンの預け入れを計算させながら、同時にそのポジションに膨大な量の流動性を付与するように欺くことができました。このインフレしたポジションがオンチェーンに記録された後、攻撃者は流動性を削除し、実際の準備金を回収し、プールから資金を枯渇させました。
集中流動性と固定小数点演算の理解
Cetus Protocolは、流動性プロバイダー(LP)が選択した価格範囲(ティック間隔)内でのみ資産を供給する洗練されたアプローチである集中流動性マーケットメーカー(CLMM)設計を利用しています。伝統的なAMMが流動性を均一に分散するのとは異なり、CLMMはLPが特定の上下限の間に資本を集中させることを可能にします。この設計は資本効率を大幅に向上させますが、以下を変換するための正確な固定小数点演算に大きく依存します。
- ポジションに付与される流動性量。
- 預け入れられる、または引き出される実際のトークン量。
ユーザーが流動性を追加すると、プロトコルは現在の価格と選択された範囲に基づいて、トークンデルタ(必要な基盤トークン量)を計算します。逆に、流動性が削除されると、逆の計算により、ポジションが引き出す権利のある資産の量が決定されます。
Cetusインシデントの根本的な脆弱性は、この複雑な関係を悪用しました。もし「預け入れなければならない量」の計算が小さすぎると操作でき、同時にポジションが大きな流動性で付与されたままであれば、攻撃者は後でその付与された流動性を削除して、プールの実際の準備金を回収することができました。これは、複雑な数学的演算を伴うDeFiプロトコルにおける一般的な攻撃ベクトルを浮き彫りにしています。
重要なu256シフト脆弱性
この大規模なDeFiハックの根本原因は、固定小数点u256演算(通常は2^64のスケーリング係数を適用するための<< 64)で一般的な操作である左シフトを安全に実行するように設計されたヘルパー関数内のバグでした。SuiのようなMoveベースのシステムでは、すべての操作でオーバーフローチェックが一様に強制されるわけではないため、ビットシフトの手動による保護が不可欠です。
Cetusは、u256値を64ビット左シフトしたときに256ビット境界を超えるかどうかを確認するために、オーバーフロー防止ヘルパー checked_shlw() を実装しました。しかし、不適切な定数と比較により、この重要なチェックは、拒否されるべき特定の大きな入力に対してバイパスされる可能性がありました。
具体的には、2つの価格(sqrt_price_0とsqrt_price_1)間の流動性提供に必要な基盤トークン(トークンA)の量を計算する get_delta_a 関数は、checked_shlw() を呼び出します。ここでの checked_shlw() の目的は、トークンA計算の分子がシフト時にオーバーフローしないことを保証することです。
欠陥は checked_shlw() のオーバーフローチェックにあり、これはマスクとして 0xffffffffffffffff << 192 (2^256 - 2^192に相当)を使用していました。このマスクは、正しいしきい値よりも大幅に大きいです。その結果、2^192より大きく、この誤ったマスクよりも小さい入力値は、左シフトすると確かにu256範囲を超えるにもかかわらず、チェックを通過することができました。その後の左シフトは、サイレントな切り捨てをもたらし、不正確で大幅に小さい値を生成しました。
以下の図は、脆弱な実装とパッチが適用されたバージョンとの違いを示しています。正しい境界は、はるかに大きい 0xffffffffffffffff << 192 ではなく、1 << 192 であるべきでした。攻撃者は、この欠陥のあるチェックを巧みに悪用し、最小限の量(例えば、トークンAの1 wei)を預け入れながら、異常に多くのLPトークンをミントしました。

Cetus DeFiハックの解剖
攻撃者は複数のプールで同じ技術を適用しましたが、根本的な攻撃フローは一貫していました。この高度なブロックチェーンセキュリティ侵害に関わる手順を理解するために、特定のトランザクションを分析しましょう。
1. フラッシュローンでプール価格を操作する
攻撃は、攻撃者がフラッシュローンを利用して10,024,321.28 haSUIを急速に獲得することから始まりました。次に、5,765,124.79 SUIをスワップアウトし、意図的にプール価格を18,956,530,795,606,879,104から18,425,720,184,762,886に低下させました。この戦略的な価格変動は、攻撃者が集中流動性設計に内在する「単一サイド/ほぼ単一トークン」の流動性挙動を活用して、1つのトークンの最小量のみを必要とするCLMMポジションを開くことを可能にしたため、極めて重要でした。

2. 「ほぼ無料」の預け入れで流動性を追加する
次に、攻撃者は非常に狭いティック範囲(例:300000–300200)を選択し、ターゲット流動性を正確に調整しました。CLMMシステムでは、トークンデルタ計算は範囲境界の平方根価格に大きく依存し、狭い範囲では特定の中間値がわずかな変化に極めて敏感になる可能性があります。
これらのパラメータを慎重に調整することにより、攻撃者は内部乗算でu256中間値を生成させました。この値は左シフト時にオーバーフローするはずでしたが、欠陥のある checked_shlw() ガードを正常に通過しました。安全でないシフトによって引き起こされた切り捨ての直接的な結果として、プロトコルは必要なトークンA量を実質的に1単位として計算しましたが、同時にポジションに膨大な量の流動性(つまり、10,365,647,984,364,446,732,462,244,378,333,008)をミントして記録しました。

3. 流動性を削除して実際の準備金を抽出する
オンチェーンのポジションが偽のインフレ流動性を持っているように見えたため、攻撃者は流動性を削除し、ポジションが適切に資金調達されていたかのように資産を引き出しました。この重要なステップで、プールの実際の準備金が体系的に枯渇し、2億2300万ドルという巨額の損失につながりました。
4. 複数のプールで繰り返す
攻撃プリミティブを正常に検証した後、攻撃者は同じワークフローを複数のプールに複製し、総損失を急速に拡大させ、これまでで最大のDeFiハックの1つを実行しました。
Web3に最適なセキュリティ監査人
ローンチ前に設計、コード、ビジネスロジックを検証する
主要な教訓とブロックチェーンセキュリティの教訓
Cetusインシデントは、特に複雑なDeFiプロトコルにおけるブロックチェーンセキュリティの複雑な課題を痛感させる出来事でした。根本原因は、固定小数点演算パスのu256左シフト周りの誤ったオーバーフローチェックでした。これにより、オーバーフローしたシフトが上位ビットをサイレントに切り捨て、預け入れ額がほぼゼロに見える一方で、LPポジションには巨額の流動性が付与され、最終的に準備金の抽出が可能になりました。
スマートコントラクトセキュリティのための教訓:
- 算術処理における厳格さ: シフト、スケーリング係数、丸め、境界条件を固定小数点演算で扱う際には、例外的に厳格であること。これらは重大な脆弱性の一般的な原因です。
- 実績のあるプリミティブ: 実績のある安全な算術プリミティブまたは形式化された不変条件の使用を、アドホックなヘルパー関数の開発よりも優先すること。カスタムヘルパーが必要な場合は、その定数としきい値を極めて慎重に検証すること。
- 包括的なテスト: エッジケースとプロパティベースのテストを広範囲に実装し、最大値、境界ティック、敵対的なパラメータの組み合わせを網羅すること。このプロアクティブなアプローチは、デプロイ前に微妙な欠陥を発見できます。
- 継続的な監視: 堅牢な監査があっても、リアルタイム監視ソリューションは不可欠です。BlockSecのPhalcon Securityのようなツールは、疑わしいオンチェーンアクティビティや進行中の潜在的なエクスプロイトを検出でき、重要な最後の防御線を提供します。
Cetusインシデントは、ブロックチェーンセキュリティに対する多層的なアプローチの重要性を強調しており、綿密なコードレビュー、高度なテスト手法、継続的なオンチェーン監視を組み合わせることで、洗練されたDeFiハックから保護できます。
参照
BlockSecについて
BlockSecは、フルスタックのブロックチェーンセキュリティおよび暗号コンプライアンスプロバイダーです。私たちは、顧客がコード監査(スマートコントラクト、ブロックチェーン、ウォレットを含む)、リアルタイムでの攻撃傍受、インシデント分析、不正資金追跡、AML/CFT義務の履行を、プロトコルとプラットフォームのライフサイクル全体にわたって実行するのに役立つ製品とサービスを構築しています。
BlockSecは、権威あるカンファレンスで複数のブロックチェーンセキュリティ論文を発表し、DeFiアプリケーションの複数のゼロデイ攻撃を報告し、複数のハッキングを阻止して2000万ドル以上を救済し、数十億ドルの暗号通貨を保護しています。
- 公式ウェブサイト:https://blocksec.com/
- 公式Twitterアカウント:https://twitter.com/BlockSecTeam



