コスモスラボ、Cosmos EVM攻撃の事後報告書公開。6チェーンで脆弱性悪用

コスモス・ラボがCosmos EVM攻撃の事後報告書を公開

ブロックチェーン関連ソフトウェアを開発するコスモス・ラボ(Cosmos Labs)が、ブロックチェーン開発基盤「コスモスEVM(Cosmos EVM)」の脆弱性を悪用した一連の攻撃に関する事後報告書(ポストモーテム)を8月28日に公開した。6つのネットワークで脆弱性が悪用され、盗まれたトークンのうち約287万ドル相当が分散型取引所(DEX)で別の資産へ交換されたほか、約285万ドル相当が中央集権型取引所(CEX)で売却されたと推定されている。

今回のインシデントについては8月25日、コスモス・ラボがコスモスEVMのユーザーに影響するセキュリティ・インシデントが発生していると発表。同社と連絡を取っているコスモスEVM採用チェーンに対し、バリデータへチェーン停止を要請するよう助言していた。

当時コスモス・ラボからは脆弱性の具体的な内容や影響を受けたチェーン、被害規模などは公表されておらず、状況解決後にインシデント報告書を公開するとしていた。

今回公開された事後報告書によると、攻撃は8月20日19時6分(UTC)から25日15時20分(UTC)にかけて発生した。DEXで交換された約287万ドル相当は8月19日時点の価格に基づく。CEXで売却された約285万ドル相当は、公開されている取引データを基にした推定額だ。またコスモス・ラボによると、影響を受けたチェーンからの報告では、攻撃者が利用したCEXのアカウントは捜査を待つ間、凍結されているとのことだ。

同じ脆弱性が複数のチェーンで悪用された背景には、コスモスEVMが複数のブロックチェーンで利用される共通ソフトウェアであることがある。コスモスEVMは、コスモスSDK(Cosmos SDK)で構築されたブロックチェーンにEVM(Ethereum Virtual Machine)機能を組み込むためのソフトウェアだ。これにより、イーサリアム(Ethereum)と互換性のあるスマートコントラクトを実行できる。今回は、この「cosmos/evm」のうち、コスモスEVMとコスモスSDKの間で残高を整合させるコードに脆弱性が存在していた。

脆弱性は4月に報告、影響範囲を誤判断

今回の事後報告書では、攻撃に悪用された脆弱性が4月の時点でコスモス・ラボへ報告されていたことも明らかになった。同社によると、脆弱性は4月25日にバグ報奨金プログラムを通じて報告された。当初の報告では、小数点以下6桁に設定されたコスモスEVMネットワークで脆弱性を再現する概念実証(PoC)が提示されていたとのこと。

コスモス・ラボは小数点以下18桁のネットワークでも脆弱性の再現を試みたが確認できず、18桁のネットワークには影響しないと誤って判断した。当時把握していた本番稼働中のコスモスEVMネットワークはいずれも18桁の設定だったことから、ユーザー資産への脅威はないと評価したという。

この判断を受け、コスモス・ラボは脆弱性の詳細を公表せず、公開リポジトリ上で修正する「サイレントパッチ(silent patch)」のプロセスを採用した。ユーザー資産を脅かす脆弱性では、詳細の公開によって修正前のネットワークが攻撃される可能性があるため、同社は通常、影響を受けるネットワークへ非公開チャネルを通じて修正を共有する。しかし今回はユーザー資産への脅威はないとの判断から、この方法は採用されなかった。

5月15日にはコスモスEVMのmainブランチに修正コードが反映された。ただし、この時点で稼働中の各チェーンに修正が適用されたわけではない。今回の修正はブロックチェーンの状態に影響する変更だったため、実際のネットワークへの反映には各チェーン側で協調したアップグレードが必要だった。このため既存のリリース系列にはすぐに適用されず、次のマイナーリリースでの導入が予定されていた。

その後、独立したセキュリティ研究者から追加の報告が寄せられた。新たな情報を基に再調査した結果、コスモス・ラボは8月上旬、小数点以下の設定にかかわらず全てのコスモスEVMチェーンが影響を受けることを確認した。

