Linux カーネル レベルでのコード実行を可能にする eBPF サブシステムの脆弱性

eBPF サブシステムで脆弱性 (CVE-2021-4204) が確認されました。この脆弱性により、JIT を使用した特殊な仮想マシンの Linux カーネル内でハンドラーを実行できるようになり、ローカルの特権のないユーザーが特権昇格を達成し、そのコードを実行できるようになります。 Linux カーネル レベル。 この問題は Linux カーネル 5.8 以降に発生しており、未修正のままです (リリース 5.16 を含む)。 ディストリビューションの問題を修正するために生成されているアップデートのステータスは、Debian、RHEL、SUSE、Fedora、Ubuntu、Arch のページで追跡できます。 実用的なエクスプロイトが作成されたことが発表され、18 月 XNUMX 日に公開される予定です (ユーザーと開発者には脆弱性を修正するための XNUMX 週間の時間が与えられています)。

この脆弱性は、実行のために送信された eBPF プログラムの誤った検証が原因で発生します。 eBPF サブシステムは補助機能を提供し、その正しい使用法は特別な検証ツールによって検証されます。 一部の関数では、引数として PTR_TO_MEM 値を渡す必要があり、バッファ オーバーフローの可能性を防ぐために、検証者は引数に関連付けられたメモリのサイズを知っている必要があります。 bpf_ringbuf_submit および bpf_ringbuf_discard 関数では、転送されたメモリのサイズに関するデータが検証者に報告されず、特別に設計された eBPF コードの実行時にバッファ境界を越えてメモリ領域を上書きするために使用される可能性がありました。

攻撃を実行するには、ユーザーが独自の BPF プログラムをロードできる必要がありますが、最近の Linux ディストリビューションの多くはデフォルトでこの機能をブロックしています (リリース 5.16 以降、カーネル自体で eBPF への非特権アクセスがデフォルトで禁止されています)。 たとえば、この脆弱性は Ubuntu 20.04 LTS のデフォルト構成で悪用される可能性がありますが、Ubuntu 22.04-dev、Debian 11、openSUSE 15.3、RHEL 8.5、SUSE 15-SP4、および Fedora 33 の環境では、管理者が設定した場合にのみ脆弱性が表示されます。 kernel.unprivileged_bpf_disabled パラメータを 0 に設定します。脆弱性をブロックする回避策として、コマンド「sysctl -w kernel.unprivileged_bpf_disabled=1」を使用して、権限のないユーザーによる BPF プログラムの実行を防ぐことができます。

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

コメントを追加します