web-dev-qa-db-ja.com

今日のNULLポインター逆参照の脆弱性はどのくらい有害ですか?

最近、カーネルコード(多くの場合、LKM /モジュール)でのNULLポインター逆参照の影響について読んでいます。特に、NULLページをmmap() ingしてから、いくつかのシェルコードをmemcpy() ingしてrootに特権をエスカレートします。ユーザーランドからcommit_creds(prepare_kernels_cred(0));(またはその他)を呼び出して、後続のコードをルートユーザーのコンテキストで実行させます(通常はルートシェルを起動します)。これは、10年以上前に非常に人気のある悪用方法でした。

低ページのmmap() ingを防ぐ緩和策mmap_min_addrが導入され、人々は(もちろん)それを回避する方法を見つけました(私が読んだ記事はすべて2009年にありました)。ただし、この軽減策を回避する(見かけ上は)(既知の、または公開された)メソッドはありません(もちろん、他のカーネル強化が原因で、このようなメモリ破損のバグがさらに困難になるか、完全に実行不可能になります)。

これを踏まえると、今日のNULLポインター逆参照はどれほど有害ですか?利用できる最善の方法はサービス拒否(mmap_min_addrが有効になっている最新のカーネルでは[ASLR、DEP/NX、SELinux/AppArmor/PaX/grsecなどを無視している可能性がある]など)のようです。特定の環境で特権昇格を利用することは可能ですか? (もちろんmmap_min_addrの無効化を除く)。もしそうなら、いくつかの例は何ですか?

2
Phizo

ゼロページは常に割り当てられないように保護されているため、最近のnullポインターの逆参照は直接をサービス拒否の条件としてのみ利用できます。逆参照されたポインターがnullではないが、割り当て解除されたメモリ(JITのUAFなど)を指す場合があり、これらは通常、特定の場合にLPEまたはRCEを取得するために利用できます。後者は、主にJavaScriptエンジンの脆弱性に適用されます。

とはいえ、null derefをトリガーすると、多くの場合、DoSの範囲外の副次的な影響が生じる可能性があります。権限のないユーザーがアクセスできるように機密データを漏らすスタックトレースまたはコアダンプを生成する。

3
Polynomial