はじめに
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つです。
- 正式公開まで待ち、日々、脆弱性チェックに怯えて眠れない時間を継続するのか?
- 少々のリスクを承知でカーネルアップデートを行い、(少なくともその問題は)解決させてぐっすり眠る日を確保するのか?
筆者の性分は後者だったというお話です。
