OWN NEWS GATHER
← 戻る
The Hacker News

Cosmos EVMの重大な脆弱性が悪用され6つのチェーンで資金流出——リスク誤認とパッチ適用の遅れが判明

要点

  • 共有モジュール「Cosmos EVM」の残高処理に関する重大な脆弱性(GHSA-7g4w-cg88-2cq2)が悪用され、2026年8月20日から25日にかけて6つのブロックチェーンから資金が流出した。

  • 脆弱性は2026年4月に報告されていたが、本番環境へのリスクがないと初期評価で誤認され、全チェーンへの影響判明後も公開サイレントパッチとして処理されていた。

  • 原因はEVMとCosmos SDK間の残高同期処理において、ベスティングアカウントの委任時にアンダーフローが発生し、残高が約2^256に桁あふれする不具合にあった。

  • Cosmos Labsは運用者に対し、修正版(v0.6.2 / v0.7.2)への協調アップグレードやアカウント作成の制限など、緊急の対応を求めている。

  • ブロックチェーンエコシステムCosmosの関連技術を開発するCosmos Labsは2026年8月28日、共有モジュール「Cosmos EVM」に存在した残高処理の重大な欠陥が悪用され、6つのブロックチェーンで資金流出が発生したと警告しました。脆弱性識別子「GHSA-7g4w-cg88-2cq2」として公開された本件は、2026年8月20日から25日の間に悪用されたことが確認されています。Cosmos Labsは事後検証報告書(ポストモーテム)を公開し、脆弱性の発見から悪用発覚に至る経緯や、内部プロセスの判断について詳細を明らかにしました。

6つのチェーンで被害確認、修正版への緊急アップグレードを勧告

Cosmos Labsの発表によると、影響を受けるバージョンは「0.6.2未満」および「0.7.0以上0.7.2未満」です。修正パッチは2026年8月19日にリリースされたバージョン「v0.6.2」および「v0.7.2」に含まれています。

本脆弱性はCosmos Labsにより深刻度「Critical(緊急)」と評価されていますが、CVE識別子や脆弱性タイプ分類、CVSSスコアは付与されずに公開されました。

今回の修正はブロックチェーンの状態記録に変更を加える「ステート破壊(state-breaking)」を伴うため、各チェーンのノード運用者が足並みを揃えて適用する「協調ネットワークアップグレード」が必要です。Cosmos Labsは、直ちにアップグレードを実施できない運用者に対し、通常のガバナンス投票によるアップグレード手続きを待つのではなく、ブロック生成を直ちに停止(halt)するよう求めています。

4月の報告から悪用までの経緯——リスク誤認とポリシーとの乖離

公開されたポストモーテムによると、本脆弱性は2026年4月25日にバグバウンティプログラム(脆弱性報奨金制度)を通じてCosmos Labsへ報告されていました。しかし、当初の調査では本番稼働中のネットワーク上の資金に危険を及ぼすものではないと判断されていました。

Cosmos Labsは報告書の中で、「18桁の小数点設定を持つネットワーク上で脆弱性を再現できず、非18桁のネットワークにのみ影響すると誤って結論付けてしまった」と説明しています。

その後、8月13日になって小数点の設定に関わらずすべてのCosmos EVMチェーンが影響を受けることが確認されました。しかし、修正パッチの配布には、本番環境で資金損失が生じない問題向けに規定されている「公開サイレントパッチプロセス」がそのまま適用されました。通常、本番ネットワークのユーザー資金を脅かす脆弱性に対しては安全な非公開チャネルを通じてパッチが配布されますが、同社は「メインブランチ上でパッチがすでに公開されており、悪用の兆候も確認されていなかったため、サイレントパッチの手順を進めても安全だと判断した」と述べています。

一方で、同社のバグバウンティポリシー(7月27日同期)には「問題が即時またはネットワーク全体のリスクをもたらす場合、公の開示前に緊急緩和措置や非公開パッチ配布、協調アップグレードを開始する」と定められており、実際には規定と異なる対応となっていました。

