SnapdとRust Coreutilsの脆弱性によりUbuntuでrootアクセスが可能になる

Qualysは、Ubuntuのsnap-confineおよびsystemd-tmpfilesバンドルに脆弱性(CVE-2026-3888)を発見しました。この脆弱性により、権限のないユーザーがシステムへのrootアクセス権を取得できてしまいます。この問題は、Ubuntu 24.04以降のデフォルト設定で発生します。Ubuntu 16.04~22.04では、ディストリビューションの新しいバージョンの動作を模倣した非デフォルト設定でこの脆弱性を悪用できます。Ubuntu向けの修正プログラムは、昨日のsnapdパッケージアップデートで提供されています。この問題はsnapdアップデート2.75で修正されました。

この脆弱性は、管理者権限で実行される snap-confine と systemd-tmpfiles ユーティリティ間の不適切な相互作用によって発生します。Snap-confine は snap アプリケーションを実行するためのサンドボックス環境を作成し、systemd-tmpfiles は一時ファイルとディレクトリを自動的にクリーンアップします。デフォルトでは、systemd-tmpfiles は /tmp ディレクトリ内のすべての古いファイルとディレクトリを削除するように設定されています。攻撃者は、systemd-tmpfiles によって削除された /tmp/.snap ディレクトリを snap-confine によって再作成される前に置き換えるために、この設定を利用する可能性があります。

この攻撃は、一時ファイルのクリーンアップ処理が開始されるのを待ち、削除された /tmp/.snap ディレクトリを置き換え、変更されたライブラリのコピーを /tmp/.snap/usr/lib/x86_64-linux-gnu.exchange に配置するという手順で行われます。クリーンアップ処理は Ubuntu 24.04 では 10 日ごと、それ以降のバージョンでは 30 日ごとに実行されるため、攻撃者は systemd-tmpfiles が起動するまで数日間待つ必要があるかもしれません。ディレクトリを置き換えた後、攻撃者は snap-confine を使用して新しいサンドボックス環境を初期化します。

攻撃者は、一時ディレクトリ /tmp/.snap にサンドボックス環境のペイロードを構築する際に、適切なタイミングを見計らって /tmp/.snap/usr/lib/x86_64-linux-gnu.exchange を /tmp/.snap/usr/lib/x86_64-linux-gnu に名前変更します。これによりライブラリが置き換えられ、root 権限でバインド マウントされます。この操作によって、攻撃者は snap サンドボックス環境で実行されている共有ライブラリと ld.so ローダーを制御できるようになり、動的リンクを使用する任意の suid プログラムを実行することで、root 権限で任意のコードを実行できるようになります。

AppArmorとseccompベースのシステムコールフィルタによって隔離されたサンドボックス環境でrootアクセス権限を持つ攻撃者は、/bin/bashを/var/snap/$SNAP/common/ディレクトリにコピーし、そのパーミッションを「04755」(suid root)に設定できます。パーミッションはサンドボックス環境内で変更されますが、変更後のパーミッションを持つファイルはホストシステムからもアクセス可能です。そのため、完全なrootアクセス権限を取得するには、デフォルトのシステム環境から通常の非特権ユーザーとして/var/snap/<snap_package_name>/common/bashを実行するだけで済みます。

GNU Coreutils パッケージの Rust 版である uutils coreutils (Rust Coreutils) ツールチェーンにも脆弱性が発見されました。この脆弱性により、権限のないユーザーが root 権限を取得できてしまいます。この問題は Ubuntu 25.10 の変更履歴で発見され、Ubuntu 25.10 リリース前に uutils rm の代わりに /usr/bin/gnurm を配布することで回避策が講じられました。この問題は uutils coreutils 0.3.0 パッケージのリリースで修正されましたが、変更履歴には脆弱性の軽減策は記載されていませんでした (rm、du、chmod、chgrp が安全なパス トラバーサル方式を実装していることが指摘されていました)。

この問題は、「rm」ユーティリティの競合状態によって引き起こされます。この競合状態により、ローカルユーザーがroot権限で「rm」プロセスを使用してユーザー制御ファイルを削除する際に、ディレクトリの内容をシンボリックリンクに置き換えることが可能になります。この脆弱性は、cronから/etc/cron.daily/apportスクリプトを毎日実行することで悪用される可能性があります。root権限で実行されるこのスクリプトは、システム上のすべてのユーザーが書き込み可能な/var/crashディレクトリの内容を再帰的に削除します。

rmユーティリティは、ディレクトリを再帰的に削除する場合、まずすべてのディレクトリをスキャンし、次にrmdir()関数を呼び出して逆順に削除します。親ディレクトリをスキャンした直後、かつ子ディレクトリをスキャンする前に、その親ディレクトリをシンボリックリンクに置き換えると、操作の結果、シンボリックリンクが指すディレクトリが削除されます。これにより、システム上の任意のファイルを削除できるだけでなく、/tmp/snap-private-tmp/$SNAP/tmp/.snapディレクトリを削除してsnapパッケージのサンドボックス環境の内容を置き換えることで、権限昇格も可能になります(root権限を取得する方法は、最初の脆弱性と同様です)。

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

コメントを追加します