BEFORE THE RELEASE公開までの時系列

修正版は日本時間10月21日23:00に公開予定

  1. 10/20

    情報が出回り、PHP の公式が事前告知

    2件・CVSS 4.0 で各 9.2。詳細は公開時に

  2. 10/21

    23:00 に修正版の公開予定

    14:00 UTC。詳細が出回れば早まる

  3. 10/23

    もともとの公表予定(報道)

    0:00ごろ。木曜 11:00 ET

出典: php.net の事前告知(2026-10-20)、BleepingComputer・Threat Landscape の報道。日時は日本時間

30秒でわかる

・何が起きたか:PHP 本体の重大な脆弱性が2件。PHP の公式は 2026-10-20 に「CVSS v4.0 でどちらも 9.2(Critical)」と事前告知した。番号は watchTowr などが CVE-2026-109618・CVE-2026-109619 と報じている
・修正版:日本時間 2026-10-21(水)23:00(14:00 UTC)に公開予定。詳細が出回るか悪用が見つかれば早まる
・まだ分からないこと:影響する版、悪用の条件、修正版の番号。公式は公開と同時に出すとしている
・呼び名:CVE-2026-109618 は研究者のあいだで「php2shell」と呼ばれていると報じられている。公式の呼び名ではない

まずやること

・サーバーを自分で運用している人:確認コマンドで、PHP がどこで何版動いているかと、パッケージの出どころを控える。23:00 以降に更新と再起動をする担当と時間を決める
・コンテナ・CI で PHP を使っている人:FROM php: のタグと、イメージを作り直す手順を確かめる
・共用サーバー・制作会社に任せている人:管理画面で使っている PHP の版を確かめ、事業者・委託先の告知を待つ。8.1 以前(EOL)なら切り替えの相談を始める

緊急時の対応表です(詳しい手順は各節)。

優先度 いまやること
最優先 PHP の稼働箇所・版・更新担当を特定する(下の確認コマンド)
次に 出どころ(OS・Docker 公式・Sury・Remi)と、修正版がどこに出るかを把握する
修正版が出たら(23:00〜) 当てる → 再起動・再デプロイ → 稼働中の版が修正版か確かめる
完了時 旧プロセス・旧イメージが残っていないか、監視の状態を確かめる

PHP は Composer で取り込む依存パッケージとは別に、実行環境として更新します。依存関係から入る攻撃と防御の全体像はサプライチェーン攻撃とは|手口・防御ツール比較・npm 12の新機構まで実践解説にまとめています。本記事は修正版が出る前の準備が主で、影響する版と修正版は公開後に追記します。

PHP 脆弱性 CVE-2026-109618・109619 の時系列(タイムライン)

日時は日本時間です。出典が別の時間帯で書いている時刻は、カッコに添えました。

日時(JST) 出来事 出典
10/20 予定より前に情報が出回る。Hacker News の投稿(のちに削除)が「CVSS 10.0 の RCE 2件が 10/22 に公表される」と書き、Florian Roth も X で PHP 本体の RCE と、修正は PHP 8 にだけ出ると投稿した Threat Landscape・BleepingComputer
10/20 watchTowr が2件は実在すると表明。CVE-2026-109618 は再現できたとみているが、技術の詳細は修正版が出るまで出さないとした BleepingComputer・watchTowr
10/20 PHP の公式が事前告知。2件とも CVSS v4.0 で 9.2。全詳細・影響する版・修正版は公開時に出す php.net・php.announce
10/21 23:00 修正版の公開予定(14:00 UTC)。詳細が公になるか、悪用の証拠が見つかれば早める php.net
10/23 0:00ごろ もともとの公表予定。watchTowr の CEO は「木曜 11:00 ET」と述べた BleepingComputer

悪用について、watchTowr は観測していないと述べています。Threat Landscape によれば、2件の CVE は予約の状態で、説明はまだ公開されていません。

公式が言っていること・報道だけのこと(php2shell の呼び名も)

WHAT IS CONFIRMED公式と報道

公式が書いたのは件数・深刻度・日時だけ

公式の告知: 2件・各 9.2

報道と未公表:

  1. 報道: PHP 5〜8 に影響(watchTowr)
  2. 報道: 修正は 8.2〜8.5 の4本(未確認)
  3. 報道: php2shell という呼び名
  4. 未公表: 影響する版・悪用の条件・仕組み

