PHPの脆弱性は、PHP本体、Windows版の同梱ライブラリ、Composerで入れるパッケージ、WordPressのようなアプリで、確かめる場所が分かれます。11月1日時点で悪用が確認されたものと深刻度の高いもの、PHPのサポート期限、自分の環境が対象かを確かめる手順をまとめました。
- PHP2Shell(CVE-2026-109618・109619)は悪用が確認されており、8.5.12・8.4.27・8.3.36・8.2.35への更新が対応です。8.1以前に修正版はありません。
- Windows版は、10月26日の「-1」の版でBrotliが直ります。php -vの表示では見分けられません。
- composer auditはパッケージだけを見ます。PHP本体は、Webで実際に動いているPHP-FPMやコンテナの版で確かめます。
01今確かめたいPHPの脆弱性
PHP本体、Windows版の同梱ライブラリ、よく使われるアプリ・パッケージのうち、米CISAのKEV(悪用が確認された脆弱性の一覧)に載ったもの、または深刻度が緊急のものです。11月1日に確かめた状態で書いています。
| 脆弱性・問題 | 主な対象・条件 | 修正・対応 | 詳細 |
|---|---|---|---|
| PHP2Shell(PHP本体) CVE-2026-109618 / 109619 | Webのリクエストを処理するPHP(PHP-FPM、Apacheのmod_php、php-cgiなど)。PHPの評価でCVSS 4.0の9.2。10月26日にKEVへ追加[1][2] | 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35。8.1以前は修正版なし | JPCERT/CCの注意喚起[3]、サービス停止まとめ |
| Windows版の同梱Brotli CVE-2026-111497 | cURLでHTTP応答の自動展開が有効なとき。GuzzleやWordPressは初期設定で有効。10月27日にKEVへ追加[1][2] | 8.5.12-1 / 8.4.27-1 / 8.3.36-1 / 8.2.35-1 | 入れ替えと確かめ方 |
| PHP-CGIの引数の注入(Windows) CVE-2024-4577 | WindowsでPHPをCGIとして動かし、日本語(コードページ932)などの環境。XAMPPの初期構成も対象。KEV掲載、ランサムウェアでの利用も記載[2][4] | 8.3.8 / 8.2.20 / 8.1.29以降。今のサポート版は修正済み | 提供元の告知[4] |
| WordPress本体のファイル読み込み CVE-2026-87902 | テーマに名前がpage-で始まるフォルダーがあり、読み込める.phpが置かれている場合など。CVSS 4.0の9.2。9月25日にKEVへ追加[2][5] | 7.1.2。古い系列は4.7系まで修正版あり(6.9.9など) | 提供元の告知[5] |
| Laravel Livewireのコード注入 CVE-2025-54068 | livewire/livewire 3.0.0-beta.1〜3.6.3未満で、特定の形で組んだコンポーネント。CVSS 4.0の9.2。2026年3月20日にKEVへ追加[2][6] | 3.6.4以上 | 提供元の告知[6] |
| LaravelのTokenGuardの認証回避 CVE-2026-114509 | 'driver' => 'token'のガードを使い、MySQL・MariaDBの一部の構成。CVSS 4.0の9.2。KEVには未掲載 | 13.29.0 / 12.68.0(上げるなら13.30.0 / 12.69.0以上) | Sanctumとの見分け方 |
PHP2Shellは、更新できないときの設定による緩和策をPHP公式が示していますが、どれも安全にするものではなく、更新だけが完全な対応だとしています。[1]JPCERT/CCは、悪用できると主張するPoC(検証用のコード)が多数公開され、悪用を試みる通信の観測も相次いでいるとして、更新に加えて侵害の有無の調査を呼びかけています。[3]
10月23日には、セッションのアップロード進捗に関わる別の問題(CVE-2026-115560)も公表されました。設定でsession.serialize_handlerをphp_binaryかphp_serializeにし、実行時にini_set()でphpへ切り替えるアプリが対象です。修正は次の通常リリースで行う方針で、それまではsession.upload_progress.enabled=0を勧めています。PHP2Shellの緩和策としてこの設定をすでに入れていれば、追加の対応は要りません。[1]



