
Sherlock Fang, Vlad Tronciu, Ayam Babu
radareorg radare2 の v.0.9.7 から v.5.8.6 までの問題は v.5.8.8 で修正されており、ローカルの攻撃者が grub_sfs_read_extent 関数を介してサービス拒否を引き起こす可能性があります。
“treeblock = grub_malloc(data->blocksize);” がメモリ上の NULL を指すようにペイロードを作成し、“treeblock” の値が “tree = (struct grub_sfs_btree *) treeblock;” に代入されるとき、“treeblock” も NULL を指すようにします。悪用可能性の程度は特定のコンテキストに依存しますが、このような NULL ポインタ逆参照の脆弱性はプログラムにサービス拒否を引き起こし、プログラム全体のパフォーマンスに影響を与えます。
grub_sfs_read_extent 関数内には、tree_block の状態に対するチェックが欠如しているため、セキュリティ上の脆弱性が存在します。後続のコードは、tree_block が有効なメモリ割り当てを指していることを確認せずに使用を続けます。これにより、treeblock を struct grub_sfs_btree* にキャストした値が tree に代入され、その後 grub_disk_read の呼び出しで使用されるときに、NULL ポインタの逆参照が発生します。NULL ポインタの逆参照は C 言語では未定義動作であり、通常はセグメンテーション違反またはアクセス違反を引き起こし、プログラムをクラッシュさせます。
以下のように、grub_malloc の割り当て状態をチェックする処理を追加することで、この脆弱性を修正しました。