PHPの重大な脆弱性php2shellの影響と対策
PHPの重大な脆弱性CVE-2026-109618・CVE-2026-109619について、影響する環境、修正版、サーバー別の更新方針、再起動と更新後の確認方法を解説します。
PHPを使ってWebサイトを公開している場合は、PHP本体のセキュリティ更新を確認してください。2026年10月21日に、認証なしでサーバー上のコードを実行されるおそれがある2件の脆弱性が公表されました。通称は「php2shell」です。PHP公式は修正版を公開し、速やかな更新を呼びかけています。 PHP公式のセキュリティ告知
レンタルサーバーでは、まず事業者の対応状況を確認します。VPSや自社サーバーでは、実際にWebリクエストを処理するPHPを更新し、関連プロセスの再起動と動作確認まで行います。本記事の情報基準日は2026年10月22日です。
最初に確認すること
| 利用環境 | 最初の行動 |
|---|---|
| レンタルサーバー・マネージドサービス | 対象プラン・PHPバージョンの修正が完了したか、事業者の告知やサポートで確認する |
| VPS・自社管理サーバー | OS、パッケージの配布元、PHPのバージョン、PHP-FPMかApache mod_phpかを調べる |
| Dockerなどのコンテナ | PHPを含むイメージと、実際に動いているコンテナの更新状況を確認する |
| PHPを組み込んだ製品・アプライアンス | 製品ベンダーの対象バージョンと修正手順を確認する |
PHPが何をするソフトか知りたい場合は、 PHPの紹介ページ も参考になります。WordPressの利用者は、後述するサーバー事業者への確認から始めると、作業の担当範囲を整理できます。
どのような脆弱性か
今回の2件は、PHP内部のメモリやリクエスト状態の扱いに関係します。
| 脆弱性 | 概要 |
|---|---|
| CVE-2026-109618 | メモリ不足が起きたとき、不完全な内部データが終了処理で使われ、メモリ破壊につながる問題 |
| CVE-2026-109619 | あるリクエストの処理後に古い内部状態が残り、同じワーカーの後続リクエストで解放済みメモリを使ってしまう問題 |
どちらも、条件によって認証不要のリモートコード実行につながります。詳しい技術情報は、PHP開発元の メモリ不足処理に関する公告 と 古い内部状態に関する公告 で確認できます。
PHP-FPMやApacheも確認が必要
対象をWindowsのPHP-CGIだけに限定しないでください。PHP公式は、PHP-FPM、Apache modphp、php-cgi、FrankenPHP、LiteSpeedなど、Webリクエストを処理するPHP環境に注意を求めています。特にmodphpでは、アプリケーションのコードが実行される前に攻撃が成立する実証が報告されています。 PHP公式告知
「ログインが必要な管理画面だから」「アップロード画面を隠しているから」といった理由だけで対象外と判断せず、PHP本体の修正状況を確認します。PHPを内蔵する製品については、 NCSC-NLの製品調査リスト も調査の入口になりますが、最終的な対応状況は各ベンダーの告知を確認してください。
修正版とバージョン番号の見方
PHP開発元が今回公開した修正版は次のとおりです。同じ分岐を継続利用する場合は、この版またはそれ以降の修正済みリリースを確認します。
| 分岐 | 今回の上流修正版 |
|---|---|
| PHP 8.2 | 8.2.35 |
| PHP 8.3 | 8.3.36 |
| PHP 8.4 | 8.4.27 |
| PHP 8.5 | 8.5.12 |
ソースやWindows向け配布物は 公式ダウンロードページ から確認できます。
Linuxディストリビューションには、既存のパッケージに修正だけを取り込む「バックポート」があります。この場合、表示されるPHPの基本バージョンは上の表より古くても、修正済みのことがあります。OSと配布元の公告に記載されたパッケージ全体のバージョンで判断してください。
例えばUbuntu 24.04 LTSの標準配布パッケージでは、php8.3-fpmなどの修正済み版として8.3.6-0ubuntu0.24.04.13が案内されています。他のOSや外部リポジトリには、この番号を流用できません。 Ubuntu USN-8948-1
PHP 8.1以前はPHPプロジェクトによる通常のサポートが終了しています。今回、7.4・8.0・8.1向けの最小限のソース修正も提供されていますが、長期サポートが再開されたわけではありません。保守ベンダーの提供状況を確認し、サポート対象への移行も計画します。 PHP公式告知 ・ サポート期間
更新の手順
1 サイトとPHPの対応関係を調べる
ドメインごとのPHPバージョン、処理方式、配布元、運用担当者を記録します。複数サイトを運用している場合は、設定が共通とは限りません。外部公開している環境を優先し、APIや検証環境も棚卸しに含めます。 ENISAの共同声明
SSHを使える場合、次のコマンドはコマンドライン側のPHPの確認に使えます。設定の変更は行いません。
php -v
php --ini -vはバージョン、--iniは設定ファイルの場所を表示します。 PHP公式のコマンドラインオプション
ただし、この結果だけではWeb側のPHPを確認できません。PHP-FPMのプール、Apacheのモジュール、サーバー管理画面など、サイトに実際に割り当てられた実行環境も確認してください。調査のために詳細なphpinfo()をインターネットへ公開したままにしないようにします。
2 バックアップと復旧方法を確認する
サイトのファイル、データベース、PHPやWebサーバーの設定を保管します。既に利用できる検証環境があれば、更新後のログイン、フォーム、アップロード、主要機能を先に確認します。
同じ分岐のセキュリティ更新と、8.2から8.5などの分岐変更は分けて考えます。分岐変更が必要な場合は、拡張モジュールやアプリケーションの互換性も確認してください。
3 配布元に合った修正を適用する
レンタルサーバーでは、事業者がPHPを更新する場合があります。「メンテナンス実施予定」だけでなく、利用中のプランとPHP系列が対応済みか確認します。管理画面の切替が必要な場合は、事業者の手順に従います。
VPSや自社サーバーでは、OSまたは契約中の配布元が提供するセキュリティ更新を適用します。Ubuntuの公式案内ではパッケージ更新と、利用するアプリケーションの再起動が説明されています。独自ビルドや外部リポジトリの場合は、その配布元の修正を確認してください。 Ubuntuの対応手順
コンテナでは、修正済みPHPを含むイメージを用意し、必要に応じてアプリケーションを再ビルドして、実行中のコンテナを作り直します。新しいイメージを取得しただけで、既に動いているコンテナの内容が変わったとは判断できません。
Ubuntu 24.04 LTSの標準パッケージを使う例
次は、OSがUbuntu 24.04 LTSで、Ubuntu標準リポジトリのPHP 8.3を利用する管理者向けです。外部リポジトリや独自ビルドには、そのまま適用しないでください。更新にはPHP以外のパッケージが含まれる場合もあるため、バックアップと作業時間を確保し、変更内容を確認してから進めます。
sudo apt update
apt-cache policy php8.3-fpm libapache2-mod-php8.3 php8.3-cli
apt -s upgrade apt-cache policyで導入済み版と候補版、配布元を調べます。apt -s upgradeは更新予定を表示するシミュレーションです。インストール済みの対象パッケージに修正済み候補があることと、他の変更への影響を確認したうえで、更新を実行します。 APTの操作説明 ・ apt-cacheの説明
sudo apt upgrade PHP 8.3 FPMがこのサイトを処理している構成では、対象サービスの再起動例は次のとおりです。
sudo systemctl restart php8.3-fpm Apache mod_phpを使っている構成では、PHPを読み込んでいるApache側を再起動します。
sudo systemctl restart apache2 両方を無条件に実行する手順ではありません。実際の構成に対応するサービスを選び、停止時間と影響を確認してください。候補版が提供されない場合や更新が保留される場合は、配布元やパッケージ設定を調べ、修正が入ったと推測しないでください。 Ubuntuの公式対応手順 ・ 修正済みパッケージ一覧
4 更新されたPHPを実際に読み込ませる
PHP-FPM、mod_phpを使うApacheなど、該当する実行プロセスに更新を反映します。サービス名と再起動方法は環境によって異なります。古いワーカーが残っていないことを確認してください。Webサーバーだけを再起動しても、別サービスのPHP-FPMに反映されるとは限りません。
5 動作と修正状況の両方を確認する
- 配布元の公告と、インストール済みパッケージまたはビルドの修正状況を照合する。
- 実際のWeb側PHPに更新が読み込まれたことを確認する。
- 公開ページ、管理画面、フォーム、アップロードなどを確認する。
- エラーログとアクセスログに更新後の異常がないか確認する。
- 担当者、実施時刻、対象サイト、確認結果を記録する。
画面が表示されたことと、脆弱性が修正されたことは別の確認です。公開サイトへ攻撃用の実証コードを送る方法で確認する必要はありません。
すぐに更新できない場合
修正が適用されるまで、外部公開の停止やアクセス元の制限を運用担当者と検討します。CERT-EUは、即時の修正が難しい場合、修正の適用と確認が終わるまでインターネット公開環境を隔離することを推奨しています。 CERT-EU
PHP公式には設定による暫定緩和策もありますが、特定の攻撃経路を減らすものであり、修正の代わりにはなりません。memory_limitなどを根拠なく変更すると可用性にも影響するため、設定をコピーするだけで解決したと判断しないでください。
Cloudflareは今回の攻撃向けのWAF保護を案内していますが、PHP自体の更新も必要としています。WAFを利用していても更新を継続し、保護対象の通信経路を確認します。 Cloudflareの公式案内
不審な動作がある場合
見覚えのないファイルや管理者、不審なプロセス・外部通信がある場合は、保守担当者に連絡し、ログや実施記録を保全してください。更新だけで侵入済みの変更が元に戻るわけではありません。影響調査と復旧を分けて進めます。 カナダのサイバーセキュリティ機関による対応案内
よくある質問
WordPressやプラグインの更新だけで直りますか
今回の修正対象はPHPの実行環境です。WordPress本体やプラグインの更新も必要に応じて行いますが、それだけでは今回のPHP本体の修正を代替できません。
Composerやスキャナーを導入すれば修正できますか
Composerのauditは依存ライブラリの検査です。ZAPはWebアプリケーションの検査、Trivyは対応するパッケージやイメージなどの検査に使います。導入しただけでPHP本体に修正が入るものではありません。検査で警告が出ない場合も、配布元の修正状況を確認してください。 Composerのaudit ・ ZAPの入門説明 ・ TrivyのPHP対応範囲
古いバージョンが表示される場合は未修正ですか
上流版では修正版との比較が必要ですが、ディストリビューションのバックポートでは表示が異なることがあります。サーバー事業者や配布元が示す修正済みパッケージと照合します。