シャーロックの脆弱性スポットライトへようこそ、シャーロックの監査中に発見された影響力のある脆弱性に焦点を当てます。 今週は、チェーンサービス拒否(CDoS)があります。 @MorphLayer L2 コンテスト中に @0xPapaPitufo によって発見されました。 🧵👇
Rollup.sol では、悪意のあるバッチが提案された場合、それを提案したシーケンサーがチャレンジに負け、スラッシュされ、チェーンがリセットされることが想定されます。これらの経済的インセンティブにより、チェーンが定期的に停止されることが妨げられます。 これは、シーケンサーが提案したバッチが有効な場合にのみチャレンジに勝つことができるという仮定に基づいています。
ただし、prevStateRootが前のバッチのpostStateRootであるかどうかのチェックは、finalizeBatch()でのみ行われます。このチェックは、偽の prevStateRoots を持つバッチがファイナライズされないようにするには十分ですが、これらのバッチのコミットを停止するものではありません。 これにより、悪意のあるシーケンサーは、偽の prevStateRoot で有効な状態トランザクションを実行するバッチを提案できます。
ほとんどの場合、チャレンジャーはこの無効なバッチを攻撃します。ただし、シーケンサーは、この状態遷移の有効な証拠を提供して、誠実な挑戦者のデポジットを盗み、チャレンジに勝つことができます。 これが発生した場合、またはチャレンジが実行されない場合、次のチェックにより、コミットされたバッチをファイナライズできません。 これにより、チェーンがフリーズされ、バッチは順番にコミットされ、順番にファイナライズする必要があるため、新しいバッチをファイナライズすることはできません。
攻撃経路: 1) 攻撃者は、偽の prevStateRoot からの有効な状態遷移を含むバッチを提案します。 2) 誠実な挑戦者がバッチに挑戦した場合、攻撃者はチャレンジに勝ち、挑戦者のデポジットを盗むために状態遷移の有効な証拠を提供します。 3) 上記が発生するかどうかにかかわらず、攻撃者のバッチはファイナライズできず、最初にファイナライズされない限り他のバッチをファイナライズできないため、チェーンは停止します。 4) 攻撃者はチャレンジに勝ったため、斬られることはありません。
どのような影響がありますか? 不正直なチャレンジは、不正なシーケンサーがチャレンジでそれを打ち負かすとデポジットを失い、新しいバッチをファイナライズできず、チェーンのサービス拒否を引き起こし、管理者が手動でロールバックする必要があります。
緩和策: commitBatch() で、prevStateRoot が parentBatchHeader.postStateRoot と等しいことを確認します。
私たちは、この発見を通じて@morphlayerの確保に貢献できたことを誇りに思っています。 絶対に安全にする必要がある場合は、シャーロックが正しい選択です。
3.12K