SP1バグ、SuccinctのProver Networkを直撃

- 高重大度のSP1完全性バグにより、Succinct自身のメインネットProver Networkが無効な証明を受け入れる状態にさらされました。
- この欠陥は、バージョン6.0.0から6.8.0におけるSP1のネイティブRust検証プログラムに存在していました。
- Succinctはバージョン6.8.1の修正をメインネットProver Networkにデプロイしました。
Succinctのゼロ知識証明システムSP1における高重大度の完全性バグにより、同社のメインネットProver Networkが無効な証明に対して脆弱になりました。
10月11日に公開されたGitHubのセキュリティアドバイリによると、影響を受けたのはSuccinctが認識していた唯一のデプロイメントであるネットワークのみでした。
バージョン6.0.0から6.8.0のネイティブRust検証プログラムは、無効な証明を受け入れる可能性がありました。
GHSA-p7v2-jjv3-8p8fとして提出されたアドバイザリによると、悪意のあるプロバーが無効な実行に対する証明書を提出し、ネットワークの検証者がそれを受容する可能性がある。Prover Networkは第三者プロバーからの証明を受け入れていた。
このバグを利用するには、証明をSP1のネイティブRust検証者に直接送信する必要があった。CoreおよびCompressed証明はこのパスで公開されていた。
Groth16およびPlonkチェックは安全だった。これらは固定形状のラップド証明を使用しており、バグの原因となるプロバー制御テンソル形式には一切触れていなかったためである。
オンチェーンのPlonkおよびGroth16チェック用のSolidityチェッカーも影響を受けていない。verify_sp1_proof関数を使用してCompressed証明をチェックするアプリは、証明の集約が最終的にGroth16またはPlonk証明に至る場合にのみ安全であった。
アドバイザリによると、バージョン6.0.0から6.8.0まで、sp1_hypercube、sp1_prover、sp1_sdkが影響を受けている。修正はSuccinctによって2024年9月24日(アドバイザリの公開17日前)にリリースされたバージョン6.8.1で行われた。

ストレージ長が一致しないテンソルは、バージョン6.8.1で破棄される。
SP1のネイティブRust検証器にバグが存在した。これは、証明が有効かどうかを確認するプログラムの部分である。
SP1は多次元データをTensorに格納します。Tensorは、保存された値のバッファと形状を記述する宣言済みの次元で構成されます。
健全な検証のためには両方が一致している必要があります。保存されている要素数は、指定された次元の積と同じでなければなりません。
各証明データのラベルにはそのサイズが表示されます。検証者はラベルの内容が内部データと一致することを確認していませんでした。ラベルのみを参照していました。
したがって、攻撃者は偽のラベル付きデータを送信できます。チェックの異なる部分が同じデータのさまざまな部分を参照することになり、偽造された証明が通過してしまう可能性があります。
バージョン6.8.1では、逆シリアル化時に長さのチェックが導入されました。保存されている要素数が宣言済みの次元の積と一致しないTensorは拒否されます。
6.8.1の公開後、SuccinctはメインネットProver Networkに修正プログラムを展開しました。
ネットワークから証明を要求するユーザー側に変更は必要ありません。信頼できないプロバイダーからの証明を受け入れる独自ネイティブRust検証を実行している場合は、6.8.1にアップグレードする必要があります。
Vitalis Salisがこの脆弱性を発見し、Immunefiのバグ報奨金プログラムを通じて報告しました。 advisoryによると。
Other proof-system soundness bugs, including a soundness bug in Zcash’s Orchard shielded pool, have been reported this year by Cryptopolitan. Cryptopolitan also discussed an exploit at Foom.Cash where an attacker forged zkSNARK proofs because of a verifier misconfiguration.
これをお読みいただいているあなたは、すでに一歩先を行っています。当社のニュースレターでその先を行ってください。
よくある質問
SP1の脆弱性とは何でしたか?
SP1のネイティブRust検証器における健全性のバグで、悪意のある証明者が無効な実行に対する証明を取得し、それが受理されることを可能にしていました。
影響を受けるSP1のバージョンと、それを修正するバージョンはどれですか?
バージョン6.0.0から6.8.0までが影響を受け、バージョン6.8.1で修正されています。
SP1ユーザーは何か行動を起こす必要がありますか?
SuccinctのメインネットProver Network上のリクエスターには変更は不要です。信頼できない証明者からの証明を受け取る独自のネイティブRust検証器を実行しているチームは、6.8.1にアップグレードする必要があります。
免責事項。 本情報は取引助言ではありません。Cryptopolitan.com は、本ページに記載された情報に基づいて行われた投資に対して一切の責任を負いません。投資判断を下す前に、独自の調査を行うか、資格を有する専門家にご相談することを強く推奨します。

ランダ・モーゼス
ランダ・モーゼスはCryptopolitanのエディター兼記者で、テクノロジー、AI、ロボティクス、暗号資産、詐欺、ハッキングなどを担当しています。2017年以来暗号資産分野で活動しており、Forward Protocol、AmaZix、Cryptosomniacで役職を務めました。ブラッドフォード大学で電気電子工学の学位を取得しています。
















