Ubuntu パッケージの脆弱性(CVE)対応状況の調べ方についてまとめます。

Ubuntu は、リリース後に PHP などのバージョン番号を上げず、上流のセキュリティ修正だけを移植(バックポート:backport)します。
そのため php -v の表示では修正の有無を判断できず、パッケージのバージョン(例:8.5.4-0ubuntu1.5 の -0ubuntu1.5 の部分)で判断します。

例:PHP2Shell(CVE-2026-109618 / CVE-2026-109619)

  • 上流 PHP の修正版:8.5.12・8.4.27・8.3.36・8.2.35(2026-10-21 公開)
  • Ubuntu 26.04 LTS(resolute)の修正版:php8.5 8.5.4-0ubuntu1.5
  • php -v の表示は 8.5.4 のままでも、上記のパッケージが入っていれば修正済み

手順

1. pro fix で確認する

Ubuntu に標準で入っている pro コマンドで、CVE ごとに 影響を受けるか 、修正版があるか 、適用済みか が分かります。
main リポジトリのパッケージなら、Ubuntu Pro の契約がなくても使えます。

pro fix CVE-2026-109618 --dry-run   # 状態の確認だけ
pro fix CVE-2026-109618             # 未適用なら、修正版にアップグレードする

resolvedや does not affect your system なら問題ありません。

2. ソースパッケージ名を調べる

CVE トラッカーは、ソースパッケージ名(複数のパッケージをまとめた元の名前)で記載されています。

dpkg -s libapache2-mod-php8.5 | grep -E '^(Source|Version)'
# Source: php8.5
# Version: 8.5.4-0ubuntu1.5

3. Ubuntu の CVE トラッカーで修正版を確認する

  • ブラウザで https://ubuntu.com/security/CVE-2026-109618 を開く
  • リリースごとの表で、該当リリース(26.04 LTS = resolute)の行を見る
    • 例:Fixed 8.5.4-0ubuntu1.5
  • パッケージ単位の一覧:https://ubuntu.com/security/cves?package=php8.5

コマンドで調べる場合(JSON 形式):

curl -s https://ubuntu.com/security/cves/CVE-2026-109618.json \
  | jq '.packages[] | select(.name=="php8.5") | .statuses[] | select(.release_codename=="resolute")'

4. インストール済みのバージョンと比べる

# Installed: 入っているバージョン / Candidate: アップグレードで入るバージョン
apt policy php8.5-common

# PHP 関連パッケージのバージョンをまとめて表示
dpkg -l 'php8.5*' 'libapache2-mod-php*' | awk '/^ii/{print $2, $3}'

# 修正版以上かを判定(Debian のバージョン比較ルールで比較)
dpkg --compare-versions "$(dpkg-query -W -f='${Version}' php8.5-common)" ge 8.5.4-0ubuntu1.5 \
  && echo "修正済み" || echo "未修正"

バージョンの大小は、文字列としてではなく、Debian のバージョン比較のルールで判断します。dpkg --compare-versions を使えば、そのルールで比較してくれます。

5. 変更履歴で CVE 番号を確認する

apt changelog php8.5-common | grep -B3 -A3 'CVE-2026-10961'

修正版のエントリーに CVE 番号と、セキュリティ修正の公告番号(USN)が書かれています。

6. Ubuntu Security Notices(USN)を確認する

  • https://ubuntu.com/security/notices でパッケージ名を検索すると、修正の告知(USN-xxxx-x)と、リリースごとの修正版のバージョンが分かる
  • ubuntu-security-announce メーリングリストを購読しておくと、新しい告知を受け取れる

修正版の適用

apt upgrade は PHP 以外のパッケージもまとめて更新します。PHP 関連だけを更新したい場合は、インストール済みの PHP 関連パッケージを確認して、それだけを apt install で指定します。

sudo apt update

# 入っている PHP 関連パッケージを確認する
dpkg -l | grep php
# 名前だけを取り出す場合
dpkg -l | awk '/^ii/ && /php/{print $2}'

出てきたパッケージ名を並べて apt install します。インストール済みのパッケージは、指定すると最新版(修正版)に更新されます。新規には入りません。

# 例:mod_php を使っている場合
sudo apt install --only-upgrade \
  php8.5-common php8.5-cli php8.5-mysql php8.5-xml php8.5-mbstring \
  libapache2-mod-php8.5

--only-upgrade を付けると、未インストールのパッケージを新規に入れず、入っているものだけを更新します。パッケージ名は環境ごとに異なるので、上の dpkg -l の結果に合わせて書き換えてください。

更新後は、使っている方を再起動します。再起動しないと、修正前のコードが動き続けます。

sudo systemctl restart apache2        # mod_php の場合
sudo systemctl restart php8.5-fpm     # PHP-FPM の場合

すべてのパッケージを更新してよい環境なら、従来どおり次のコマンドでも構いません。

sudo apt upgrade -y

判断のポイント

  • php -v に出る上流のバージョンではなく、パッケージのバージョンで判断する
  • 「CVE トラッカーにある修正版 ≦ インストール済みのバージョン」なら修正済み
  • 修正版を入れた後は、Apache や PHP-FPM の再起動が必要

参考