SECURITY

#02|PHPの緊急脆弱性、修正版が公開されました。添付フォームの無いサイトも対象です

PHPに、深刻度9.2(CVSS v4.0)の脆弱性が2件見つかりました。
修正版の8.5.12・8.4.27・8.3.36・8.2.35が、日本時間の2026年10月21日23時に公開されています。
Webのリクエストを処理するPHPはすべて対象で、ファイルを添付するフォームが無いサイトも含まれます。

PHPの公式は、完全な回避策は無く、更新だけが安全だとしています。
この記事では、Webサイトを運用している企業・団体の担当者と、サーバーを管理している方に向けて、何が起きたかと、版の確認から本番の更新までの順番をまとめます。
コアゲートでも、10月21日の夜から、お預かりしているサーバーの確認を進めています。

CVE-2026-109618・109619で起きていること

2件とも、認証なしで、外からサーバー上の任意のコードを実行される恐れがあるものです。
対象は、Webのリクエストを処理するすべてのPHPです。
PHP-FPM、Apacheのmod_php、php-cgi、FrankenPHP、LiteSpeedのどれで動かしていても当てはまります。
修正版より前の版は、すべて影響を受けます。

CVE-2026-109618は、メモリ不足で処理を打ち切ったときの後片付けの問題です。
作りかけの内部データが残り、終了の処理がそれを正しいデータとして扱ってしまいます。

CVE-2026-109619は、1回のリクエストのための内部の状態が、解放された後もワーカーに残る問題です。
同じワーカーが次のリクエストを処理するとき、初期化の前にその残りを参照してしまいます。
入口のひとつは、初期設定で有効になっているアップロードの進み具合の機能(session.upload_progress)で、アプリが session_start を呼んでいなくても通ります。

いちばん危ないのはmod_phpです。
認証のないリクエストで、アプリのコードが動く前に攻撃が成り立つことが、研究者の検証で示されています。
PHP-FPMでも、アプリ側の条件つきで、任意のコードの実行まで確かめられています。

実際に悪用されているかどうかは、公式のページには書かれていません。
悪用されたとも、されていないとも書いていないので、私たちは「まだ分からない」ものとして扱っています。

ファイル添付のフォームが無いサイトも対象です

「うちのサイトにはファイルを送るフォームが無いから関係ない」と考えたくなりますが、そうではありません。
狙われるのは、PHPがアプリより前に受け付ける、リクエストの読み取りの部分です。
アプリにアップロードの機能があるかどうかとは別に、Webに公開されているPHPがあれば対象になります。

CVE-2026-109618の公式の案内でも、ファイル送信の形式(multipart)を使わないアプリは、PHPの手前でその形式のリクエストを止めるよう書かれています。
お問い合わせフォームだけのサイトも、会社案内だけのサイトも、CMSでお知らせを更新しているサイトも同じです。
既製のCMSでも、自社で作ったシステムでも、PHPで動いていれば当てはまります。

修正版の番号と、8.1以前・OSのPHP・remi・レンタルサーバーの扱い

修正版は次の4つです。
8.5系は8.5.12、8.4系は8.4.27、8.3系は8.3.36、8.2系は8.2.35です。
同じ系列でこれより前の版を使っている場合は、修正版への更新が要ります。

8.1以前を使っている場合

8.1以前には、公式の更新版は出ません。
公式は、7.4・8.0・8.1向けに、最小限の修正をソースコードの差分としてGitHubのブランチで出しています。
自分でPHPを組み立てて入れ直せる体制がなければ、8.2以上へ上げる計画を急ぐことになります。

8.2も2026年12月31日でサポートが終わります。
上げるなら8.3以上を選ぶほうが、次の入れ替えまでの時間を取れると私たちは考えています。

OSに付いてくるPHPを使っている場合

Linuxの配布元(ディストリビューション)や長期サポートの事業者には、公式から事前に修正が渡されています。
PHPの公式も、配布元の更新パッケージを確認するよう案内しています。

配布元のパッケージは、修正を取り込んでも版の番号が上の4つと違うことがあります。
配布元の更新情報で、今回の2つのCVE番号が直っているかを確かめてください。

remiのパッケージを使っている場合

有志が運営しているremi(rpms.remirepo.net)のパッケージを使っている場合は、注意が要ります。
PHP公式の告知には、remiは公開の当日には更新を出さないと書かれていました。
公式は、配布元のパッケージへ切り替えるか、ソースから組み立てることを勧めています。

レンタルサーバーを使っている場合

レンタルサーバーでは、PHP本体の更新は事業者が行います。
利用者ができるのは、事業者のお知らせを確かめることと、管理画面でPHPの版を選べる場合に、どの版が選べるようになっているかを見ることです。
8.1以前を選んだままのサイトは、事業者の対応とは別に、版を上げる計画が要ります。

更新の順番:版の確認、バックアップ、検証、本番の更新

1. 動いているPHPの版を確かめる