02PHPのサポート期限と更新先
PHP公式がサポートしているのは8.2〜8.5の4系列です。8.2のセキュリティ修正は2026年12月31日に終わります。[7]
| 系列 | セキュリティ修正の終了 | 11月1日時点の最新版 | 今上げる先 |
|---|---|---|---|
| 8.5 | 2029年12月31日 | 8.5.12(Windows版は8.5.12-1) | 8.5.12以上 |
| 8.4 | 2028年12月31日 | 8.4.27(Windows版は8.4.27-1) | 8.4.27以上 |
| 8.3 | 2027年12月31日 | 8.3.36(Windows版は8.3.36-1) | 8.3.36以上 |
| 8.2 | 2026年12月31日 | 8.2.35(Windows版は8.2.35-1) | 8.2.35に上げ、年内に8.3以上へ移る |
| 8.1 | 2025年12月31日(終了) | 8.1.34 | 8.2以上へ移る |
| 8.0 / 7.4 | 2023年11月26日 / 2022年11月28日(終了) | 8.0.30 / 7.4.33 | 8.2以上へ移る |
8.1以前には、PHP2Shellの修正版は出ていません。PHP公式は7.4・8.0・8.1向けに最小限のソースの修正を用意していますが、リリースではありません。8.6.0は開発中の版(RC4)で、本番での利用は控えるよう告知されています。[1][8]
OSの配布元(Linuxのディストリビューション)や長期サポートの事業者は、事前に修正を受け取っていたとPHP公式は説明しています。これらのPHPは配布元のパッケージで更新します。[1]
03PHPの依存関係の脆弱性を確かめる方法
PHPのパッケージの脆弱性は、Composerのcomposer auditで確かめます。Packagist.orgのセキュリティアドバイザリと照らし合わせ、見つかれば終了コード1を返します。composer updateやcomposer requireも、実行のたびに同じ確認をします。[9]
composer audit
composer audit --locked --no-dev
composer audit --format=json--lockedはvendorフォルダーではなくcomposer.lockを見て確かめます。--no-devは開発用の依存(require-dev)を外します。[9]ある脆弱なパッケージを、どのパッケージが引き込んでいるかはcomposer whyで確かめます。
composer why livewire/livewire --tree
composer show laravel/frameworkcomposer auditは、PHP本体、Windows版の同梱ライブラリ、Composer以外で入れたWordPressの本体やプラグインを確かめません。PHP本体の版と、cURLが使うBrotliの版は、次のように確かめます。
php -v
php -r "var_dump(curl_version()['brotli_version'] ?? null);"04自分の環境が対象かを確かめる進め方
- 実際にリクエストを処理しているPHPを見る:ターミナルの
phpと、PHP-FPMやApacheのmod_phpが同じとは限りません。php-fpm -v(環境によってはphp-fpm8.3 -vなど)や、管理者だけが開ける場所に置いたphpinfo()で、Webで動いている版と設定を確かめます。更新した後は、PHP-FPMやApacheを再起動するまで古い版が動き続けます。 - コンテナは本番のイメージで確かめる:
docker run --rm <イメージ> php -vのように、本番で動かしているイメージそのものを確かめます。手元で作り直したイメージは、基のイメージの更新で版が変わっていることがあります。 - OSの配布元のPHPは番号だけで決めない:配布元は修正を古い番号のパッケージに取り込むことがあります。配布元のセキュリティ告知やパッケージの更新履歴で、CVE番号を探します。JPCERT/CCも、PHPを組み込んだ製品やディストリビューションのPHPが影響を受けうるとしています。[3]
- Windows版は「-1」を確かめる:
php -vの表示は8.5.12のままなので、Brotliの版(1.2.1か)で見分けます。 - 緩和策の設定は効く場所に書く:PHP公式は、PHP2Shellの緩和策を
php.iniやFPMのプール、サーバーの設定に書き、すべてのワーカーを再起動するよう案内しています。ini_set()やFPMの.user.iniには頼らないとしています。[1] - lockファイルと間接依存:composer.lockをリポジトリに入れ、本番では
composer installでその内容どおりに入れます。Livewireのように、直接書いていないパッケージが引き込んでいることもあるので、composer auditは間接依存まで見る既定のまま使います。[9]
PHP2Shellで侵害を受けていないかは、JPCERT/CCが挙げる痕跡(不自然に長いPHPSESSIDのCookie、不審なmultipart/form-dataのリクエストと前後のメモリ上限のエラーやHTTP 500、ワーカーの異常終了)でログを確かめます。痕跡が見つからなくても、攻撃を受けていないとは言い切れないとしています。[3]国内の各サービスの停止・緊急メンテナンスの告知は、PHP2Shell サービス停止まとめに原資料へのリンクとともにまとめています。停止の記録だけでは、被害の有無は分かりません。
05PHPの解説記事
PHPのWindows版のBrotliの脆弱性、8.5.12-1などへの入れ替えとcURL・Guzzleの確かめ方(CVE-2026-111497)
PHPのWindows版に同梱のBrotliの脆弱性CVE-2026-111497は、米CISAが悪用を確認しています。10月21日の版も対象のままである理由、GuzzleやWordPressで自動展開が有効になる条件、8.5.12-1などへの入れ替えと確かめ方を説明します。
LaravelのTokenGuardに認証回避の脆弱性、MySQL・MariaDBの一部の構成で他人として認証されるおそれ。Sanctumとの見分け方と11系以前の扱い
Laravelの脆弱性CVE-2026-114509は、TokenGuardで守るAPIに文字列でない値を送ると、MySQL・MariaDBの一部の構成で既存の利用者として認証されるおそれがあります。自社がTokenGuardかSanctumかの見分け方、12.69.0・13.30.0以上への上げ方、サポートが終わった11系以前の扱いを説明します。
よくある質問
サーバーでphp -vを実行したら8.3.36でした。PHP2Shellは直っていますか?
ターミナルのphpが直っていても、Webを処理しているPHP-FPMやmod_phpが別の版のことがあります。php-fpm -vやphpinfo()で確かめ、更新後にPHP-FPMやApacheを再起動したかも見ます。
CentOSやRHELのPHPで、版の番号が8.2.35より古く表示されます。対象ですか?
配布元は修正を古い番号のパッケージに取り込むことがあるため、番号だけでは決められません。配布元のセキュリティ告知やパッケージの更新履歴でCVE-2026-109618・109619を探します。
composer auditで何も出なければ、PHPの脆弱性はないと考えてよいですか?
composer auditが見るのはComposerで入れたパッケージです。PHP本体、Windows版の同梱Brotli、Composerを使わずに入れたWordPressやプラグインは、別に確かめます。
出典・参考資料
- PHP公式:2026年の告知アーカイブ2026-10-21・23・26 / PHP2Shellの修正版・対象・緩和策、CVE-2026-115560の条件と設定、Windows版の-1、8.1以前の扱い、8.6.0 RC4
- 米CISA:Known Exploited Vulnerabilities Catalog(JSON版 2026.10.30)2026-11-01確認 / CVE-2026-109618・109619(10月26日)、CVE-2026-111497(10月27日)、CVE-2026-87902、CVE-2025-54068、CVE-2024-4577の掲載
- JPCERT/CC:PHPにおける複数の脆弱性に関する注意喚起2026-10-29更新 / PoCの公開と悪用の観測、組み込み製品・ディストリビューションへの影響、侵害の調査の観点
- PHP公式:GHSA-3qgc-jrrr-25jv(CVE-2024-4577)2024-09-28(GitHubでの公開) / Windows・CGI・コードページ932などの条件、XAMPP、修正版
- WordPress:GHSA-7hp8-65ch-5whp(CVE-2026-87902)2026-09-22 / 成立条件、系列ごとの修正版、CVSS 4.0 9.2
- Livewire:GHSA-29cq-5w36-x7w3(CVE-2025-54068)2025-07-17 / 対象の版、修正版3.6.4、CVSS 4.0 9.2、回避策の記載なし
- PHP公式:Supported Versions2026-11-01確認 / 8.2〜8.5のセキュリティ修正の終了日
- PHP公式:Unsupported Branches2026-11-01確認 / 8.1・8.0・7.4の終了日と最後の版
- Composer公式:Command-line interface(audit・depends)2026-11-01確認 / composer auditのオプション・終了コード・参照先、update等での自動の確認、why