公開時の公式の告知で確かめ直す

出典: php.net の事前告知(2026-10-20)、watchTowr、Mallory、BleepingComputer(2026-10-21 確認)

公式の告知は短く、影響範囲はまだ書かれていません。報道で出回っている数字と、公式が書いたことを分けます。

項目 PHP の公式(事前告知) 報道・研究者の投稿
件数と深刻度 2件。CVSS v4.0 でどちらも 9.2(Critical) 「CVSS 10.0」という数字が出回った
種類 公開時に出す PHP 本体のリモートコード実行(RCE)
影響する版 公開時に出す PHP 5〜8 に影響(watchTowr の見立て)
修正版 公開時に出す 8.5.12・8.4.27・8.3.36・8.2.35(Mallory が Kevin Beaumont の見立てとして紹介。未確認)
EOL の系列 触れていない 「8.0 以降に出る」「8.1 以前には出ない」「8.2 以降だけ」と報道ごとに食い違う
悪用 証拠があれば公開を早める watchTowr は観測していない
呼び名 なし php2shell(研究者の投稿、watchTowr の Rapid Reaction など)

CVE 番号は watchTowr の FAQ などが挙げているものです。公開時の公式の告知で突き合わせてください。

php2shell という呼び名と、出回るコードの扱い

海外の研究者の X の投稿や、watchTowr の「Rapid Reaction」を引用した投稿で、CVE-2026-109618 が「php2shell」と呼ばれて話題になっていると報じられています。PHP の公式はこの呼び名を使っておらず、php2shell が2件のどちらを指すのか、同じものなのかも確認していません。7月の WordPress の wp2shell(CVE-2026-63030)とは別の件です。

SNS やコードの共有サイトに「PoC」と称するコードが出ても、本番のサーバーや業務の端末で動かさないでください。中身を確かめられないコードを動かすこと自体が危険です。自分の環境が当てはまるかは、修正版の告知に出る影響する版と、次の節で控えた版を比べて決めます。

今日やる準備:PHP の在りか・版・更新の段取り

PREPARE TODAY今日やる準備

影響する版が出る前に在りかと段取りを決める

  1. 1.PHP の在りかと版を洗い出す

    サーバー・コンテナ・CI・共用サーバー

  2. 2.出どころと EOL の系列を控える

    OS の標準・Sury・Remi・公式イメージ。8.1 以前は EOL

  3. 3.更新と再起動の担当を決める

    PHP-FPM・Apache・ワーカー・イメージ

出典: php.net の事前告知とサポート表(2026-10-21 時点)をもとに編集部が整理

影響する版が分からなくても、どこで PHP が動いていて、誰が更新するかは今日のうちに洗い出せます。

場所 確かめるもの 更新する人
自分で運用するサーバー(VPS・オンプレ・クラウドの VM) php -v と PHP-FPM の版、パッケージの出どころ 自分。パッケージを入れ替え、PHP-FPM か Apache を再起動
コンテナ FROM php: のタグ、ベースイメージのパッケージ 自分。イメージを作り直して入れ替える
CI php-version、ランナーのイメージ 自分。本番と同じ版で試験できるようにする
共用サーバー・PaaS 管理画面で選んでいる版 事業者。版の切り替えは自分
制作会社・保守会社に任せたサイト 版と、更新の担当と時間 委託先。いつ誰が当てるかを確かめる

パッケージの出どころで、修正の届き方が変わる

・OS の標準のリポジトリ(Ubuntu・Debian・RHEL 系など):配布元が修正を自分のパッケージに取り込んで出す。版の番号は上がらないことがあり、Ubuntu 24.04 の php8.3-cli は 8.3.6-0ubuntu0.24.04.12 で、php -v は 8.3.6 と出る(2026-10-21 確認)。判断は配布元のセキュリティ告知で
・Ondřej Surý のリポジトリ(Ubuntu の ppa:ondrej/php、Debian の packages.sury.org)と Remi のリポジトリ(RHEL 系):上流の版を追って出す。EOL の系列を入れているなら、その系列に修正が出るかはそれぞれの告知を見る
・Docker の公式イメージ(php:8.3-fpm など):新しい版でタグが作り直されるのを待ち、自分のイメージを作り直す
・ソースからのビルド・PHP を組み込んだ製品:自分でビルドし直すか、製品の更新を待つ

