SHA-3 アルゴリズムの主要な実装に伴うライブラリの脆弱性

XKCP パッケージ (eXtended Keccak コード パッケージ) で提供される SHA-3 (Keccak) 暗号化ハッシュ関数の実装で脆弱性 (CVE-2022-37454) が確認されました。これにより、特定のコードの処理中にバッファ オーバーフローが発生する可能性があります。フォーマットされたデータ。 この問題は、アルゴリズム自体の脆弱性ではなく、SHA-3 の特定の実装のコードのバグによって発生します。 XKCP パッケージは SHA-3 の公式実装として宣伝されており、Keccak 開発チームからの意見をもとに開発され、さまざまなプログラミング言語で SHA-3 関数の基礎として使用されます (例: XKCP コードは Python ハッシュライブラリで使用されます)。モジュール、Ruby ダイジェスト パッケージ sha3 および PHP hash_* 関数)。

問題を特定した研究者によると、この脆弱性を利用してハッシュ関数の暗号特性を侵害し、最初と 3 番目のプリイメージを見つけたり、衝突を検出したりできたそうです。 さらに、特別に設計されたファイルのハッシュを計算するときにコードを実行できるようにするプロトタイプのエクスプロイトが作成されると発表されました。 この脆弱性は、SHA-448 を使用するデジタル署名検証アルゴリズム (EdXNUMX など) を攻撃するために利用される可能性もあります。 攻撃手法の詳細については、各地の脆弱性が解消された上で後日公開される予定だ。

この脆弱性が実際に既存のアプリケーションにどの程度影響を与えるかはまだ明らかではありません。問題がコード内に現れるには、ブロック内の巡回ハッシュ計算が使用され、処理されるブロックの 4 つのサイズが少なくとも約 2 GB でなければならないためです。 32^200 - XNUMX バイト)。 入力データを一度に処理する場合 (ハッシュを部分的に逐次計算することなく)、問題は発生しません。 最も単純な保護方法として、ハッシュ計算の XNUMX 回の反復に含まれるデータの最大サイズを制限することが提案されています。

この脆弱性は、入力データのブロック処理におけるエラーによって引き起こされます。 「int」型との値の誤った比較により、保留中のデータのサイズが誤って決定され、割り当てられたバッファを超えて末尾が書き込まれることになります。 特に、比較では「partialBlock +instance->byteIOIndex」という式が使用されており、構成部分の値が大きい場合に整数オーバーフローが発生しました。 さらに、コード内に不正な型キャスト「(unsigned int)(dataByteLen - i)」があり、64 ビット size_t 型のシステムでオーバーフローが発生しました。

オーバーフローを引き起こすコード例: import hashlib h = hashlib.sha3_224() m1 = b"\x00" * 1; m2 = b"\x00" * 4294967295; h.update(m1) h.update(m2) print(h.hexdigest())

出所: オープンネット.ru

コメントを追加します