Back to Blog

EthereumPoWにおける「メッセージ」リプレイ攻撃を暴く

Code Auditing
September 19, 2022
3 min read

2022年9月16日、一部の攻撃者がEthereumPoW(PoWチェーンとしても知られる)のPoSチェーンのメッセージ(つまり、calldata)をリプレイすることで、大量のETHWを正常に収穫できたことを検出しました。 エクスプロイトの根本原因は、PoWチェーン上のOmniブリッジが古いchainIdを使用しており、クロスチェーンメッセージの実際のchainIdを正しく検証していないことです。

直ちにEthereumPoWの公式チームに連絡しました。 チームは積極的に対応する意欲があり、Omni Bridgeとのコミュニケーションを試みることもしました。

しかし、多くの攻撃が観測されたため、リスクは一般に通知されるべきであると信じ、2022年9月18日にアラートを公開しました。

これらの攻撃について、メッセージではなくトランザクションをリプレイするという誤解が依然として存在します。このレポートでは、それを明確にするための詳細な分析を提供したいと思います。

攻撃分析

以下にエクスプロイトトランザクションの例を示します。

これらの2つのトランザクションは異なりますが、これらの2つのトランザクションのcalldata(または入力データ)はまったく同じです

0x23caab4900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000011500050000a7823d6f1e31569f51861e345b30c6bebf70ebe7000000000000e0f6f6a78083ca3e2a662d6dd1703c939c8ace2e268d88ad09518695c6c3712ac10a214be5109a655671000927c00101806401867f7a4d000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a6439ca0fcba1d0f80df0be6a17220fed9c9038a0000000000000000000000000000000000000000000000ad78ebc5ac6200000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001482faed2da812d2e5cced3c12b3baeb1a522dc6770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105041c1b1c1c981df6cdaf073d55b78d7f0c7e2b421a569bff677a9464d1d5203672d7b5a3d6af658d14ebc11c26f2547fd0aed01750cca58753a0a79b297bad8a62a71eb6b7ac2099611604eff316e7fe733e9981c1b3890cb04ff9d43612e6f2687227f0226cfa27e4b6cd96a10865e04aa9e0f369dda7548771a094f69bf0a9fa6c27257e22d2b1bbb84beb52ad3966592037b328d352fce375a1fa75cb3fbfd18166f4177a19ad2cc74ce67da68f5ce17b857e6382c3ebf20f76482534135f426f4a74222daa07d9f401cb8baca4339ecd44e285df0e0cb88447a31d08b673cecc67d22c7e6e0ce5afd2ac9439c5a8b68f05077b850cdfdfb79cdaefc5b103bb693609440000000000000000000000000000000000000000000000000000

これは、safeExecuteSignaturesWithAutoGasLimit関数の呼び出しの入力データにすぎません。

明らかに、攻撃者(0x82fae)は最初にGnosisチェーンのOmniブリッジを介して200 WETHを転送し、次に同じメッセージをPoWチェーンでリプレイして、追加の200 ETHWを取得しました。 これにより、PoWチェーン上のデプロイされたチェーンコントラクトの残高を枯渇させることができました。

脆弱性分析

Omniブリッジのソースコードを分析した後、chainIdを検証するロジックが存在することがわかりました。

    function _isDestinationChainIdValid(uint256 _chainId) internal returns (bool res) {
        return _chainId == sourceChainId();
    }

残念ながら、このコントラクトで使用される検証済みのchainIdは、unitStorageという名前のストレージに保存されている値から取得されます。

    /**
     * Internal function for retrieving chain id for the source network
     * @return chain id for the current network
     */
    function sourceChainId() public view returns (uint256) {
        return uintStorage[SOURCE_CHAIN_ID];
    }

これは、EIP-1344で提案されたCHAINID opcodeを介して取得される実際のchainIdではありません。 これは、コードがかなり古い(Solidity 0.4.24を使用している)ためである可能性があります。 コードは、PoWチェーンのフォークまで常に正常に機能していました。

要するに、エクスプロイトの根本原因は、ETHWチェーン上のOmniブリッジが古いchainIdを使用しており、クロスチェーンメッセージの実際のchainIdを正しく検証していないことです。 さらに、同様の問題が他のプロトコルにも存在する可能性があります。

