Ubuntuのsnap-confineにroot権限昇格の脆弱性CVE-2026-8933

この記事は約16分で読めます。

Qualys Threat Research Unit(TRU)は2026年7月21日、Ubuntuのsnap実行環境を構築するsnap-confineに、非特権ユーザーからroot権限へ昇格できるLocal Privilege Escalation(LPE)の脆弱性CVE-2026-8933が存在すると公表しました。同日、CanonicalはUbuntu Security Notice USN-8579-1で修正版snapdを公開し、Ubuntu 22.04 LTS、24.04 LTS、26.04 LTSをCVE-2026-8933の影響対象として案内しました。QualysはUbuntu Desktop 24.04、25.10、26.04で実際にroot権限へ昇格できることを確認しています。なお、Ubuntu 25.10は2026年7月9日にサポートを終了しています。CVSS 3.1の基本値は7.8(High)で、影響は脆弱なset-capabilities版のsnap-confineを利用する構成に限定されます。

この脆弱性の特徴は、Canonicalが最小権限の原則を徹底するために実装した「setuid-rootバイナリからset-capabilitiesバイナリへの移行」自体が、意図せず新しいレースコンディションを生んだ点にあります。攻撃対象領域を減らすはずのハードニングが結果として悪用経路を作ってしまうという構図で、TRUは同じsnap-confineを対象に2026年3月に公開したCVE-2026-3888の再評価過程でこの新しい欠陥を発見したと説明しています。

項目 内容
CVE ID CVE-2026-8933
種別 Local Privilege Escalation(LPE)
CVSS 3.1基本値 7.8(High)
発見者 Qualys Threat Research Unit(TRU)
影響対象 Canonicalの修正対象はUbuntu 22.04 LTS / 24.04 LTS / 26.04 LTS。QualysはUbuntu Desktop 24.04 / 25.10 / 26.04で悪用可能と確認(25.10は2026年7月9日にサポート終了済み)
公開日 2026年7月21日(協調開示、14:00 UTC)
Ubuntuアドバイザリ USN-8579-1
修正版パッケージ snapd 2.76+ubuntu22.04.1 / 2.76+ubuntu24.04.1 / 2.76+ubuntu26.04.3、snapd snap 2.76.1(公開準備中)
同時開示CVE CVE-2026-15226(CVSS 8.4)、CVE-2024-5300(CVSS 5.6)
Debian trixie 脆弱なコードは含むが、snap-confineがset-capabilities版としてインストールされないため悪用不可と評価

snap-confineの権限モデルが変わった経緯

snap-confineは、Snapアプリケーションが実行される直前に、マウント名前空間の分離、cgroupの適用、AppArmorプロファイルのロード、seccompフィルタの装着といった隔離機構をまとめて構築するバイナリです。Snapの閉じ込め(confinement)が実際に機能するかどうかを決める、Snapセキュリティモデルの土台にあたる要素です。カーネルレベルで名前空間や属性を操作する必要があるため、従来はsetuid-rootバイナリとしてroot権限で動作していました。

Canonicalは近年のUbuntuリリースで、snap-confineをsetuid-rootバイナリからfile capabilitiesを利用する権限モデルへ移行しました。QualysはUbuntu Desktop 25.10と26.04の/usr/lib/snapd/snap-confineがset-capabilities版として配布されていることを確認しています。QualysがUbuntu 26.04で確認した構成では、cap_chowncap_dac_overridecap_dac_read_searchcap_fownercap_setgidcap_setuidcap_sys_chrootcap_sys_ptracecap_sys_admincap_sys_resourceの10種類のケーパビリティが、許可されたCapabilityの集合であるPermittedセットとして付与されていました。一方、Ubuntu 24.04のsnapd snap内にある/snap/snapd/current/usr/lib/snapd/snap-confineではcap_setgidcap_setuidcap_sys_resourceを含まない7種類となっており、付与されるケーパビリティはバージョンや配布形態によって異なります。いずれの構成でも、snap-confineはrootに近い強力な権限を保ちながら、実効UID(EUID)は呼び出し元ユーザーのままで実行される点は共通しています。

この変更は、権限を必要最小限に絞り込むという意味では正しい方向の設計です。しかし副作用として、プロセス実行中のEUIDが非特権ユーザーになるため、そのプロセスが作成するファイルとディレクトリの初期所有者もまた呼び出し元ユーザーになります。Ubuntu 24.04の場合、/usr/lib/snapd/snap-confine 本体は従来通りのsetuid-rootですが、snapパッケージとして配布される /snap/snapd/current/usr/lib/snapd/snap-confine はset-capabilities版に置き換わっており、snapdを最新に更新している24.04 LTSも同じ問題の影響を受ける形になっています。

