はじめに

2026年10月31日、Linuxカーネルの脆弱性「CVE-2026-98432」に対して、nftablesによる暫定緩和策を実施しました。

このときの方針は、修正版カーネルが公開されるまでの間、攻撃経路を少しでも狭めるというものです。ここで問題となったのがUbuntu側の修正版の提供状況でした。

脆弱性の存在は明らかになっている。修正パッチも存在している。しかし、Ubuntuの通常の更新経路には、まだ修正版が配信されていない。そんな中、2026年11月2日にCanonicalから発表がありました。

Fixes available in -proposed pocket for CVE-2026-98432

修正版カーネルが -proposed ポケットで利用可能になった、というものです。

-proposed は、Ubuntuの更新パッケージが正式公開される前に検証される領域です。つまり、修正版は手に入る。しかし、通常の更新として配信するための検証はまだ終わっていない。

ここで筆者は、正式公開を待つのではなく、修正版カーネルを先行適用することにしました。今回は、その適用手順と、再起動後の確認、通常の更新経路への復帰までを記録します。

1. 対応環境と修正版の確認

今回の対象はUbuntu 24.04 LTSのVPSです。

まず、現在稼働しているカーネルを確認します。

uname -r

結果:

6.8.0-147-generic

インストール済みのカーネルパッケージも確認します。

dpkg -l | grep linux-image

続いて、APTで利用可能なバージョンを確認します。

apt-cache policy linux-generic
インストールされているバージョン: 6.8.0-147.147
候補: 6.8.0-147.147

この時点では、通常の noble-updates および noble-security に修正版は存在していません。

一方、Canonicalが公開したUbuntu 24.04 LTS向けの修正版は以下のとおりです。

6.8.0-149.149

そこで、noble-proposed を一時的に利用することにします。

2. noble-proposedの登録

まず、APTに noble-proposed を追加します。

echo 'deb http://archive.ubuntu.com/ubuntu noble-proposed main' | sudo tee /etc/apt/sources.list.d/noble-proposed.list

次に、-proposed のパッケージが通常の更新で無差別に選択されないよう、優先度を明示します。

sudo tee /etc/apt/preferences.d/99-noble-proposed <<'EOF'
Package: *
Pin: release a=noble-proposed
Pin-Priority: 100
EOF

通常の更新リポジトリの優先度500より低くすることで、-proposed に存在するパッケージを通常のアップグレード対象として優先させないようにします。なお、Ubuntuの -proposed は標準でも優先度100として扱われます。今回は設定を明示しています。

パッケージリストを更新します。

sudo apt update

続いて、修正版が認識されているか確認します。

apt-cache policy linux-generic

結果:

linux-generic:
  インストールされているバージョン: 6.8.0-147.147
  候補:               6.8.0-147.147
  バージョンテーブル:
     6.8.0-149.149 100
        100 http://archive.ubuntu.com/ubuntu noble-proposed/main amd64 Packages
 *** 6.8.0-147.147 500
        500 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu noble-security/main amd64 Packages
        100 /var/lib/dpkg/status

ここで、修正版の 6.8.0-149.149 が認識されました。ただし、候補は依然として 6.8.0-147.147 のままです。

これは意図した挙動です。

3. インストール前のシミュレーション

いきなりカーネルを更新するのは避けたいところです。特に今回は、正式公開前のパッケージを本番VPSへ導入します。

そこで、APTのシミュレーション機能を利用します。

sudo apt-get -s install -t noble-proposed --only-upgrade linux-generic

-s はシミュレーション、-t noble-proposed は対象のリポジトリを指定するオプションです。

今回の結果は以下のとおりでした。

アップグレード: 8 個
新規インストール: 7 個
削除: 0 個
保留: 21 個

更新対象には以下が含まれていました。

  • linux-generic
  • linux-image-generic
  • linux-virtual
  • linux-image-virtual
  • linux-headers-generic
  • linux-headers-virtual
  • linux-libc-dev
  • linux-tools-common

また、カーネルイメージ、モジュール、ヘッダー、ツール類が 6.8.0-149 として新規導入されます。特に確認したかったのは、パッケージ削除が0件であることです。

4. 修正版カーネルの適用

シミュレーションに問題がなかったため、実際の更新を実施します。

