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

eBPF サブシステムで 2 つの新しい脆弱性が確認されました。これにより、JIT を使用した特別な仮想マシンの Linux カーネル内でハンドラーを実行できるようになります。 どちらの脆弱性も、分離された eBPF 仮想マシンの外部でカーネル権限を使用してコードを実行することを可能にします。 問題に関する情報は、PwnXNUMXOwn コンテストを運営する Zero Day Initiative チームによって公開されました。このチームでは、今年、これまで知られていなかった脆弱性を利用した Ubuntu Linux に対する XNUMX 件の攻撃が実証されました (eBPF の脆弱性がこれらの攻撃に関連しているかどうかは報告されていません)。 。

  • CVE-2021-3490 - この脆弱性は、eBPF ALU32 でビット単位の AND、OR、および XOR 演算を実行する際の 32 ビット範囲外チェックが欠如していることが原因で発生します。 攻撃者はこのエラーを利用して、割り当てられたバッファの境界外でデータを読み書きする可能性があります。 XOR 演算に関する問題はカーネル バージョン 5.7-rc1 から発生し、AND および OR (AND および OR) は 5.10-rc1 から発生します。
  • CVE-2021-3489 - この脆弱性はリング バッファの実装のエラーによって引き起こされ、割り当てられたメモリ領域のサイズが実際のサイズよりも小さくなる可能性を bpf_ringbuf_reserve 関数がチェックしなかったことに起因します。リングバフの。 この問題はリリース 5.8-rc1 以降に発生しています。

ディストリビューションの脆弱性パッチのステータスは、Ubuntu、Debian、RHEL、Fedora、SUSE、Arch のページで追跡できます。 修正はパッチとしても利用できます (CVE-2021-3489、CVE-2021-3490)。 この問題が悪用されるかどうかは、ユーザーが eBPF システム コールにアクセスできるかどうかによって決まります。 たとえば、RHEL のデフォルト構成では、脆弱性を悪用するにはユーザーが CAP_SYS_ADMIN 権限を持っている必要があります。

これとは別に、Linux カーネルの別の脆弱性 CVE-2021-32606 にも注目できます。これにより、ローカル ユーザーが権限を root レベルに引き上げることができます。 この問題は Linux カーネル 5.11 以降で明らかになり、CAN ISOTP プロトコルの実装における競合状態によって引き起こされます。この競合状態により、 isotp_setsockopt() 関数で適切なロックが設定されていないためにソケット バインディング パラメータが変更される可能性があります。 CAN_ISOTP_SF_BROADCAST フラグを処理するとき。

ISOTP ソケットが閉じられた後も、受信側ソケットへのバインドは有効なままであり、ソケットに関連付けられたメモリが解放された後も、ソケットに関連付けられた構造体を引き続き使用できます (isotp_sock 構造体の呼び出しによる解放後の使用)これは isotp_rcv() が呼び出されたときにすでに解放されています)。 データ操作を通じて、sk_error_report() 関数へのポインターをオーバーライドし、カーネル レベルでコードを実行できます。

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

コメントを追加します