UbuntuサーバーでPHPの緊急セキュリティアップデート(CVE-2026-109618、109619)を適用する方法

2026年10月21日に公開されたPHPのリモートコード実行の脆弱性2件(CVE-2026-109618、CVE-2026-109619)がUbuntuサーバーに該当するかを確認し、セキュリティアップデートをインストールして対策する方法です…

Ubuntu 24.04PHP 8.3x86_64約 19 分

検証済みのドキュメントです

クラウドサーバーを作成し、このドキュメントのコマンドを最初から最後までそのまま実行して確認したドキュメントです。

OS
Ubuntu 24.04.5 LTS · x86_64
インストールしたバージョン
PHP 8.3.6 (8.3.6-0ubuntu0.24.04.11 → 8.3.6-0ubuntu0.24.04.13)
テストサーバー
DigitalOcean · 1 vCPU / 1 GB RAM / 25 GB SSD (s-1vcpu-1gb, sgp1)
最終確認
2026-10-23

このドキュメントにはアフィリエイトリンクが含まれています。リンクから登録するとコードサンドが手数料を受け取ることがありますが、内容や評価には影響しません。

2026年10月21日に公開されたPHPのリモートコード実行の脆弱性2件(CVE-2026-109618、CVE-2026-109619)がUbuntuサーバーに該当するかを確認し、セキュリティアップデートをインストールして対策する方法です。

1. どのような脆弱性ですか

php.netの告知によると、2件とも CVSS 9.2 で、ログインしていないユーザーでもリモートからサーバー上でコードを実行できます。PHPがリクエストの処理中にメモリ不足などで途中停止すると、リクエストの後処理の段階で壊れた状態の値をそのまま使ってしまう問題です。

告知では、PHPをApacheのモジュールとして動かす mod_php 方式が最も大きな影響を受けると説明しています。設定でリスクを下げる方法も紹介していますが、完全な対策はアップデートだけだとしています。

PHPバージョン別の修正バージョン

php.netが配布するPHPを基準にしています。サポート期間はphp.netのサポートバージョン表(2026年10月23日確認)から転記しました。

PHPバージョンphp.netのサポート状況修正バージョン
8.5サポート中(セキュリティ修正は2029年12月31日まで)8.5.12
8.4サポート中(セキュリティ修正は2028年12月31日まで)8.4.27
8.3セキュリティ修正のみ(2027年12月31日まで)8.3.36
8.2セキュリティ修正のみ(2026年12月31日まで)8.2.35
8.1サポート終了(2025年12月31日)なし
8.0サポート終了(2023年11月26日)なし
7.4サポート終了(2022年11月28日)なし

Ubuntuバージョン別の標準PHPと修正パッケージ

Ubuntu標準リポジトリのPHPは、バージョン番号を上げずに修正内容だけを取り込みます。そのため修正後も php -v のバージョン番号は変わりません。修正済みかどうかは、下の表のパッケージバージョンと比べて判断します。Ubuntuのセキュリティ告知(USN-8948-1、USN-8948-2)とCVEページに記載された値で、LTSバージョンのみを載せています。

Ubuntu標準PHP修正済みパッケージバージョン
26.04 LTS8.5(php8.5)8.5.4-0ubuntu1.5
24.04 LTS8.3(php8.3)8.3.6-0ubuntu0.24.04.13
22.04 LTS8.1(php8.1)8.1.2-1ubuntu2.28
20.04 LTS7.4(php7.4)7.4.3-4ubuntu2.29+esm5(Ubuntu Proへの加入が必要)

22.04のPHP 8.1はphp.netのサポートが終了していますが、Ubuntuが今回の修正を取り込んでいます。20.04は通常サポートが終了しているため、Ubuntu Proに加入したサーバーでのみ修正版を受け取れます。加入していない場合は、UbuntuとPHPの両方をアップグレードする必要があります。

2. 準備するもの

  • Ubuntuサーバーと sudo 権限のあるアカウント
  • Ubuntu標準リポジトリからインストールしたPHP

このドキュメントのすべての手順は、Droplet(1 vCPU · 1GB メモリ · 25GB SSD · Ubuntu 24.04 · シンガポール)でサーバーを作成して確認しました。アップデート前の状態を再現するため、修正前のパッケージ(8.3.6-0ubuntu0.24.04.11)でApacheとmod_phpをインストールしてから進めました。

