昨日 Linuxカーネルの脆弱性に関する情報が公開されました これはすでにCVE-2021-3609としてカタログ化されています。 この脆弱性 ローカルユーザーがシステム上の特権を昇格できるようにします CAN BCMプロトコルの実装における競合状態が原因で、Linuxカーネルのバージョン2.6.25から5.13-rc6に現れます。
判決は利用します なぜなら CAN BCMプロトコルを使用すると、独自のメッセージマネージャーを登録できます コントローラのエリアネットワーク(CAN)を接続し、特定のネットワークソケットに接続します。 着信メッセージが到着すると、関数が呼び出されます bcm_rx_handler() 攻撃者は競合状態を利用して、実行中にネットワークソケットを強制的に閉じることができます bcm_rx_handler()。
ソケットが閉じているときに問題が発生します 関数が呼び出されます bcm_release()、 構造に割り当てられたメモリが解放されます bcm_opおよびbcm_sock、 ハンドラーbで引き続き使用されますcm_rx_handler() これはまだ実行されているため、すでに解放されているメモリブロック(解放後使用)へのアクセスにつながる状況が発生します。
これは、バージョン2021からメインライン3609-rc2.6.25までのLinuxカーネルのCAN BCMネットワークプロトコルで最近報告されたバグ(CVE-5.13-6)の発表です。
この脆弱性は、net / can / bcm.cの競合状態であり、rootへの特権昇格を許可します。 この問題は最初にsyzbotによって報告され、NorbertSlusarekが悪用可能であることが証明されました。
攻撃は、XNUMXつのCAN BCMソケットを開き、それらをvcanインターフェイスにバインドすることに要約されます。。 最初のコネクタで、 sendmsg() インジケーター付き RX_SETUP 着信CANメッセージ用にコントローラーを構成するには、XNUMX番目のコネクターで sendmsg() 最初のコネクタにメッセージを送信します。
メッセージが到着した後、 bcm_rx_handler()呼び出しがトリガーされ、攻撃者は適切なタイミングで最初のソケットを閉じます。 の立ち上げにつながる bcm_release() と構造の立ち上げ bcm_opおよびbcm_sock、の仕事が bcm_rx_handler() まだ完成していません。
攻撃者はbcm_sockのコンテンツを操作することで、sk-> sk_data_ready(sk)関数へのポインターをオーバーライドし、実行をリダイレクトし、Return-Oriented Programming(ROP)手法を使用して、modprobe_pathパラメーターをオーバーライドし、コードをrootとして実行させることができます。 。
ROP手法を使用する場合、攻撃者は自分のコードを配置しようとはしません を記念して、 しかし、それは動作します の断片 機械の説明はすでに利用可能です ロードされたライブラリでは、control returnステートメントで終わります(原則として、これらはライブラリ関数の終わりです)。
攻撃を実行するために必要なアクセス許可は、ユーザー名前空間が有効になっているシステムで作成されたコンテナー内の非特権ユーザーが取得できます。 たとえば、ユーザー名前空間はデフォルトでUbuntuとFedoraに含まれていますが、DebianとRHELでは有効になっていません。
私のエクスプロイトの試みは、コミットbf5.4aa1e74からのバージョン> = 86-rc111のカーネルに集中しています。 タスクレットを使用して5.4-rc1より古いカーネルを悪用することは調査しませんでしたが、古いカーネルを悪用することも可能であるようです。
と言われています 脆弱性を特定した研究者は、エクスプロイトを準備することができました Ubuntu 5.4 LTSへの攻撃が成功する可能性を含め、バージョン20.04.02以降のカーネルを備えたシステムでルート権限を取得するため。
エクスプロイトの作業は、必要な機能を取得するために、同様のブロック(「ガジェット」)への一連の呼び出しを構築することになります。 攻撃には、CANソケットと構成済みのvcanネットワークインターフェイスを作成するためのアクセスが必要です。
最後に 問題はまだ続くと言われています ほとんどのディストリビューションで使用されていますが、対応するパッチがリリースされるまでには数日かかります。
あなたがそれについてもっと知りたいなら、あなたは相談することができます 次のリンク。