sudo apt-get install -t noble-proposed --only-upgrade linux-generic

今回の環境では、linux-generic に加えて linux-virtual 系のメタパッケージも依存関係として更新対象になりました。

インストール後、カーネルを切り替えるために再起動します。

sudo reboot

再起動後、稼働カーネルを確認します。

uname -r

結果:

6.8.0-149-generic

修正版カーネルでの起動に成功しました。

これでCVE-2026-98432に対するカーネル側の修正は適用できました。

……と、ここで終われば話は簡単だったのですが。

5. 再起動後のサービス確認

カーネルが更新できたからといって、システム全体が正常に動いているとは限りません。

そこで、systemdの状態を確認します。

systemctl --failed

結果:

UNIT LOAD ACTIVE SUB DESCRIPTION

0 loaded units listed.

失敗しているユニットがあった場合は、カーネル更新との関連を含めて原因を確認し、必要に応じて関係者と調整した上で対処します。

6. noble-proposedの登録解除

修正版カーネルの適用と再起動後の確認が完了したため、最後にAPTの設定を元に戻します。noble-proposed は正式公開前のパッケージを提供する領域です。

今回必要だったのは修正版カーネルの先行適用であり、継続して有効にしておく必要はありません。

追加した設定ファイルを削除します。

sudo rm /etc/apt/sources.list.d/noble-proposed.list
sudo rm /etc/apt/preferences.d/99-noble-proposed

パッケージリストを更新します。

sudo apt update

続いて、カーネルの状態を確認します。

apt-cache policy linux-generic

結果:

linux-generic:
  インストールされているバージョン: 6.8.0-149.149
  候補:               6.8.0-149.149
  バージョンテーブル:
 *** 6.8.0-149.149 100
        100 /var/lib/dpkg/status
     6.8.0-147.147 500
        500 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu noble-security/main amd64 Packages
     6.8.0-31.31 500
        500 http://archive.ubuntu.com/ubuntu noble/main amd64 Packages

修正版の 6.8.0-149.149 はインストール済みとして維持されています。通常の更新リポジトリに存在するバージョンは 6.8.0-147.147 ですが、APTが自動的にダウングレードすることはありません。

最後に、noble-proposed の設定が残っていないことを確認します。

grep -R 'noble-proposed' /etc/apt/sources.list /etc/apt/sources.list.d/ /etc/apt/preferences.d/ 2>/dev/null

結果は出力なし。これでAPTの設定も通常の状態へ戻りました。

7. 暫定緩和策について

10月31日に実施したnftablesによる暫定緩和策については、今回は撤去せず、そのまま維持することにしました。今回のカーネル更新によってCVE-2026-98432の修正は適用されていますが、既存のフィルタリングルールを急いで取り除く必要もありません。

筆者の環境ではGoを使用しておらず、現在のルールによる運用上の問題も確認されていません。そのため、今回の対応ではnftablesのルールと永続化用のsystemdサービスを変更せず、現状維持とします。

8. 対応結果

今回の対応結果をまとめます。

項目結果
CVE-2026-98432修正版適用完了
稼働カーネル6.8.0-149-generic
noble-proposed登録解除済み
systemd失敗ユニット0件
nftables暫定緩和策維持

これで、今回のCVE対応は一段落となりました。

おわりに

今回、改めて実感したのは、脆弱性対応における判断の難しさです。Canonicalが修正版を -proposed に公開したのは、正式な更新経路へ投入する前に、十分な検証を行うためです。

その判断には合理性がありますが、実際にサーバを運用する立場からすれば、脆弱性が明らかになっているにもかかわらず、正式な更新を待ち続けることにもリスクがあります。

  • 正式公開まで待つのか。
  • 検証中の修正版を先行適用するのか。
  • 暫定緩和策でどこまで対応できるのか。

どの選択にも、それぞれのリスクと運用コストがあります。この場合、筆者が選べる道は2つです。

  • 正式公開まで待ち、日々、脆弱性チェックに怯えて眠れない時間を継続するのか?
  • 少々のリスクを承知でカーネルアップデートを行い、(少なくともその問題は)解決させてぐっすり眠る日を確保するのか?

筆者の性分は後者だったというお話です。