このドキュメントのコマンド出力はすべて英語環境(LANG=C.UTF-8)で実行しました。サーバーの言語が異なる場合、メッセージの文言だけが異なって表示されることがあります。

3. PHPのバージョンと実行方式を確認する

まず、サーバーにインストールされているPHPのバージョンを確認します。このドキュメントのサーバーは8.3.6です。

php -v
PHP 8.3.6 (cli) (built: Sep  2 2026 12:56:02) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.6, Copyright (c) Zend Technologies
    with Zend OpCache v8.3.6, Copyright (c), by Zend Technologies

次に、WebサーバーがPHPをどの方式で実行しているかを確認します。アップデート後に再起動するサービスが実行方式によって異なるためです。Apacheのモジュール一覧に php_module があれば mod_php 方式です。

apache2ctl -M 2>/dev/null | grep -i php
 php_module (shared)

PHP-FPMを使っているかも確認します。何も表示されなければ、PHP-FPMはインストールされていません。

systemctl list-units --type=service --all | grep -i fpm

4. インストール済みパッケージのバージョンを確認する

インストールされているPHPパッケージとバージョンを確認します。バージョンが 8.3.6-0ubuntu0.24.04.13 より低ければ、今回の修正は入っていません。

dpkg -l | grep php8.3
ii  libapache2-mod-php8.3           8.3.6-0ubuntu0.24.04.11                          amd64        server-side, HTML-embedded scripting language (Apache 2 module)
ii  php8.3-cli                      8.3.6-0ubuntu0.24.04.11                          amd64        command-line interpreter for the PHP scripting language
ii  php8.3-common                   8.3.6-0ubuntu0.24.04.11                          amd64        documentation, examples and common module for PHP
ii  php8.3-opcache                  8.3.6-0ubuntu0.24.04.11                          amd64        Zend OpCache module for PHP
ii  php8.3-readline                 8.3.6-0ubuntu0.24.04.11                          amd64        readline module for PHP

5. パッケージリストを更新する

インストールできるバージョンは apt-cache policy の Candidate 行に表示されます。下はパッケージリストを更新する前の結果です。修正版がすでに出ているのに、Candidate がインストール済みと同じ .11 になっています。サーバーが持っているパッケージリストが修正版の公開前のものだからです。

apt-cache policy libapache2-mod-php8.3
libapache2-mod-php8.3:
  Installed: 8.3.6-0ubuntu0.24.04.11
  Candidate: 8.3.6-0ubuntu0.24.04.11
  Version table:
 *** 8.3.6-0ubuntu0.24.04.11 500
        500 http://mirrors.digitalocean.com/ubuntu noble-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu noble-security/main amd64 Packages
        100 /var/lib/dpkg/status
     8.3.6-0maysync1 500
        500 http://mirrors.digitalocean.com/ubuntu noble/main amd64 Packages

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

sudo apt update
Hit:1 http://mirrors.digitalocean.com/ubuntu noble InRelease
Get:2 http://mirrors.digitalocean.com/ubuntu noble-updates InRelease [126 kB]
Get:5 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]
...
Fetched 12.1 MB in 3s (3551 kB/s)
Reading package lists...
Building dependency tree...
Reading state information...
79 packages can be upgraded. Run 'apt list --upgradable' to see them.

もう一度確認すると、Candidate が修正版の .13 に変わります。

apt-cache policy libapache2-mod-php8.3
libapache2-mod-php8.3:
  Installed: 8.3.6-0ubuntu0.24.04.11
  Candidate: 8.3.6-0ubuntu0.24.04.13
  Version table:
     8.3.6-0ubuntu0.24.04.13 500
        500 http://mirrors.digitalocean.com/ubuntu noble-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu noble-security/main amd64 Packages
 *** 8.3.6-0ubuntu0.24.04.11 100
        100 /var/lib/dpkg/status
     8.3.6-0maysync1 500
        500 http://mirrors.digitalocean.com/ubuntu noble/main amd64 Packages

アップデートできるPHPパッケージの一覧を確認します。インストール済みのPHPパッケージがすべて .13 になっているかを見ます。

