シャーロックの脆弱性スポットライトへようこそ、シャーロックの監査中に発見された影響力のある脆弱性に焦点を当てます。 今週は、デポジットスプーフィングがあります。 これは、@zetablockchain クロスチェーン コンテストで @0xalpharush & @bernd_eth によって発見されました。🧵
この脆弱性の@bernd_ethの概要は次のとおりです。 1. ZetaChainのオブザーバーは、外部チェーン(イーサリアム、ソラナなど)上のトランザクションを監視し、トランザクションの成功を前提として、集中型インバウンドトラッカーに追加して、入出金として処理します。 2. EVM 統合とは異なり、Solana の実装ではトランザクションの成功チェックがスキップされるため、悪意のあるオブザーバーが失敗した入金を追加したり、裏付けられていない ZRC20 SOL を鋳造したり、ブリッジされた資金を流出させたりすることができます。 3. オブザーバーはZetaChainによって明示的に許可リストに登録されていますが、単一の当事者がチェーンを侵害したり、資産を吸い上げたりできないようにすることが重要です。
通常、オブザーバーは失敗したトランザクションを処理しませんが、このコード パスは対応する EVM と同じ検証を実行できません。これには「特権」の役割が必要ですが、すべてのバリデーターはオブザーバーであり、BFTコンセンサスはビザンチン寛容、つまり<1/3の悪意のある当事者を容認するはずです。したがって、悪意のあるオブザーバーが、Solana 実装の検証が不足しているインバウンド トラッカーを通じて、デポジットを偽造し、失敗したトランザクションに対して ZRC20 Sol を鋳造するよう誠実なバリデーターに投票するよう誘導することはできません。
この脆弱性の根本原因は次のとおりです。 ProcessInboundEvents 関数は、ここで正しく実行される EVM インバウンド オブザーバーとは異なり、トランザクションが成功する必要はありません。命令は成功したかのようにデコードされるため、悪意のある観察者は ZRC20-SOL 残高全体のデポジットを偽装し、ブリッジの Solana 側にロックされた SOL を引き出し、ブリッジ内のすべてのランポートを盗むことができます。この攻撃は、SPL トークンを引き出したり、任意の入金や呼び出しを実行したりするためにも使用される可能性があります。たとえば、入金命令でゲートウェイのPDAから書き込み可能なプロパティを削除すると、トランザクションが失敗し(POCのアンカー制約エラーを参照)、MsgAddInboundTrackerを介してインバウンドトラッカーに追加された後も処理できます。
内部前提条件: 悪意のある観察者または過失のオブザーバーが、MsgAddInboundTracker を使用してゲートウェイ命令を含む失敗した Solana tx をインバウンド トラッカーに追加し、その結果、すべてのバリデーターが Zetachain で ZRC20 Sol を鋳造するために処理および投票します。 CCTX は十分な投票を受け取り、Zetachain 上の裏付けのない ZRC20 Sol が鋳造されます。
外部前提条件: いずれの当事者も、失敗したトランザクションを入金指示(または入金と呼び出し)でゲートウェイに送信します。 Zetachain 上の ZRC20 Sol の受信者はそれを引き出し、Solana でランポートを受け取ります。
攻撃経路: 1) いずれかの当事者が、失敗したトランザクションを入金指示(または入金と呼び出し)でゲートウェイに送信します。 2) 悪意のある観察者または過失のあるオブザーバーが、MsgAddInboundTracker を使用してゲートウェイ命令を含む失敗した Solana tx をインバウンド トラッカーに追加し、その結果、すべてのバリデーターが Zetachain で ZRC20 Sol を鋳造するために処理および投票します。 3) ProcessInboundTrackers タスクにより、なりすましされた CCTX が十分な投票を受け取り、Zetachain 上の裏付けられていない ZRC20 Sol が鋳造されます。 4) Zetachain 上の ZRC20 Sol の受信者はそれを引き出し、Solana でランポートを受け取ります。
どのような影響がありますか? Solanaブリッジに預けられたすべてのランポートとSPLトークンは、任意の金額で預金が偽造されることを考えると、盗まれる可能性があります(ゲートウェイプログラムによってトランザクションが元に戻されるにもかかわらず処理されます)。
緩和策: Solana Observer のインバウンド トラッカー処理では、投票する前にトランザクションが成功したかどうかを確認します。
私たちは、この発見を通じて@zetablockchainの確保に貢献できたことを誇りに思っています。 絶対に安全にする必要がある場合は、シャーロックが正しい選択です。
2.62K