この段階ではユーザー資産への脅威が確認されていたため、通常であれば非公開チャネルを通じて修正を配布するケースだった。一方、修正コードはすでにmainブランチで公開され、それまで悪用も確認されていなかった。コスモス・ラボはこの状況から、引き続きサイレントパッチのプロセスを進められると判断した。

同社は修正内容を難読化した上で既存のリリース系列へ適用し、8月19日に修正版「v0.6.2」と「v0.7.2」を公開した。リリースノートでは重要なセキュリティ修正を含むとして早急なアップグレードを推奨したものの、脆弱性の具体的な内容は明らかにしなかった。

その翌日の8月20日7時16分(UTC)、コスモスEVMをフォークして利用するプッシュ・チェーン(Push Chain)の公開プルリクエスト(PR)で、今回の脆弱性と悪用方法が詳細に説明された。同PRでは、セキュリティ企業ハッケン(Hacken)の独立監査で発見された問題として、脆弱性の内容や影響を受けるリリースが示された。一方、約8時間前に公開されていた修正版「v0.6.2」と「v0.7.2」は記載されていなかった。

コスモス・ラボは、サイレントパッチを有効に機能させるには、公開された修正コードから脆弱性の重要性や悪用方法を容易に特定できないことが重要だと説明している。今回のように下流の開発者が脆弱性の悪用方法まで公開するケースは非常にまれだったとのことだ。

プッシュ・チェーンのPR公開から約12時間後となる同日19時6分(UTC)、マントラチェーン(MANTRA Chain)で最初に確認された攻撃が発生した。なお、事後報告書ではPR公開と攻撃発生との因果関係は示されていない。

残高処理の脆弱性を悪用、コスモス・ラボは対応プロセス見直しへ

今回の攻撃では、コスモスEVMとコスモスSDKの間でトークン残高を処理する方法に不整合があることが悪用された。攻撃者はこの不整合を利用して、実際には保有していない巨額の残高があるような状態を作り、その状態から別のアカウントが保有する正規のトークンを取得した。

具体的には、一定期間ロックされたトークンなどを管理するベスティング・アカウント(vesting account)で、利用可能な残高を超える量をステーキングへ委任すると、残高を差し引く処理で「アンダーフロー」が発生する脆弱性が存在した。これによりコスモスEVM側では、同アカウントに極めて大きな残高がある状態となった。

コスモス・ラボによると、攻撃者はこの異常な残高を利用して別のアカウントで「オーバーフロー」を発生させ、同アカウントが保有していた正規のトークンを取得した。これら2つの脆弱性は1つのトランザクション内で組み合わせて悪用されたという。なお、新たなトークンが発行されたわけではなく、攻撃によってトークンの総供給量は増加していない。

コスモス・ラボはマントラから脆弱性が実際に悪用されているとの連絡を受けた後、既知のコスモスEVMネットワークを対象に対応を開始した。非公開チャネルを通じて修正や緩和策を共有し、計40のコスモス系チェーンと連携した。

また同社は、影響を受ける可能性があった13のネットワークと連携し、パッチ適用やネットワーク停止などの対策を実施した。これらのネットワークでは追加のインシデントは発生しなかったとのこと。

コスモス・ラボは今回のインシデントを受け、重大な脆弱性の評価と修正プロセスを包括的に見直す方針だ。特に今回のように、最初の報告で示された範囲よりも実際の影響範囲が広いケースを特定する手法を強化する。

また同社は、ネットワーク停止を推奨する条件や、公開のサイレントパッチではなく非公開チャネルを通じて修正を共有する条件についても基準を明確化する予定だ。長期的には外部のセキュリティ専門家と連携し、セキュリティ運用全体を監査する方針だ。

参考:ポストモーテムセキュリティアドバイザリPR
画像:PIXTA

関連ニュース

関連するキーワード

この記事の著者・インタビューイ

渡邉洋輔

「あたらしい経済」編集部 記者 ブロックチェーンおよびデジタル資産分野を専門とし情報発信を行っている。オンチェーンデータや流動性構造など、市場設計の観点からのリサーチにも取り組んでいる。