apt list --upgradable 2>/dev/null | grep php
libapache2-mod-php8.3/noble-updates,noble-security 8.3.6-0ubuntu0.24.04.13 amd64 [upgradable from: 8.3.6-0ubuntu0.24.04.11]
php8.3-cli/noble-updates,noble-security 8.3.6-0ubuntu0.24.04.13 amd64 [upgradable from: 8.3.6-0ubuntu0.24.04.11]
php8.3-common/noble-updates,noble-security 8.3.6-0ubuntu0.24.04.13 amd64 [upgradable from: 8.3.6-0ubuntu0.24.04.11]
php8.3-opcache/noble-updates,noble-security 8.3.6-0ubuntu0.24.04.13 amd64 [upgradable from: 8.3.6-0ubuntu0.24.04.11]
php8.3-readline/noble-updates,noble-security 8.3.6-0ubuntu0.24.04.13 amd64 [upgradable from: 8.3.6-0ubuntu0.24.04.11]

6. セキュリティアップデートをインストールする

インストール済みのPHP 8.3パッケージだけをアップデートします。--only-upgrade オプションは、すでにインストールされているパッケージだけを新しいバージョンに更新し、未インストールのパッケージは新たにインストールしないという意味です。'php8.3*' は名前が php8.3 で始まるすべてのパッケージを指し、-y はインストールの確認に前もって「はい」と答えるという意味です。

インストールしていないパッケージごとに Skipping … it is not installed の行が出ますが、正常です。重要なのは 5 upgraded と Setting up … (8.3.6-0ubuntu0.24.04.13) の行です。下の出力では Skipping の行を一部だけ残しています。

sudo apt install -y --only-upgrade 'php8.3*' libapache2-mod-php8.3
Reading package lists...
Building dependency tree...
Reading state information...
Skipping php8.3, it is not installed and only upgrades are requested.
Skipping php8.3-dev, it is not installed and only upgrades are requested.
...
The following packages will be upgraded:
  libapache2-mod-php8.3 php8.3-cli php8.3-common php8.3-opcache
  php8.3-readline
5 upgraded, 0 newly installed, 0 to remove and 74 not upgraded.
...
Setting up php8.3-common (8.3.6-0ubuntu0.24.04.13) ...
Setting up php8.3-readline (8.3.6-0ubuntu0.24.04.13) ...
Setting up php8.3-opcache (8.3.6-0ubuntu0.24.04.13) ...
Setting up php8.3-cli (8.3.6-0ubuntu0.24.04.13) ...
Setting up libapache2-mod-php8.3 (8.3.6-0ubuntu0.24.04.13) ...
libapache2-mod-php8.3: not switching MPM - already enabled
Processing triggers for man-db (2.12.0-4build2) ...
Processing triggers for php8.3-cli (8.3.6-0ubuntu0.24.04.13) ...
Processing triggers for libapache2-mod-php8.3 (8.3.6-0ubuntu0.24.04.13) ...

Running kernel seems to be up-to-date.

No services need to be restarted.

7. Webサーバーが新しいPHPを使っているか確認する

mod_php はApacheのプロセスの中にPHPを読み込んで使います。そのため、パッケージを入れ替えてもApacheが再起動するまでは、古いPHPがリクエストを処理し続けます。

Ubuntuの libapache2-mod-php8.3 パッケージは、アップデート時にApacheを自動で再起動します。上の出力の Processing triggers for libapache2-mod-php8.3 の行がその段階です。実際に再起動したかどうかは、Apacheの Active の時刻で確認します。この時刻がアップデートした時刻と同じか、それより後である必要があります。

systemctl status apache2 --no-pager | head -3
● apache2.service - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/apache2.service; enabled; preset: enabled)
     Active: active (running) since Fri 2026-10-23 09:40:26 UTC; 27s ago

このサーバーでは、アップデート前のApacheの起動時刻は09:39:27で、アップデート後は09:40:26に変わりました。

PHP-FPMを使っている場合は、FPMのサービスも再起動します。手順3でFPMが表示されなかった場合、このコマンドは飛ばしてください。

sudo systemctl restart php8.3-fpm && systemctl status php8.3-fpm --no-pager | head -3
● php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager
     Loaded: loaded (/usr/lib/systemd/system/php8.3-fpm.service; enabled; preset: enabled)
     Active: active (running) since Fri 2026-10-23 09:41:22 UTC; 20ms ago