CVE-2026-8933の根本原因

Qualysアドバイザリで示された通り、脆弱性の中核は「サンドボックスを構築する短い時間帯に、非特権ユーザーが作業ディレクトリと配下のファイルを完全に所有している」という一点に集約されます。snap-confineはSnapアプリケーションの実行環境を組み立てるために、まず /tmp/snap.rootfs_XXXXXX という一時ディレクトリを mkdtemp() で作成します。setuid-rootで動作していた頃はこのディレクトリの所有者は最初からrootでした。set-capabilities版ではEUIDが呼び出しユーザーのため、mkdtempが返した瞬間のディレクトリは呼び出しユーザー所有です。

snap-confineはこの直後にサンドボックスのマウント処理を開始し、その後 sc_replicate_base_rootfs() という関数の中で chown(scratch_dir, 0, 0) を呼び出してディレクトリの所有権をrootに切り替えます。Qualysが示したソース参照では、ディレクトリ作成は関数 sc_bootstrap_mount_namespace() の511行目、所有権の変更は sc_replicate_base_rootfs() の362行目にあり、この間には短い時間窓が存在します。同じ構造は個別ファイルにもあり、open(full_path, O_CREAT | O_TRUNC, 0644) でファイルを作成する450行目と、その所有権をrootに付け替える fchown(fd, 0, 0) の454行目の間にも小さな時間窓が生まれます。

この時間窓の中では、非特権ユーザーは自分が所有するディレクトリとファイルを自由に操作できます。ディレクトリを別のマウントポイントで覆い隠したり、ファイルのパーミッションを緩めたり、あるいはシンボリックリンクに差し替えたりする余地があるということです。snap-confineが本来意図していた「サンドボックス初期化中は完全にrootが管理する空間」という前提が崩れており、この競合状態をどのように悪用するかがCVE-2026-8933の攻撃手法の中心となります。

攻撃者が悪用する2つのレースコンディション

CanonicalがUbuntu Discourseで公開した解説では、この脆弱性の悪用は2つの独立した競合状態をそれぞれ悪用することで成立すると整理されています。1つ目は /tmp/snap.rootfs_XXXXXX の作成から所有権変更までの時間差で、この間に攻撃者はディレクトリ内にシンボリックリンクを配置します。2つ目はsnap-confineがそのシンボリックリンクを追跡して開いたファイルの作成から所有権変更までの時間差で、この間に攻撃者はファイルのパーミッションを緩め、全ユーザーが書き込み可能な状態(world-writable)に変更します。

ただしこの単純な流れをそのまま実装しようとすると、snap-confineが途中でサンドボックス用のマウント(bindマウント、unbindableマウント、tmpfsマウント)を積み重ねてしまうため、シンボリックリンクを置いた作業ディレクトリが外部から見えなくなり、そのままでは悪用を成立させられない問題が生じます。Qualysが使用した迂回策は、ディレクトリ作成直後にfusermountでFUSEファイルシステムをそのディレクトリに被せておき、snap-confineが後から重ねるマウントをFUSE側から fusermount -u -z で剥がしていくというものでした。この手順によって、snap-confineが「隔離済みの一時ファイルシステム」だと思い込んで作業しているディレクトリを、攻撃者側からは元の非特権ユーザー所有ディレクトリのまま操作し続けることが可能になります。

Qualysは、FUSEファイルシステムを用いることでマウント名前空間による隔離を回避しながら、この2つの競合状態を悪用できることを実証しました。公開アドバイザリにはUbuntu 24.04と26.04で実際にroot権限を取得した実行結果も掲載されています。

