最近のニュースはそれを壊しました 脆弱性が特定されました (CVE-2021-29154)eBPFサブシステムで、pトレース、サブシステム分析、およびトラフィック制御コントローラーの実行を許可します 特別なJIT仮想マシンのLinuxカーネル内で実行されている ローカルユーザーがカーネルレベルでコードを実行できるようにします。
脆弱性を特定した研究者によると、彼らは、特権のないユーザーが使用できる86ビットおよび32ビットのx64システムのエクスプロイトの実用的なプロトタイプを開発することができました。
同時に、 Red Hatは、問題の重大度はeBPFシステムコールの可用性に依存すると述べています。 ユーザーのために。 たとえば、RHELおよびその他のほとんどのLinuxディストリビューションでは、デフォルトで、BPF JITが有効になっていて、ユーザーがCAP_SYS_ADMIN権限を持っている場合に、この脆弱性が悪用される可能性があります。
Linuxカーネルで悪用できる問題が発見されました
特権を昇格させる非特権ローカルユーザー。問題は、BPFJITコンパイラが一部のアーキテクチャでどのように計算するかです。
マシンコードを生成するときの分岐オフセット。 これは悪用される可能性があります
異常なマシンコードを作成してカーネルモードで実行するには、
安全でないコードを実行するために制御フローが乗っ取られる場所。
そしてそれは彼らがそれを詳述しているということです この問題は、分岐命令のオフセットを計算するときに生成されるエラーが原因で発生します マシンコードを生成するJITコンパイラー中。
特に、分岐命令を生成する際に、最適化段階を経た後に変位が変化する可能性があることは考慮されておらず、この失敗を使用して異常なマシンコードを生成し、レベルカーネルで実行することができます。 。
それは注意する必要があります 近年知られるようになったeBPFサブシステムの脆弱性はこれだけではありません。 XNUMX月末以降、カーネルにさらにXNUMXつの脆弱性が特定されました。 (CVE-2020-27170、CVE-2020-27171)、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ディストリビューションのカーネルアップデートに含まれています。 研究者は、特権のないユーザーがカーネルメモリからデータを取得できるようにするエクスプロイトプロトタイプを用意しました。
その解決策のXNUMXつについて RedHat内で提案されているものは次のとおりです。
緩和:
この問題は、デフォルトではほとんどのシステムに影響しません。 管理者は、BPFJITが影響を受けるようにする必要があります。
次のコマンドですぐに無効にできます。
# echo 0 > /proc/sys/net/core/bpf_jit_enableまたは、/ etc / sysctl.d / 44-bpf -jit-disableに値を設定することにより、以降のすべてのシステム起動で無効にすることができます。
## start file ## net.core.bpf_jit_enable=0</em> end file ##
最後に あなたがそれについてもっと知りたいのなら この脆弱性については、で詳細を確認できます 次のリンク。
この問題はバージョン5.11.12(包括的)まで存続し、修正がすでに行われているにもかかわらず、ほとんどのディストリビューションでまだ解決されていないことに言及する価値があります。 パッチとして入手可能。