23:00 の公開に向けて決めておくこと

・担当と時間:日本時間の夜になる。翌朝に回すなら、それまで外から届く範囲を絞る
・再起動する対象:PHP-FPM(Ubuntu・Debian では php8.3-fpm のように系列ごとの名前)、mod_php なら Apache、常駐するワーカー(キューのワーカーなど)。cron から呼ぶ CLI は次の実行から新しい版になる
・試験と戻し方:CI を本番と同じ版で回せるか。前のパッケージ・前のイメージに戻す手順
・公開前の緩和:公式の案内はまだ無いが、GMO Flatt Security は独自調査から、原因を Session Upload Progress 機能(既定で有効)に関係すると見て、緩和策候補に session.upload_progress.enabled=0(php.ini)を挙げている。確定ではなく、この機能に依存しないか確認のうえで。WAF の仮想パッチは攻撃の形が判明してから(仮想パッチとは)

修正版を当てるまでの検知:process-watcher の PHP 向け手引き

Florian Roth(Neo23x0)は、自作の process-watcher に PHP 向けの手引きを 2026-10-20 に足しました(GPL-3.0)。eBPF で、PHP-FPM・mod_php・php-cgi・PHP の CLI が起動したプログラムとそのコマンドラインを記録します。特定の脆弱性に依存しない追加の検知の層で、修正の代わりにはなりません。本記事は動かしておらず未検証です。手順は作者の README を参照してください。

項目 README の記述
要件 Linux(amd64・arm64、カーネル 5.15 以上で BTF)、root、ログを読む jq。コンテナの中ではなくホスト側で動かす
見る相手 nginx ではなく、PHP を動かしている php-fpm などの側
見るもの PHP の下で起動したシェル・インタプリタ・nc・curl/wget。正規の用途もあるので、証拠ではなく合図として扱う
止める規則(任意) SIGKILL で止める規則がある。まず dry run で試す。shell_exec() や mail() を使うアプリは、その呼び出しが止まる
見えないもの PHP のワーカーの中だけで完結し、プロセスを起こさない動作。短命のプロセスは止める前に終わることがある(作者の検証で、1コマンドのシェル200本のうち止められたのは約60%)

PHP のアップデート方法(版の確かめ方):自システムの確認コマンド

どれも読み取りだけのコマンドです。見ているのは「どこで何版の PHP が動いているか」と「その系列がサポート中か」で、影響を受けるかの判定ではありません。影響する版は修正版の告知で公表されるので、その表とこの結果を突き合わせます。

1. リポジトリ:コンテナ・Composer・CI で指定している版

アプリのリポジトリのルートで実行します。

git fetch --all --prune
git grep -nE '^FROM +([^ ]+/)?php:|image: *([^ ]+/)?php:' origin/main -- '*Dockerfile*' '*compose*.yml' '*compose*.yaml'
git grep -nE '"php" *:' origin/main -- '*composer.json'
git grep -nE 'php-version|image: *([^ ]+/)?php:' origin/main -- .github/workflows .gitlab-ci.yml

origin/main は配備するブランチに置き換えます。2行目はコンテナの元にする PHP のイメージ、3行目は Composer が求める PHP の版、4行目は CI で使う版です。composer.json の "php" は動かせる版の範囲の指定で、本番で動いている版そのものではありません。

2. サーバー:動いている PHP と PHP-FPM の版

php -v | head -n 1
for b in php-fpm php-fpm8.5 php-fpm8.4 php-fpm8.3 php-fpm8.2 php-fpm8.1 php-fpm8.0 php-fpm7.4; do command -v "$b" >/dev/null && echo "$b: $("$b" -v | head -n 1)"; done
for pid in $(pgrep '^php'); do sudo readlink "/proc/$pid/exe"; done | sort | uniq -c
apache2ctl -M 2>/dev/null | grep -i php
dpkg -l | awk '/^ii/ && $2 ~ /^(php[0-9.]*-(cli|fpm|cgi|common)|libapache2-mod-php)/ {print $2, $3}'
for c in $(docker ps -q); do echo "$c: $(docker exec "$c" php -v 2>/dev/null | head -n 1)"; done

1行目はコマンドラインの PHP、2行目は PHP-FPM の版です。3行目は動いているプロセスの実体で、ウェブで実際に動いている版はここで分かります。4行目に php_module が出れば、Apache に組み込んだ mod_php で動いています。5行目は Ubuntu・Debian のパッケージの版です(RHEL 系では代わりに rpm -qa 'php*')。6行目は動いているコンテナの中の版です。

