Linux カーネルの eBPF サブシステムの脆弱性

eBPF サブシステムで脆弱性 (CVE-2021-29154) が確認されました。これにより、トレース、サブシステムの動作分析、およびトラフィック管理のためのハンドラーを実行できます。これらのハンドラーは、JIT を使用した特別な仮想マシンの Linux カーネル内で実行され、ローカル ユーザーがカーネル レベルでコードを実行できるようにします。 この問題は 5.11.12 のリリースまでに発生しており、ディストリビューション (Debian、Ubuntu、RHEL、Fedora、SUSE、Arch) ではまだ修正されていません。 修正はパッチとして入手できます。

この脆弱性を特定した研究者によると、32 ビットおよび 64 ビットの x86 システム向けに、特権のないユーザーが使用できるエクスプロイトの実用的なプロトタイプを開発することができました。 ただし、Red Hat は、問題の重大度はユーザーが eBPF システム コールにアクセスできるかどうかによって異なると述べています。 たとえば、デフォルト構成の RHEL およびその他のほとんどの Linux ディストリビューションでは、BPF JIT が有効であり、ユーザーが CAP_SYS_ADMIN 権限を持っている場合、この脆弱性が悪用される可能性があります。 回避策として、コマンド echo 0 > /proc/sys/net/core/bpf_jit_enable を使用して BPF JIT を無効にすることをお勧めします。

この問題は、JIT コンパイラのマシン コード生成プロセス中に分岐命令のオフセットを計算する際のエラーが原因で発生します。 特に、分岐命令を生成する場合、最適化ステージを通過した後にオフセットが変更される可能性は考慮されていません。 この欠陥を利用すると、異常なマシン コードが生成され、カーネル レベルで実行される可能性があります。

最近の eBPF サブシステムの脆弱性はこれだけではないことに注目してください。 2020 月末には、カーネルでさらに 27170 つの脆弱性 (CVE-2020-27171、CVE-XNUMX-XNUMX) が特定され、eBPF を使用して Spectre クラスの脆弱性に対する保護をバイパスできるようになり、カーネル メモリの内容を特定できるようになりました。特定の操作の投機的実行のための条件を作成した結果として。 Spectre 攻撃では、命令の投機的実行につながる特定のコマンド シーケンスが特権コード内に存在する必要があります。 eBPF では、実行のために送信される BPF プログラムの操作を通じてそのような命令を生成するいくつかの方法が発見されています。

CVE-2020-27170 脆弱性は、BPF ベリファイアーでのポインター操作によって引き起こされ、投機的な操作でバッファー境界の外側の領域にアクセスします。 脆弱性 CVE-2020-27171 は、ポインターを操作する際の整数アンダーフロー エラーが原因で、バッファー外のデータへの投機的アクセスにつながります。 これらの問題はカーネル リリース 5.11.8、5.10.25、5.4.107、4.19.182、および 4.14.227 ですでに修正されており、ほとんどの Linux ディストリビューションのカーネル アップデートにも含まれています。 研究者らは、特権のないユーザーがカーネル メモリからデータを抽出できるようにするプロトタイプのエクスプロイトを準備しました。

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

コメントを追加します