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

脆弱性 (CVE-2021-22555) が、ネットワーク パケットのフィルタリングと変更に使用される Linux カーネルのサブシステムである Netfilter で確認されました。これにより、ローカル ユーザーが、分離されたコンテナ内にいるときも含めて、システム上で root 権限を取得できるようになります。 KASLR、SMAP、SMEP 保護メカニズムをバイパスするエクスプロイトの実用的なプロトタイプがテスト用に準備されました。 この脆弱性を発見した研究者は、kCTF クラスター内の Kubernetes コンテナーの分離をバイパスする方法を特定したことに対して Google から 20 ドルの報奨金を受け取りました。

この問題は 2.6.19 年前にリリースされたカーネル 15 から存在しており、互換モードでの setsockopt 呼び出しを介して特別にフォーマットされたパラメータを送信するときにバッファ オーバーフローを引き起こす IPT_SO_SET_REPLACE および IP6T_SO_SET_REPLACE ハンドラのバグが原因で発生します。 通常の状況では、compat_setsockopt() の呼び出しは root ユーザーのみが行うことができますが、ユーザー名前空間のサポートが有効になっているシステムでは、攻撃の実行に必要な特権を非特権ユーザーが取得することもできます。

ユーザーは別の root ユーザーでコンテナを作成し、そこから脆弱性を悪用することができます。 たとえば、「ユーザー名前空間」は、Ubuntu と Fedora ではデフォルトで有効になりますが、Debian と RHEL では有効になりません。 脆弱性を修正するパッチは13月XNUMX日にLinuxカーネルに採用された。 パッケージの更新は、Debian、Arch Linux、および Fedora プロジェクトによってすでに生成されています。 Ubuntu、RHEL、SUSE ではアップデートを準備中です。

この問題は、32 ビット表現から 64 ビット表現への変換後にカーネル構造を保存する際のメモリ サイズの誤った計算により、xt_compat_target_from_user() 関数で発生します。 このバグにより、オフセット 0x4C で区切られた割り当てられたバッファを超えた任意の位置に XNUMX つのヌル バイトを書き込むことができます。 この機能は、root 権限を取得できるエクスプロイトを作成するには十分であることが判明しました。msg_msg 構造体の m_list->next ポインタをクリアすることで、メモリを解放した後にデータにアクセスするための条件 (use-after-free) が作成されました。次に、msgsnd() システム コールの操作を通じて、アドレスに関する情報と他の構造への変更を取得するために使用されました。

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

コメントを追加します