openSUSE 15 のセキュリティ更新 : apptainer (openSUSE-SU-2024:0244-1)

high Nessus プラグイン ID 205746

Language:

概要

リモートの openSUSE ホストに 1 つ以上のセキュリティ アップデートがありません。

説明

リモートの openSUSE 15 ホストには、openSUSE-SU-2024:0244-1 のアドバイザリに記載されている複数の脆弱性の影響を受けるパッケージがインストールされています。

- Go ライブラリ github.com/opencontainers/go-digest によって処理され、Go が実装したコンテナエコシステム全体で使用されるダイジェスト値が常に検証されるようにします。これにより、攻撃者が予期しない認証されたレジストリアクセスをトリガーするのを防ぎます。(CVE-2024-3727、boo#1224114)。


- apptainer をバージョン 1.3.0 に更新しました
* FUSE マウントが setuid モードでサポートされるようになり、権限のないユーザーがコンテナ内の raw ファイルシステムに書き込みアクセス権を持っているためにカーネルファイルシステムのマウントが安全でない場合でも、全機能が有効になります。apptainer.conf で「setuid-mount extfs = no」(デフォルト) を許可する場合、setuid モードでの ext3 イメージのマウントには、カーネルドライバーの代わりに fuse2fs イメージドライバーが使用されます (ext3 イメージは主に「--overlay」機能のために使用)。これにより、セキュリティリスクのために Apptainer 1.1.8 でデフォルトで削除された機能が復元されます。
「apptainer.conf」の「setuid-mount squashfs」許可構成オプションに、「iflimited」という新しいデフォルトが追加されました。これにより、少なくとも 1 つの「limit container」オプションが設定されている場合、または実行制御リストが ecl.toml 内でアクティブ化されている場合にのみ、カーネル squashfs マウントが許可されます。
カーネル squashfs マウントが許可されていない場合、squashfuse イメージドライバーが代わりに使用されます。
「iflimited」がデフォルトです。これらの制限の 1 つが使用された場合、システム管理者が、権限のないユーザーがコンテナへの書き込みアクセス権を持たないようにするためです。逆に、FUSE を使用すると、ユーザーは理論上、「ptrace()」を介して制限をバイパスできます。これは、FUSE プロセスがそのユーザーとして実行されるためです。
カーネルの overlayfs ドライバーが機能しない場合 (たとえば、レイヤーの 1 つが FUSE ファイルシステムである場合)、「fuse-overlayfs」イメージドライバーも setuid モードで試行されるようになりました。さらに、「allow setuid-mount encrypted = no」の場合、権限のない gocryptfs フォーマットが SIF ファイルの暗号化にカーネル device-mapper の代わりに使用されます。SIF ファイルが gocryptfs 形式を使用して暗号化された場合、非 setuid モードに加えて setuid モードでマウントできるようになりました。
* ユーザー名前空間モードのデフォルトを変更し、バインドマウントポイントを追加する目的で、アンダーレイ機能の代わりにカーネル overlayfs または fuse-overlayfs を使用するようにします。これはすでに setuid モードのデフォルトになっていました。この変更により一貫性が保たれます。アンダーレイ機能は、「--underlay」オプションで引き続き使用できますが、実装が複雑で、測定結果によると、アンダーレイのパフォーマンスは overlayfs や fuse-overlayfs と類似しているため、廃止予定です。
現時点では、「enable underlay」構成オプションの新しい「preferred」値を使用して、アンダーレイ機能をデフォルトに戻すことができます。
また、以前は無視されていましたが、「--underlay」オプションは、setuid モードで、または root ユーザーとして使用できます。
* 下部レイヤーが FUSE で、書き込み可能な上部レイヤーがない場合、fuse-overlayfs ではなく、カーネル overlayfs を再び優先して使用し、1.2.0 からの変更を取り消します。別の回避策が、その変更で対処された問題で見つかりました。これは、setuid モードとユーザー名前空間モードの両方に適用されます。
* 現在は、コンテナの作業ディレクトリを設定するためのフラグの形式として、`--cwd` が推奨されています。ただし、互換性のために `--pwd` も引き続きサポートされています。
* ルート (例: sudo apptainer) として、または「--fakeroot」で実行する際の、「--home」の処理方法が変更されました。以前は、このような場合に「HOME」環境変数のみを変更し、コンテナの「/etc/passwd」ファイルは変更しないままにしていました (「--home」に渡される値にかかわらず、その homedir フィールドは「/root」を指しています)。この変更により、コンテナが読み取り専用の場合、HOME の値とコンテナの「/etc/passwd」のコンテンツの両方が、「--home」に渡される値を反映します。コンテナが書き込み可能な場合、「/etc/passwd」ファイルは変更しようとするコマンドと干渉する可能性があるため、そのまま残されます。
* VM 内で apptainer を起動するための「--vm」および関連するフラグが削除されました。この機能は、廃止された Singularity Desktop / SyOS プロジェクトに関連していました。
* 「remote」にあったキーサーバー関連のコマンドは、独自の専用の「keyserver」コマンドに移動されました。詳細については、「apptainer help keyserver」を実行してください。
* 「remote」にあった OCI/Docker 関連のコマンドは、独自の専用の「registry」コマンドに移動されました。詳細については、「apptainer help registry」を実行してください。
* 「remote list」サブコマンドは、リモートエンドポイントのみを出力するようになり (キーサーバーと OCI/Docker レジストリは別のコマンドに移動されました)、出力が合理化されています。
* 「apptainer remote add」コマンドを使用して新しいリモートエンドポイントを追加すると、新しいエンドポイントがデフォルトとして設定されるようになりました。この動作は、「--no-default」(または「-n」) フラグを「remote add」に指定することで抑制できます。
* ハッシュ記号で始まるコメントの後のビルド定義ファイルテンプレート変数の解析をスキップします。
* グローバル「/tmp」ディレクトリは、gocryptfs マウントポイントに使用されなくなりました。
- 新機能
* 「remote status」コマンドは、ログインユーザーのユーザー名、本名、メールアドレスを印刷するようになりました (該当の場合)。
* 監視機能サポートを追加します。これには、「apptheus」という名前の追加ツールを使用する必要があります。このツールは、apptainer Starter を新しく作成された cgroup に配置し、システムメトリクスを収集します。
* 「apptainer run/shell/exec」用の新しい「--no-pid」フラグは、「--containall」および「--compat」によって推測される PID 名前空間を無効にします。
* 「keyserver」コマンドに「--config」オプションを追加しました。
* 「keyserver list」コマンドに対するオプションの remoteName 引数を遵守します。
* PEM ファイルなしで暗号化されたコンテナを暗号化して実行できるように、「APPTAINER_ENCRYPTION_PEM_DATA」環境変数が追加されました。
* 「apptainer exec/run/shell」に「--sharens」モードを追加します。これにより、同じユーザー名前空間の同じイメージを使用して、同じ親によって作成された複数の apptainer インスタンスを実行できます。
- 「gocryptfs」をオプションの依存関係にします。
- apptainer 定義テンプレートをバージョン依存にします。

- SUSE Registry からの署名済みパッケージを使用する「apptainer build」を修正します (boo#1221364)。

- apptainer をバージョン 1.2.5 に更新しました
* 「libnvidia-nvvm」を「nvliblist.conf」に追加しました。新しい NVIDIA ドライバー ( >= 525.85.05 で知られています) では、NVIDIA GPU に対して OpenCL プログラムをコンパイルするためにこの lib が必要です。つまり、「libnvidia-opencl」は「libnvidia-nvvm」に依存します。
* 「--fakeroot」が渡される場合は、インスタンス作成で cgroup の使用を無効にします。
* 「/proc」の「hidepid」マウントオプションが設定されている場合は、インスタンス作成で cgroup の使用を無効にします。
* 1.2.0 で導入された回帰を修正しました。ここでは、親の root マッピングされたユーザー名前空間が存在する場合 (たとえば「cvmfsexec」の場合など) に、ユーザーのパスワードファイル情報がコンテナにコピーされませんでした。
* 近日公開予定の NVIDIA ドライバーライブラリ「libnvidia-gpucomp.so」を、NVIDIA GPU 対応コンテナに追加するライブラリのリストに追加しました。暗号化された画像の作成中にエラー処理が行われなかった問題を修正しました。この問題により、破損した画像が生成される可能性がありました。
* 権限付きイメージの暗号化中の一時ファイルに「APPTAINER_TMPDIR」を使用します。
* イメージの開始時に root のない統合 cgroups v2 が利用可能であるが、「XDG_RUNTIME_DIR」または「DBUS_SESSION_BUS_ADDRESS」が設定されていない場合、致命的なエラーで終了する代わりに、統計を利用できないことを通知する情報メッセージを出力します。
* 定義ファイルに対するテンプレート化されたビルド引数が空の値を持つことを許可します。
- 異なる SP に対して、.def テンプレートを個別にパッケージします。

- squashfuse を構築しません。依存関係として必要です。
- 分かりにくい「Obsoletes: singularity-*」および「Provides: Singularity」を「Conflicts:」で置き換え、プロバイダーをドロップします - バージョン管理スキームが一致せず、一方から他方へ自動的に移行しません。
- すべてのビルド依存関係を提供しないプラットフォームを除外します。

- 以下の変更により、1.2.3 に更新しました
* apptainer のプッシュ/プルコマンドは、docker およびライブラリプロトコルの場合と同様に、oras プロトコルのプログレスバーを表示するようになりました。
* --nv および --rocm のフラグを同時に使用できるようになりました。
* apptainer インスタンス開始および instance:// を参照するアクションコマンドでの APPTAINER_CONFIGDIR の使用を修正します。
* apptainer の認証情報にない場合、apptainer が Docker フォールバックパス ~/.docker/config.json から認証情報を読み取らない問題を修正します。

- 以下の変更により、1.2.2 に更新しました
* ログレベルが正しく設定されるように $APPTAINER_MESSAGELEVEL を修正します。
* setuid モードで、権限のないユーザー名前空間が利用できず、--fakeroot オプションが選択されていない場合のビルドの失敗を修正します。

- パッケージが setuid でコンパイルされているため、関連性はありませんが、CVE-2023-38496 を修正するために 1.2.1 を更新しました

- 以下の変更により 1.2.0 へ更新します
* バイナリは再現可能に構築されており、プラグインを無効にします
* コンテナが存在しない場合に、コンテナ内に現在の作業ディレクトリを作成します。
これにより、singularity 3.6.0 が発生する前の動作が復元されます。結果として、--no-mount home を使用しても、apptainer をホームディレクトリから実行するときには効果がなく、そのディレクトリのマウントを回避するために --no-mount home,cwd が必要になります。
* ホストとコンテナの両方にあるシンボリックリンクを含むが、異なる宛先を指している現在の作業ディレクトリパスを処理します。現在の作業ディレクトリが検出された場合、コンテナに宛先ディレクトリが存在しても、マウントされません。
* CLI で任意の順序で設定された場合、ユーザーバインドが以前のバインドパスをオーバーライドしないように、デスティネーションマウントポイントが最短パスで最初にソートされるようになりました。これは画像バインドにも適用されます。
* カーネルがユーザーの名前空間で権限のないオーバーレイマウントをサポートする場合、コンテナはデフォルトで bind マウントに対してアンダーレイレイアウトの代わりにオーバーレイを使用して構築されます。新しい --underlay アクションオプションを使用して、オーバーレイではなくアンダーレイを優先させることができます。
* apptainer.conf の sessiondir maxsize は、新規インストールでデフォルトの 64 MiB になりました。これは、以前のバージョンの 16 MiB から増加しています。
* apptainer キャッシュがアーキテクチャを認識するようになったため、異なるアーキテクチャのマシンで同じホームディレクトリキャッシュを共有できます。
* オーバーレイが panfs ファイルシステムでブロックされ、サンドボックスディレクトリを panfs からエラーなしで実行できます。
* 名前空間を入力する前のステージ 1 でユーザー/グループ情報を検索して保存します。これは、ユーザーの名前空間を使用するときに winbind が正しくユーザー/グループ情報を検索しない問題を修正します。
- 新機能
* gocryptfs を使用した SIF ファイルの権限のない暗号化のサポート。これは権限のある暗号化と互換性がないため、root によって暗号化されたコンテナは、権限のないユーザーが再構築する必要があります。
* 定義ファイルのテンプレートサポート。ユーザーは、対応する二重波括弧のペアを使用して、定義ファイルで変数を定義できるようになりました。{{ variable }} の形式の変数は、定義ファイルの %arguments セクションの variable=value エントリによって、または新しいビルドオプション --build-arg または --build-arg-file を通じて定義された値に置き換えられます。
* インスタンスが開始されたときに startscript ではなく runscript を実行する新しいインスタンス実行コマンドを追加します。
* 署名および検証コマンドが、--key フラグを介して秘密鍵へのパスを指定することにより、非 PGP 鍵素材による署名および検証をサポートするようになりました。
* verify コマンドは、--certificate フラグで証明書へのパスを指定することで、X.509 証明書による検証をサポートするようになりました。デフォルトでは、システムルート証明書プールは --certificate-roots フラグでオーバーライドされない限り、トラストアンカーとして使用されます。トラストアンカーではありませんが、証明書チェーンを形成するために使用できる中間証明書のプールは、
--certificate-intermediates フラグを介しても指定することができます。
* 新しい検証 --ocsp-verify オプションにより、OCSP プロトコルを使用する X.509 証明書のオンライン検証チェックをサポートします。
* instance stats コマンドは、リソース使用率を毎秒表示します。。
--no-stream オプションは、このインタラクティブモードを無効にし、ポイントインタイムの使用率を表示します。
* root として実行する場合、またはマネージャーとして systemd を使用する統合 cgroups v2 が構成されている場合、インスタンスはデフォルトで cgroup 内で起動されるようになりました。これにより、可能な場合は apptainer インスタンス統計をデフォルトでサポートできます。
* インスタンス起動コマンドは、定義ファイルの %appstart <name> セクション内で起動スクリプトを呼び出すオプションの --app <name> 引数を受け入れるようになりました。インスタンス停止コマンドには、引き続きインスタンス名のみが必要です。
* インスタンス名は、新しい APPTAINER_INSTANCE 環境変数を介して、インスタンス内で利用可能になりました。
* --no-mount フラグが bind-paths の値を受け入れるようになり、apptainer.conf のすべてのバインドパスエントリのマウントが無効になりました。
docker-daemon:// DOCKER_USERNAME および DOCKER_PASSWORD を使用する際の DOCKER_HOST 解析のサポートが、APPTAINER_ プレフィックスなしでサポートされます。
新しい Linux 機能の CAP_PERFMON、CAP_BPF、および CAP_CHECKPOINT_RESTORE を追加します。
* リモートの get-login-password コマンドにより、ユーザーはリモートのトークンを取得できます。これにより、シェルの履歴に表示されないようにしながら、秘密を docker ログインに直接パイプすることができます。
* %environment で UID とともに EUID を定義します。
* --rocm モードでは、
--contain の使用中に、/dev/dri 全体がコンテナへバインドされるようになりました。これにより、後の ROCm バージョンに必要な /dev/dri/render デバイスが利用可能になります。

- 以下の変更により 1.1.9 へ更新します
* 1.1.8 で導入された、fuse-overlayfs から不明な xino=on オプションに関する警告を削除します。
* 読み取り専用 /proc に関する fuse-overlayfs からの無関係な警告を無視します。
* SIF メタデータの一部として保存された定義ファイルの一部のプラットフォームでドロップされた「n」文字を修正します。
* 重複するグループ ID を削除します。
* fuseroot コマンドを使用した --fakeroot apptainer の起動中に、fakeroot をコンテナにバインドする際に、LD_PRELOAD の複数のエントリを処理できなかった問題を修正します。

- Apptainer の setuid-root インストールの脆弱性であり、最近の openSUSE パッケージでアクティブではなかった CVE-2023-30549 の修正が含まれています。それでも、これは completenss に含まれています。この修正では、setuid-mount 構成オプションの暗号化、squashfs、extfs を許可するように追加し、extfs のデフォルトを「no」にします。これにより、setuid-root モードではオーバーレイまたはバインドに対して含まれる xtfs マウントの使用が無効になりますが、権限のないユーザー名前空間モードに対しては有効のままです。encrypted および squashfs のデフォルトは「yes」です。
- その他のバグ修正:
* 共有ループデバイスを使用する際のループデバイスの「no such device or address」偽造エラーを修正します。
* 書き込み可能なカーネルオーバーレイマウントポイントに xino=on マウントオプションを追加し、カーネルキャッシュフラッシュ後の inode 番号の一貫性を修正します (fuse-overlayfs には適用されません)。


- 以下の変更により、1.1.7 に更新しました
* 親コンテナの /.singularity.d/libs にバインドされているすべてのライブラリを常に継承することで、--nv などの gpu オプションをネストできるようにします。
* 定義ファイルからのアクションコマンドとコンテナの構築の両方について、subuid fakeroot モードと同様に、非 subuid fakeroot モードでもユーザーのホームディレクトリをデフォルトで root ホームディレクトリにマッピングします。
* リモートにライブラリクライアントがないことが判明した別の場所で、エラーメッセージがより役立つようにします。
* fakeroot ネットワークをリクエストするときの不適切なエラーを回避します。
* 計算された LD_LIBRARY_PATH をラップされた unsquashfs に渡します。ホストの unsquashfs が非デフォルトパスのライブラリを使用する問題を修正します。

Tenable は、前述の記述ブロックを SUSE セキュリティアドバイザリから直接抽出しています。

Nessus はこれらの問題をテストしておらず、代わりにアプリケーションが自己報告するバージョン番号にのみ依存していることに注意してください。

ソリューション

影響を受けるパッケージを更新してください。

参考資料

https://bugzilla.suse.com/1221364

https://bugzilla.suse.com/1224114

http://www.nessus.org/u?61dcc3e1

https://www.suse.com/security/cve/CVE-2023-30549

https://www.suse.com/security/cve/CVE-2023-38496

https://www.suse.com/security/cve/CVE-2024-3727

プラグインの詳細

深刻度: High

ID: 205746

ファイル名: openSUSE-2024-0244-1.nasl

バージョン: 1.1

タイプ: local

エージェント: unix

公開日: 2024/8/17

更新日: 2024/8/17

サポートされているセンサー: Frictionless Assessment AWS, Frictionless Assessment Azure, Frictionless Assessment Agent, Nessus Agent, Nessus

リスク情報

VPR

リスクファクター: High

スコア: 8.1

CVSS v2

リスクファクター: Medium

基本値: 6.8

現状値: 5

ベクトル: CVSS2#AV:L/AC:L/Au:S/C:C/I:C/A:C

CVSS スコアのソース: CVE-2023-30549

CVSS v3

リスクファクター: High

基本値: 7.8

現状値: 6.8

ベクトル: CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

現状ベクトル: CVSS:3.0/E:U/RL:O/RC:C

脆弱性情報

CPE: p-cpe:/a:novell:opensuse:libsquashfuse0, p-cpe:/a:novell:opensuse:apptainer, p-cpe:/a:novell:opensuse:squashfuse-devel, p-cpe:/a:novell:opensuse:squashfuse-tools, p-cpe:/a:novell:opensuse:apptainer-sle15_5, p-cpe:/a:novell:opensuse:apptainer-sle15_6, cpe:/o:novell:opensuse:15.5, p-cpe:/a:novell:opensuse:apptainer-leap, p-cpe:/a:novell:opensuse:squashfuse

必要な KB アイテム: Host/local_checks_enabled, Host/cpu, Host/SuSE/release, Host/SuSE/rpm-list

エクスプロイトの容易さ: No known exploits are available

パッチ公開日: 2024/8/16

脆弱性公開日: 2023/4/25

参照情報

CVE: CVE-2023-30549, CVE-2023-38496, CVE-2024-3727