3. サーバー内の PHP をすべて洗い出す

管理パネル(cPanel・Plesk)や Remi で複数の版を入れた構成では、php -v で出る版のほかに別の版が入っていることがあります。探すのは、usr と opt の下にある bin のディレクトリ(usr/local/bin/ や usr/sbin/ など)の php・php8.3・php-fpm といった名前のファイルです。公式の Docker イメージは usr/local/bin/ に置きます。ルートに移ってから実行します。

cd / && pwd
find usr opt -xdev -type f -path '*bin/*' \( -name php -o -name 'php5*' -o -name 'php7*' -o -name 'php8*' -o -name 'php-fpm*' -o -name 'php-cgi*' \) -print
for b in $(find usr opt -xdev -type f -path '*bin/*' \( -name php -o -name 'php5*' -o -name 'php7*' -o -name 'php8*' -o -name 'php-fpm*' -o -name 'php-cgi*' \) 2>/dev/null); do echo "/$b: $("/$b" -v 2>/dev/null | head -n 1)"; done

2行目が見つけたファイルの一覧、3行目がそれぞれの版です。ソースからビルドした PHP を /home や /srv に置いているなら、2・3行目の usr opt の後ろに足します。

4. 版を系列ごとに振り分ける

printf '%s\n' 'PHP 8.5.1 (cli)' 'PHP 8.3.6 (fpm-fcgi)' 'PHP 8.1.31 (cli)' 'PHP 7.4.33 (cli)' | awk 'match($0, /PHP [0-9]+\.[0-9]+/) { s = substr($0, RSTART + 4, RLENGTH - 4); st = "EOL(公式のサポート外)"; if (s == "8.4" || s == "8.5") st = "アクティブサポート中"; if (s == "8.3") st = "セキュリティ修正のみ(2027-12-31まで)"; if (s == "8.2") st = "セキュリティ修正のみ(2026-12-31まで)"; print s, st, "|", $0 }'

printf の4行は例です。3. の3行目の末尾に | awk '…'(この awk の部分)をつなげば、見つけた版をまとめて振り分けます。期限は 2026-10-21 時点の公式のサポート表によります。

結果の読み方と、このコマンドの限界

掲載したままのコマンドを、Ubuntu 24.04 に PHP 8.3 の CLI・PHP-FPM・mod_php を入れた環境と、ダミーの構成で走らせました。

コマンド 陽性対照 陰性対照
1. リポジトリ FROM php:8.1-fpm-alpine・image: php:7.4-apache・"php": "^8.1"・php-version: "8.2" など5行 Node のイメージと、PHP の指定の無い composer.json で0行
2. サーバー PHP 8.3.6 (cli)・php-fpm8.3: PHP 8.3.6 (fpm-fcgi)・プロセスの実体 /usr/sbin/php-fpm8.3・php_module (shared) PHP の無い PATH・PHP-FPM の停止・mod_php の無効で、php: command not found のほかは0行
3. 洗い出し 標準の php8.3・php-fpm8.3 に加え、/usr/local/sbin と /opt/remi/php74 に置いたダミーの 8.1・7.4 を拾った php.ini・systemd のユニット・lintian のファイルだけを置いた木で0行
4. 振り分け 8.5 と 8.3 をサポート中、8.1 と 7.4 を EOL に分けた PHP の版の無い行は出さない
  1. の6行目(コンテナ)は Docker の代わりの模擬コマンドで出力の形だけを確かめ、実際の Docker では試していません。rpm -qa は PHP の RPM が無い環境でだけ走らせました。

読むときの注意は3つです。

・何も出なくても PHP が無いとは限らない:止まっているコンテナ、レジストリにだけあるイメージ、別のサーバー、共用サーバーで選べる別の版は拾わない。3. は usr と opt の下の bin のディレクトリしか見ていない
・版の番号だけでは判断できない:OS の配布元は修正を取り込んでも番号を上げないことがある(上の Ubuntu の例)。公式の修正版の番号と比べられるのは、Docker の公式イメージ・Sury・Remi・ソースからのビルド。OS のパッケージは、配布元の告知に出るパッケージの版と比べる
・振り分けはサポートの状態で、影響の判定ではない:サポート中の系列でも影響を受けうる。影響する版は公開時の告知で確かめる

