脆弱性(CVE)対応(Ubuntu)
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 の再起動が必要