
このツールは、CVE-2023-4863用の巧妙な正準ハフマンヒストグラムを計算します。
このツールは、脆弱性のあるlibwebpライブラリ(すなわちlibwebp <= 1.3.1)に対してOOB(Out Of Band)書き込みを引き起こすことができる巧妙な正準ハフマンヒストグラムを計算します。この脆弱性はCVE-2023-4863またはCVE-2023-41064として知られています。事前に割り当てられたハフマンテーブルを最大132エントリ分オーバーフローさせることができます。
その根拠は、libwebpが各webp画像に含まれるハフマンヒストグラムが適切にフォーマットされていると仮定していることです。すなわち、復号ツリーは完全なツリーでなければなりません。この仮定に基づき、libwebpグループはenoughツールを利用して、復号ハフマンテーブル(正準ハフマンコードを高速に復号するための強力な構造)を構築するための最大メモリサイズを見積もりました。しかし、ハッカーは不完全なツリーを構築してこのメモリ制限を超え、事前に割り当てられたメモリをオーバーフローさせることができます。
このハッキングツールは、enoughを不完全なツリーに対応するよう調整して作成されました。
以下のコマンドでコードをコンパイルします:
gcc -o NotEnough ./main.c
40シンボル、8ビットのルートテーブル、最大深さ15のハフマンテーブルの場合、テーブルエントリの最大数は410です。しかし、不完全なツリーを構築することで、テーブルエントリの数は542になり得ます。以下のコマンドを試してください:
./NotEnough 40 8 15
そのようなツリーの例を以下に示します:
簡潔にするため、葉のない枝は剪定していることに注意してください。
その後、craftツールを使用して、dwebpツール(バージョン <= 1.3.1)をオーバーフローさせる効果的なwebp画像を構築できます。ハフマンコードヒストグラム**code_lengths_counts[4]**を {0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 5, 9, 17, 1, 1, 3} に変更し、ツールを再ビルドしてください:
vim craft.c # Change huffman code histogram accordingly, i.e. about line 495.
gcc -o craft craft.c
./craft -o bad_542.webp
CVE-2023-4863についてより詳しく知るには、@benhawkes's blogを確認してください。