PHP EOL・サポート期限:修正が出ない系列を使っている場合

公式のサポート表(2026-10-21 時点)では、各系列の期限は次のとおりです。

系列 状態 期限
8.5 アクティブサポート 2027-12-31。セキュリティ修正は 2029-12-31 まで
8.4 アクティブサポート 2026-12-31。セキュリティ修正は 2028-12-31 まで
8.3 セキュリティ修正のみ 2027-12-31
8.2 セキュリティ修正のみ 2026-12-31(あと約2か月)
8.1 EOL 2025-12-31 に終了
8.0 EOL 2023-11-26 に終了
7.4 以前 EOL 7.4 は 2022-11-28 に終了

EOL の系列は公式の修正の対象外です。今回の2件で EOL の系列に修正版が出るかは、報道ごとに食い違い、公式は告知で触れていません。出ない前提で段取りを組み、出たら使います。

・上げる:サポート中の系列へ。8.2 は年末に期限が来るので、上げるなら 8.3 以降。アプリと拡張の互換性を試験する
・配布元のサポートを使う:OS の配布元が自分のサポート期間に修正を出す系列(Ubuntu 22.04 の PHP 8.1 など)なら、配布元の告知を待つ
・延長サポートを検討する:EOL の PHP 向けに修正を出す商用のサービスがある。今回の2件を対象にするかは、各社に確かめる
・隔離する・公開側を閉じる:上げるまでは、インターネットから直接届かないようにする。社内や特定の IP からだけにする、使っていない機能やアプリを止める

PHP 脆弱性の修正版が出たらやること(PHP-FPM の再起動まで)

  1. 公式の告知で、影響する版・修正版・悪用の条件を確かめる(23:00 以降。早まることがある)
  2. 自分の出どころの修正を当てる。OS のパッケージなら配布元の告知に出る版、Docker の公式イメージなら新しいタグ、Sury・Remi なら公式の修正版
  3. 再起動する。PHP-FPM、mod_php なら Apache、常駐するワーカー
  4. 確認コマンドの 2. を走らせ直し、動いているプロセスが新しいバイナリか確かめる。パッケージを入れ替えたあとも古いプロセスが残っていると、3行目の実体に (deleted) が付く
  5. コンテナはイメージを作り直して入れ替え、古いイメージで動くものが残っていないか確かめる
  6. EOL の系列は前の節の段取りへ進む

  7. の (deleted) は、動いている PHP のバイナリを別のファイルで置き換える操作で確かめました。パッケージの更新が PHP-FPM を自動で再起動するかは、配布元と設定で違います。

当てたあとの監視は、残っている記録しだいです。何を記録すべきかは連載の監査ログの設計|事故のあとに「誰が・いつ・何を」答えるための記録項目にまとめています。

参照ソース

・PHP: News Archive - 2026(2026-10-20 の事前告知) — 2件・CVSS v4.0 で各 9.2・公開予定の日時・早める条件・詳細は公開時に出すこと
・PHP: Supported Versions — 系列ごとのサポートの期限と EOL
・[ANNOUNCE] Upcoming Critical PHP Security Release(php.announce) — 同じ事前告知のメーリングリスト版
・PHP Remote Code Execution FAQ: CVE-2026-109618 & CVE-2026-109619(watchTowr) — CVE 番号・悪用を観測していないこと
・PHP warns admins of two critical flaws, emergency patches coming tomorrow(BleepingComputer) — watchTowr の再現と、もともとの公表予定(木曜 11:00 ET)・PHP 5〜8 という見立て
・PHP Core RCEs CVE-2026-109618 and CVE-2026-109619 Leak Early(Threat Landscape) — Hacker News の投稿・CVE が予約の状態であること
・PHP Remote Code Execution (RCE) Rapid Response(Mallory) — 修正予定の版の番号(Kevin Beaumont の見立て。未確認)
・process-watcher:Watching PHP with process-watcher(Neo23x0) — PHP の下で起動したプログラムを記録する手引き・要件・できないこと(2026-10-20 更新)
・PHP の脆弱性 php2shell(CVE-2026-109618/109619)について(GMO Flatt Security) — 独自調査で Session Upload Progress に関わるとの見立てと、緩和策候補 session.upload_progress.enabled=0(確定前)