脆弱性の技術的背景——残高同期時のアンダーフローと不正操作

今回の欠陥は、Ethereum Virtual Machine(EVM:イーサリアム互換のスマートコントラクト実行環境)の状態と、Cosmos SDKの残高管理モジュールである「x/bank」との間で残高を照合・同期(リコンシリエーション)するコードに存在していました。

EVM側の状態データベース(StateDB)はアカウントの「利用可能残高」のみを追跡します。これに対し、Cosmos SDK側のベスティングアカウント(一定期間資金がロックされる口座)は、利用可能残高とロック残高の両方を保持します。さらに、Cosmosのステーキング機能(x/stakingモジュールおよびステーキング事前コンパイル)は、ロックされている残高の委任(デリゲーション)を許可していました。

ベスティングアカウントが利用可能残高を上回る金額をステーキングに委任した場合、委任後の残高書き戻し処理において、より小さな利用可能残高から委任額全体が差し引かれます。この減算処理にチェックが入っていなかったため、数値がアンダーフロー(負の数への桁あふれ)を起こし、残高が約2^256(uint256の最大値付近)へと循環(ラップ)してしまう状態が発生しました。

残高の同期処理は、プラスの差分に対して新規発行(ミント)を行い、マイナスの差分に対して焼却(バーン)を行う仕様となっています。攻撃者はこの仕組みを突き、ラップして巨大化したアカウントから資金を外部へ移動させたり、被害者のアカウントへ「2^256から被害者の残高を引いた額」を送金して同期処理で実際の保有資産を強制的にバーンさせたりすることが可能でした。

バージョン0.6系ではSDK元帳上でミント・バーンが行われるため大量ミントにより供給量オーバーフローが発生してチェーンが停止し、バージョン0.7系ではx/bankへ直接残高が書き込まれます。攻撃は、事前にベスティングアカウント化したアドレスへデプロイしたコントラクトから、供給量の純変動をゼロにする単一トランザクションとして実行されました。なお、この悪用にはチェーンが無許可(パーミッションレス)でのベスティングアカウント作成を許可している必要がありました。

運用者に推奨される対策と注意事項

Cosmos Labsは、Cosmos EVMを運用する関係者に対し、以下の具体的な対応策を提示しています。

  • 修正バージョンへの協調アップグレード: v0.6.2またはv0.7.2以降へ更新する。
  • 即時対応不可時のチェーン停止: 設定変更のみによる緩和策は存在せず、ステーキング事前コンパイルの無効化も根本的な解決にはならないため、即時更新ができない場合はブロック生成を停止する。
  • 悪用前提条件の遮断: トランザクション処理前の検証(Ante Handler)において、ベスティングアカウント作成メッセージ(MsgCreateVestingAccount、MsgCreatePermanentLockedAccount、MsgCreatePeriodicVestingAccount)を拒否する。なお、ジェネシス(初期設定)で定義されたアカウントは影響を受けない。
  • フォーク環境での実行パス検証: 公開ヘルパー関数のみを修正するチェリーピック(特定コミットの個別適用)を行った場合、非公開の重複コードが残り、テストを通過しても脆弱性が残存する可能性がある。
  • アドバイザリ未記載の修正適用: ロック残高スナップショットやモジュールアカウントガードといった個別の修正が存在する。ただし、モジュールアカウントガードはモジュールアカウントを一律で拒否するため、モジュールアカウントからのEVM呼び出しが機能しなくなる点に留意が必要。
  • セキュリティ連絡先の登録: 今回のインシデント対応の過程で、公式セキュリティチャネルに未登録だったCosmos EVMチェーンが11件判明したとして、連絡先登録を呼びかけている。

なお、公開されたアドバイザリには、5月15日にmainブランチへマージされ8月13日にバックポートされた減算ガード(プルリクエスト #1176)の1件のみが記載されていますが、リポジトリ内にはアドバイザリで言及されていない残高修正(プルリクエスト #1187等)も含まれていると報じられています。

元URL