8. 修正が入ったか確認する

パッケージのバージョンがすべて .13 に変わったかを確認します。

dpkg -l | grep php8.3
ii  libapache2-mod-php8.3           8.3.6-0ubuntu0.24.04.13                          amd64        server-side, HTML-embedded scripting language (Apache 2 module)
ii  php8.3-cli                      8.3.6-0ubuntu0.24.04.13                          amd64        command-line interpreter for the PHP scripting language
ii  php8.3-common                   8.3.6-0ubuntu0.24.04.13                          amd64        documentation, examples and common module for PHP
ii  php8.3-opcache                  8.3.6-0ubuntu0.24.04.13                          amd64        Zend OpCache module for PHP
ii  php8.3-readline                 8.3.6-0ubuntu0.24.04.13                          amd64        readline module for PHP

パッケージに含まれる変更履歴でも今回の修正を確認できます。一番上の項目に SECURITY UPDATE があれば、修正版がインストールされています。

zcat /usr/share/doc/libapache2-mod-php8.3/changelog.Debian.gz | head -3
php8.3 (8.3.6-0ubuntu0.24.04.13) noble-security; urgency=medium

  * SECURITY UPDATE: Remote RCE via state corruption issue

CVE番号で直接探すこともできます。何も表示されなければ修正前のバージョンです。

zgrep -m1 -o "CVE-2026-109618_109619" /usr/share/doc/libapache2-mod-php8.3/changelog.Debian.gz
CVE-2026-109618_109619

php -v のバージョンは8.3.6のままですが、ビルド日が変わっていることがわかります。

php -v | head -1
PHP 8.3.6 (cli) (built: Oct 19 2026 15:16:58) (NTS)

9. 自動セキュリティアップデートの設定を確認する

Ubuntuは標準で1日1回パッケージリストを更新し、セキュリティアップデートを自動でインストールします。下の2つの値が "1" なら有効になっています。

cat /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

自動アップデートが有効でも、実行されるまでは修正前のバージョンが残ります。今回のような緊急の告知が出たら、待たずに手順4の方法でバージョンを直接確認してください。

10. トラブルシューティング

Candidate: 8.3.6-0ubuntu0.24.04.11

修正版が出ているのに apt-cache policy の Candidate が古いバージョンのままなら、サーバーのパッケージリストが修正版の公開前のものです。先に sudo apt update を実行してから、もう一度確認してください。

Skipping php8.3-dev, it is not installed and only upgrades are requested.

エラーではありません。'php8.3*' に該当するパッケージのうち、インストールされていないものを飛ばすという案内です。--only-upgrade オプションにより、新たにインストールされることはありません。

Changelog unavailable for php8.3=8.3.6-0ubuntu0.24.04.13 (404 Not Found)

apt changelog コマンドは変更履歴をインターネットから取得します。セキュリティ修正の公開直後は、そのサーバーにまだ履歴が載っておらず404になることがあります。このドキュメントでもそうでした。手順8のように、サーバーにインストールされた /usr/share/doc/libapache2-mod-php8.3/changelog.Debian.gz を読めば確認できます。

Ubuntu 22.04でPHP 8.1を使っています

PHP 8.1はPHPの公式サポートが終了していますが、Ubuntu 22.04のphp8.1パッケージにはUbuntuが今回の修正を取り込んでいます。修正バージョンは 8.1.2-1ubuntu2.28 です。このドキュメントのコマンドの php8.3 を php8.1 に置き換えて、同じ手順で確認とアップデートを行ってください。22.04はこのドキュメントでは実際に実行しておらず、修正バージョンはUbuntuのセキュリティ告知と22.04のセキュリティリポジトリで確認しました。

php -v が8.3.6以外のバージョンで表示されます

Ubuntu標準リポジトリ以外(外部PPA、自前ビルド、Dockerの公式イメージなど)からインストールしたPHPです。この場合はパッケージ末尾の番号ではなく、PHPのバージョンそのもので判断します。8.5.12、8.4.27、8.3.36、8.2.35以上であれば今回の修正が入っています。インストール元のアップデート方法に従ってください。

実際に試してみる

サーバーがなければ、以下のサービスで数分あれば Ubuntu サーバーを作れます。 このドキュメントは DigitalOcean で検証しました。