AppArmorプロファイル制約と/run/udev/**の抜け道

ここまでの手順で攻撃者は「任意のファイルをroot所有かつworld-writableな形で作成する」ことに成功しますが、この段階ではまだroot権限の獲得には至っていません。snap-confine自体が動作する際にはCanonicalが用意した専用のAppArmorプロファイルによって、書き込み可能なパスが厳しく制限されているためです。/etc 配下の設定ファイルを書き換えたり、cronやsudoersを汚染したりすることはこのプロファイルによって遮断されます。

QualysはAppArmorプロファイルの中から /run/udev/** rw という許可ルールに着目しました。/run/udev/rules.d/ はudev(systemd-udevd)がホットプラグイベントを処理する際に参照するルールディレクトリで、ここに置かれた .rules ファイルの内容次第でsystemd-udevdプロセスから任意のコマンドを実行させることが可能です。実際、udevのルール文法では PROGRAM=RUN+= といったキーを使って外部プログラムを起動でき、その実行主体はsystemd-udevdデーモン、すなわちrootです。

攻撃者はこの経路を利用し、先ほどの任意ファイル作成能力を/run/udev/rules.d/配下の.rulesファイル書き込みに転換します。Qualysは、FUSEファイルシステムのマウントとアンマウントを利用してudevルールを発火させ、systemd-udevd経由で任意のコマンドをroot権限で実行しました。snap-confineの一時ファイル作成という一見無害な処理が、最終的に任意コマンドのroot権限実行へつながる形になっています。

同時開示された関連脆弱性CVE-2026-15226とCVE-2024-5300

USN-8579-1ではCVE-2026-8933と同時に、CVE-2026-15226とCVE-2024-5300という2件のsnapd脆弱性も修正されています。いずれもCanonical社内メンバーが発見したもので、CVE-2026-8933とは独立した問題ですが、Snapの閉じ込めモデル全体を評価する上では併せて把握しておくべき性質の脆弱性です。

CVE-2026-15226はCanonicalのZygmunt Krynicki氏が発見した問題で、snapdのデフォルトseccompテンプレートがset-user-ID属性を持つ実行ファイルの作成を制限していなかったというものです。CVSS 3.1の基本値は8.4で、Canonicalは「Snap閉じ込め内のroot権限(confined root)から、閉じ込めの外側にあるroot権限(unconfined root)へ昇格できる」問題と説明しています。悪用の起点としては、悪意あるSnapをストアに登録してユーザーにインストールさせるルートと、正規のデーモンSnapがユーザー提供のプログラムを実行する挙動を悪用するルートの2種類が挙げられており、悪意あるSnapの配布経路やユーザー提供プログラムを扱うデーモンSnapの運用面で注意が必要な脆弱性です。

CVE-2024-5300は同じくCanonicalのJames Henstridge氏が発見した情報漏えいで、snapdのデフォルトAppArmorテンプレートがsystemd-userdbdのvarlinkインターフェースへのアクセスを制限していなかったことに起因します。CVSS 3.1は5.6で、Sandbox内のSnapアプリケーションからハッシュ化されたユーザーパスワードを取得できてしまう挙動です。影響はUbuntu 16.04 LTSから26.04 LTSまでと広く、systemd-userdbdが利用可能な環境が対象です。単体の深刻度はCVSS 5.6のMediumですが、取得されたパスワードハッシュが別の攻撃に利用される可能性があるため、他の2件と併せて更新してください。

影響を受けるUbuntuと修正版パッケージ

USN-8579-1が公表した修正版パッケージは、Ubuntu Archiveを通じて次の版で提供されます。Ubuntu 22.04 LTS(Jammy)はsnapd 2.76+ubuntu22.04.1、24.04 LTS(Noble)はsnapd 2.76+ubuntu24.04.1、26.04 LTS(Resolute)はsnapd 2.76+ubuntu26.04.3です。20.04 LTS(Focal)はsnapd 2.67.1+20.04ubuntu1~esm3、18.04 LTS(Bionic)と16.04 LTS(Xenial)はそれぞれsnapd 2.61.4ubuntu0.18.04.1+esm4とsnapd 2.61.4ubuntu0.16.04.1+esm4が用意されており、これらのESM対象リリースについてはUbuntu Proサブスクリプションを通じた配信となります。16.04の場合はさらにLegacy Supportアドオンが必要です。

Snapストア経由で配布されるsnapdおよびcore snapについても、Canonicalはlatest/stableチャンネルにsnapd 2.76.1の公開準備を進めていると告知しました。fips-updates/stableチャンネルへの修正提供は現時点で計画されていません。snapdとcoreの両方に対応が必要で、snapd snapまたはcore snapを利用している環境では両者の更新状況を確認してください。

なおDebianトリキシー(trixie)については、Debian Security Trackerで「Not exploitable as snap-confine not yet installed with set capabilities」と注記されており、脆弱なコードは含むもののsnap-confineがset-capabilities版としてインストールされないため悪用不可と評価されています。Debianのsnapdパッケージはdebian/2.71-1でnon-suidのsnap-confineを初めて導入した段階にとどまり、set-capabilities版として展開する構成にはまだ到達していないためです。Ubuntu派生ディストリビューションを利用している場合は、上流のUbuntuパッケージ版を追随しているかを確認した上でUSN-8579-1相当の修正が反映されているかを個別に確認する必要があります。

実施すべき対応と確認手順

CanonicalがUbuntu Discourseで示した対応手順は、Ubuntuパッケージ側とSnap側の両方の更新をカバーする内容です。まず現在のsnapdとcoreのバージョンを確認するには、snap info snapd coredpkg -l snapd の2つのコマンドを実行し、USN-8579-1が示した修正版と一致しているかを比較します。Ubuntuのunattended-upgradesが有効な環境では、通常24時間以内に自動でセキュリティ更新が反映されますが、緊急対応が必要な場合は手動で更新をかけます。

手動更新のコマンドとしては、Ubuntuパッケージ側は sudo apt update && sudo apt upgrade による全パッケージ更新、あるいは sudo apt update && sudo apt install --only-upgrade snapd によるsnapdのみのピンポイント更新のいずれかが利用できます。Snap側は sudo snap refresh snapdsudo snap refresh core をそれぞれ実行します。Snapの自動更新は既定で1日4回動作しますが、これも即時反映を優先する場合は明示的なrefreshを行うのが確実です。

USN-8579-1は、更新後に必要な変更をすべて反映するためシステムを再起動するよう案内しています。サービスの再起動だけを正式な代替手順とはせず、メンテナンス時間を確保したうえでOSを再起動してください。

3月のCVE-2026-3888との関係と教訓

今回のCVE-2026-8933は、Qualys TRUが2026年3月に公開したCVE-2026-3888とは根本原因の異なる別の脆弱性です。CVE-2026-3888はsnap-confineとsystemd-tmpfilesの相互作用に起因するLPEで、悪用には10日から30日という長い待機時間を要する点が話題になりました。Qualysは、CVE-2026-3888の公表とUbuntu 26.04 Betaのリリースを契機にsnap-confineを再評価し、set-capabilitiesへの移行に伴う新たな競合状態を発見したと説明しています。

脆弱性研究の観点で示唆に富むのは、「setuid-rootバイナリの廃止とfile capabilitiesへの移行」というモダンなLinuxセキュリティ設計の潮流そのものが、レガシーなコードベースに適用された場合に副作用を持ちうるという点です。setuid-rootであれば「作成したファイルは最初からroot所有」という不変条件が自動的に成立していた領域が、set-capabilitiesでは成立せず、その空白を埋めるためのchown呼び出しがレースコンディションの原因となりました。ハードニングとは、ある性質を強化する代わりに別の暗黙の前提を破ることでもあるという教訓が、はっきりと現れた事例です。

運用側の視点では、まずUSN-8579-1に沿ったsnapdの速やかな更新が最優先です。記事執筆時点で、QualysおよびCanonicalの公開資料にはCVE-2026-8933の実悪用の報告は記載されていませんが、Qualys側は詳細な技術分析、概念実証の手順、Ubuntu 24.04および26.04での実行結果を公表しており、追走する悪用コードが登場する可能性は十分にあります。加えて、同時開示されたCVE-2026-15226はconfined rootからの脱出を許すもので、悪意あるSnapの配布経路や、ユーザー提供コードを扱うデーモンSnapの運用と直接関係します。組織でSnapを業務利用している場合は、パッチ適用と併せて、許可するSnapの棚卸し、発行元や入手元の確認、インストール時の審査・許可ルールを見直すことも有効です。

一次情報・公式情報

CVE-2026-8933: Local Privilege Escalation in Set-Capabilities snap-confine(Qualys TRU、2026年7月21日)
Qualys Security Advisory: Local Privilege Escalation in set-capabilities versions of snap-confine (CVE-2026-8933)
USN-8579-1: snapd vulnerabilities(Canonical、2026年7月21日)
Snapd – multiple vulnerabilities fixed(Ubuntu Community Hub)
Ubuntu Security: CVE-2026-8933
Ubuntu Security: CVE-2026-15226
Ubuntu Security: CVE-2024-5300
Debian Security Tracker: CVE-2026-8933

参考情報

CVE-2026-3888: Important Snap Flaw Enables Local Privilege Escalation to Root(Qualys TRU、2026年3月17日)
Three New Ubuntu Snap Vulnerabilities Made Public – One Dates Back To Ubuntu 16.04 LTS(Phoronix)

コメント

タイトルとURLをコピーしました