影響

直接的な影響は、攻撃者が大量のETHW(およびPoWチェーン上のブリッジが所有する他のトークン)を収穫し、一部のマーケットプレイス(例:一部のCEX)で取引できたことです。 これにより、流動性の増加によりETHWの価格に影響が出る可能性があります。 したがって、ユーザー/投資家はPoWチェーンでのこれらのトークンの取引に注意する必要があります。

結論

Solidity開発者は、コントラクト自体によって保守されるように設計されたchainIdを扱う際には、特別な注意を払う必要があります。

BlockSecについて

BlockSecは、世界的に著名なセキュリティ専門家グループによって2021年に設立された、先駆的なブロックチェーンセキュリティ企業です。同社は、新興のWeb3の世界のセキュリティとユーザビリティの向上にコミットしており、その大規模な採用を促進しています。この目的のために、BlockSecはスマートコントラクトおよびEVMチェーンのセキュリティ監査サービス、セキュリティ開発と脅威のプロアクティブなブロックのためのPhalconプラットフォーム、資金追跡と調査のためのMetaSleuthプラットフォーム、そしてWeb3ビルダーが暗号世界を効率的にサーフィンするためのMetaDock拡張機能を提供しています。

現在までに、MetaMask、Uniswap Foundation、Compound、Forta、PancakeSwapなど300以上の著名なクライアントにサービスを提供し、Matrix Partners、Vitalbridge Capital、Fenbushi Capitalなどの著名な投資家から2回の資金調達で数千万米ドルを受け入れています。

公式ウェブサイト: https://blocksec.com/

公式Twitterアカウント: https://twitter.com/BlockSecTeam

Sign up for the latest updates
HarmonyのクロスシャードONEミント + 約4700万ドルの鍵漏洩による損失 | BlockSec
Security Insights

HarmonyのクロスシャードONEミント + 約4700万ドルの鍵漏洩による損失 | BlockSec

2026年8月10日〜16日の週、注目すべきセキュリティ事件5件を紹介、損失総額は約4700万ドル。詳細分析はHarmony Layer-1の連鎖実装欠陥に注目。Harmonyでは、クロスシャードのレシート再生により、未署名のMerkleProofのShardIDとBlockNumから支出マーカーを導出し、ONEが不正発行された。約3.01兆ONEが偽造されたが、名目価値は市場総額を大幅に超え、実現・確定損失ではないため総額から除外。約4700万ドルは秘密鍵漏洩(Unknown Whale Wallet約2500万ドル、Kite約1400万ドル、Coinsbuy約790万ドル)とFoxのロジック欠陥(約11.7万ドル)による。

約160万ドルの損失:MokeトークンとLpdFiへの攻撃 | BlockSec週次レポート
Security Insights

約160万ドルの損失:MokeトークンとLpdFiへの攻撃 | BlockSec週次レポート

2026年8月3〜9日の週、BNBチェーンで2件の重大なセキュリティインシデントが発生し、いずれも価格操作により総損失は約160万ドルに上った。LpdFi事件(約69.7万ドル)では、注文評価と利息償還の両方に同じ操作可能なPancakeSwapペアのリザーブが使用され、攻撃者がポジションの元本を水増しし過大な利息を請求した。Mokeトークン(約90.6万ドル)では、操作可能なスポット価格とLP配当の重複計上を組み合わせ、MOKEを水増し請求してBNB配当を複数回取得した。

COLDCARDの事件:ウォレットの「ランダム」シードがランダムではなかった時
Security Insights

COLDCARDの事件:ウォレットの「ランダム」シードがランダムではなかった時

COLDCARDファームウェアのビルド・統合バグにより、Bitcoin種生成がソフトウェアRNGフォールバックに誘導され、脆弱な乱数によりウォレットの秘密鍵がオフラインで復元可能となった。欠陥は種自体にあるためファームウェア更新では修正不可。2026年8月7日までに確認された被害は1,405 BTC(約91億円)、非公式推定では最大2,055 BTCに上る。

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit
EthereumPoWにおける「メッセージ」リプレイ攻撃を暴く