サーバーに入れる場合は、php -v で版を確かめます。
ただ、コマンドで動くPHPと、Webのリクエストを処理しているPHPが、別の版のことがあります。
PHP-FPMやApacheが使っている版も、サービスの設定から確かめておきます。

確かめるために phpinfo() のファイルを公開フォルダに置く方法は、消し忘れると別の穴になります。
コアゲートでは、この方法は使っていません。

複数のサーバーを持っている場合は、サーバーごとに「今の版」「上げる先の版」「担当者」を1行ずつの表にします。
一覧があると、「配布元の更新を待てば直るサーバー」と「待っても直らないサーバー」を分けて考えられます。

2. バックアップを取る

更新の前に、データベースとファイルのバックアップを取ります。
PHPの版を上げると、古い書き方のコードが動かなくなることがあります。
戻せる状態を作ってから触ることは、急ぐ時ほど大事だと私たちは考えています。

3. 検証の環境で動かしてみる

検証用のサーバーやローカルの環境があれば、先に同じ版へ上げて、主なページとフォームの送信、管理画面のログインを確かめます。
同じ系列の中の更新(8.3系から8.3.36へ、など)は、系列をまたぐ更新より影響が小さいのが普通です。
系列をまたぐ場合は、確認の範囲を広げます。

4. 本番を更新して、ワーカーを再起動する

本番を更新したら、PHP-FPMやApacheを再起動して、新しい版が実際に動いていることを確かめます。
パッケージを入れ替えただけでは、古いプロセスが動き続けていることがあるからです。
最後に、サイトの表示、フォームの送信、管理画面のログインをもう一度確かめます。

更新までの公式の暫定策(更新の代わりにはなりません)

すぐに更新できないサーバーのために、公式は攻撃の入口を減らす設定を案内しています。
ただし、公式自身が「完全な回避策は無い」としています。
次の設定は時間を稼ぐためのもので、更新を先送りしてよい理由にはなりません。

  • session.upload_progress.enabled=0 を、php.ini、PHP-FPMのプールの設定、サーバーの設定のいずれかで入れ、すべてのワーカーを再起動する。ini_set() や .user.ini では効きません。
  • post_max_size を、アップロードが要らなければ8M、要るなら32Mにする。upload_max_filesize は post_max_size より小さくする。
  • memory_limit=-1 を php_admin_value で固定し、下の階層の設定で戻されていないか確かめる。cgroupなど、ワーカー単位のメモリの上限と組み合わせる。
  • PHP 8.5では fatal_error_backtraces=0 にして、すべてのワーカーを再起動する。
  • リクエストのたびに当たる、誤った設定や非推奨の設定(初期化の前に警告を出すもの)を取り除く。error_reporting・display_errors・@ では防げません。
  • Webサーバーやプロキシで、リクエストの大きさ、入力項目の数、multipartの部品の数、ヘッダーの数、入れ子の深さを制限する。Content-Lengthの無いリクエストにも効くようにする。

ファイルを受け取る機能が無いURLなら、multipart形式のPOSTをWebサーバーの段階で止めるのが、効き目の分かりやすい対策だと私たちは考えています。
mod_phpで動かしている場合は、.htaccess の php_value などで、リクエストのたびに警告が出ていないかも見ておきます。

コアゲートが10月21日の夜に進めたこと

コアゲートでお預かりしているサーバーでは、10月21日の夜に次のことを進めました。
特別な道具は使っていません。
どれも、上の公式の案内と、普段の点検の延長です。

  • PHPの版の一覧を作り直し、サーバーごとにどこまで上げるかを書き足した。
  • ファイルを受け取る機能が無いURLへの、multipart形式のPOSTを、PHPに渡る前にWebサーバーで止めた。
  • 管理用のAPIのファイル受け取り口を、認証が無いと使えないようにした。アップロード先のフォルダでは、スクリプトを実行させない設定にした。
  • 公開フォルダに残っていたPHPの控えファイルを外し、控えファイルを配信しない設定にした。

修正版は、配布元の修正パッケージが出たものから順に入れていきます。
今回あらためて感じたのは、緊急の時に効くのは、普段から持っている版とサポート期限の一覧だということです。
一覧が古いと、どのサーバーから手を付けるかを決める前に、調べ直す時間がかかります。

私たちが制作・保守しているサイトの運用者の方へ

今回の脆弱性はPHP本体にあるので、直すにはサイトのプログラムではなく、サーバーのPHPを更新します。
サーバーの管理をコアゲートでお預かりしているサイトは、こちらで版の確認と更新を進めています。

サーバーを御社や別の事業者で管理している場合は、PHPの版を確かめ、修正版への更新をお願いします。
自社開発CMS「Container」で作ったサイトも、PHPで動いているので同じです。

版の確かめ方や更新の順番で迷ったら

どのサーバーから手を付けるか、どの版まで上げるかで迷ったときは、お気軽にご相談ください。
今の構成をうかがったうえで、確認と更新の進め方を一緒に考えます。

お問い合わせはこちら

※ この記事は、一次資料の調査と下書きをAI(Claude)が行い、内容の確認と公開の判断は人が行っています。

出典