彼らは最近、 脆弱性が特定されました (すでにCVE-2022-31214にリストされています) Firejailアプリのサンドボックスツールで、検出された欠陥により、ローカルユーザーがホストシステムのrootになる可能性があることが詳細に説明されています。
Firejailは、Linuxで名前空間メカニズム、AppArmor、およびシステムコールフィルタリング(seccomp-bpf)を使用して分離しますが、分離リリースを構成するには昇格された特権が必要です。分離リリースは、suidルートフラグユーティリティにバインドするか、sudoで実行して取得します。
この脆弱性は、「–join=」オプションのロジックのエラーが原因です。 »、 すでに実行されている分離環境(サンドボックス環境のloginコマンドと同様)に、実行中のプロセスのIDで定義された環境に接続するように設計されています。 起動前フェーズでは、firejailは指定されたプロセスの特権を検出し、「-join」オプションを使用して環境に参加する新しいプロセスにそれらを適用します。
接続する前に、 指定されたプロセスがfirejail環境で実行されているかどうかを確認します。 このチェックは、/ run / firejail / mnt/joinファイルの存在を評価します。 脆弱性を悪用するには、 攻撃者は架空の非隔離のファイアジェイル環境をシミュレートできます マウント名前空間を使用してから、「–join」オプションを使用してそれに接続します。
構成で新しいプロセスでの追加特権の取得を禁止するモード(prctl NO_NEW_PRIVS)が有効になっていない場合、firejailはユーザーを架空の環境に接続し、initプロセスのユーザー識別子(名前空間ユーザー)のユーザー名前空間構成を適用しようとします( PID 1)。
結合関数の背後にあるロジックのほとんどはソースコードにあります `src / firejail/join.c`ファイルから。 コードのクリティカルセクションは、 昇格された特権(有効なUID 0)。 コマンドとして渡されたプロセスのID 行引数は、それがrであるかどうかを判断するために検査されますコンテナとそのプロパティのいくつかを決定します これは、新しいエントリプロセスにも適用されます。
ターゲットプロセスに参加するかどうかを決定するための主な基準 成功するのは、ターゲットのマウント名前空間にファイルが存在することです。 / run / firejail / mnt/joinにあるプロセス。 この検証はfで行われます`is_ready_for_join()`関数。 ファイルはlを使用して開かれます`O_RDONLY |O_CLOEXEC`フラグとトレース`fstat()`の結果は 次の要件を満たします。
–ファイルは通常のファイルである必要があります。
–ファイルはユーザーID 0が所有している必要があります(最初のユーザーから見て)
名前空間)。
–ファイルのサイズは1バイトである必要があります。
その結果、 「firejail--join」を介して接続されたプロセスは、名前空間になります ユーザーの元のユーザーID 変更されていない特権で、 しかし、攻撃者によって完全に制御された、別のマウントポイントスペースにあります。
結果として得られる「結合された」シェルは、最初のユーザーに存在します。
ただし、名前空間は元の通常のユーザー権限を保持します マウント名前空間は、攻撃者によって制御される名前空間になります。 として
nonewprivs構成が適用されていない場合、攻撃者はこれで
このマウント名前空間内でsetuid-rootプログラムを実行します
特に、攻撃者は作成したマウントポイントのスペースでsetuid-rootプログラムを実行できます。これにより、たとえば、ファイル階層の/ etc / sudoers構成またはPAMパラメータを変更し、rootとしてコマンドを実行できるようになります。 sudoまたはそのユーティリティを使用します。
最後に、firejailユーティリティがインストールされたopenSUSE、Debian、Arch、Gentoo、Fedoraの現在のバージョンで機能エクスプロイトが開発され、テストされたことは言及する価値があります。
この問題は、firejailバージョン0.9.70で修正されました。 セキュリティ修正として、構成(/etc/firejail/firejail.config)を「nojoin」および「force-nonewprivsyes」に設定できます。
最後に あなたがそれについてもっと知りたいなら、詳細はで確認できます 次のリンク。