PHP2Shell対策の前に:全サイトのPHPバージョンを正しく確認する方法
PHP2Shell対策の前に、各サイトで実際に動くPHPバージョンを確認する方法。CLIとWeb側の違い、WordPress、Docker、バックポートの読み方を解説します。
PHP2Shell対策の前に:全サイトのPHPバージョンを正しく確認する方法 — php -vだけでは足りない理由
2026年10月21日、PHPは 8.5.12、8.4.27、8.3.36、8.2.35 をリリースし、PHP2Shellと呼ばれる2件の脆弱性を修正しました(脆弱性の詳細はこちら)。
結論: シェルでの確認だけで判断せず、Web側でも確認し、ページを返すPHPランタイムを特定します。それを提供するパッケージの正確なバージョンとリポジトリを記録し、2件のCVEをベンダーのトラッカーで照合して、全サイトを1つの表にまとめます。
php.netはWebリクエストを処理するすべてのPHPが影響を受けるとし、英国NCSCも古いバージョンに限らず調べるよう求めています。
なぜphp -vでは答えにならないのか
php -v が返すのはPATH上の CLI版PHP です。php_sapi_name() はコマンドラインでは cli、Web経由では fpm-fcgi などを返し(PHPマニュアル)、別のバイナリであり得ます。CLIのphp.iniはWeb側と通常異なり(WP-CLIドキュメント)、cPanelやPleskはドメイン単位で設定でき、コンテナは独自のPHPを持ちます。
Web側から確認する方法
| 方法 | 分かること | 注意点 |
|---|
| WordPress:ツール → サイトヘルス → 情報 → サーバー | リクエストのランタイムPHPバージョンとSAPI | パッケージ番号ではない |
fastcgi_pass を実際のFPMまでたどる | 設定上の担当FPM | ディスク上のバイナリと稼働ワーカーは異なり得る |
| 保護された診断ページ/アクセス制限付きルート | 実経路での PHP_VERSION と PHP_SAPI | 公開の phpinfo() は不可 |
WordPress のサイトヘルス「サーバー」欄の「PHP version」「PHP SAPI」はリクエスト処理中に読むランタイムの値で、パッケージ番号ではありません。
nginx の fastcgi_pass は設定上のFastCGI接続先(UNIXソケット、ホストとポート、サーバーグループ)です。待ち受けるFPMまでたどって -v で確認し、実リクエストでも確かめます。
Apacheのmod_php の LoadModule php_module はPHP 8の名前で、PHP 7は php7_module でした。include先を含む実効設定を確認し(httpd -M で読み込み済みモジュールを表示)、Web側でSAPIを確かめます。php.netが最もリスクが高いとするケースなので最優先です。
1行の確認ファイルは、想定どおりのPHPハンドラーで実行される場合にしか使えません。Laravelのように public/index.php 経由で処理する構成では実行されないこともあります。既存の保護された診断ページか、アクセス制限付きルートで次の情報だけを出します。
<?php echo PHP_VERSION, ' ', PHP_SAPI;
phpinfo() は環境変数やEGPCSデータまで出力するため(PHPマニュアル)、公開エンドポイントにはたとえ短時間でも置かないでください。X-Powered-By は無効化できるため手掛かり程度です。
共有ホスティング はコントロールパネルで設定を確認し、修正状況とパッケージのバージョンは事業者に書面で確認します。
Docker の docker exec <container> php -v はCLIバイナリの確認、ENV PHP_VERSION はイメージのメタデータにすぎず、実際のリクエスト経路で確認が必要です。タグは付け替え可能で、イメージはスナップショットです(Dockerドキュメント)。--pull で再ビルドしても稼働中のサービスは変わらないため、修正済みのベースからビルドし、通常のデプロイで置き換え、全レプリカを再確認します。影響を受けるバージョンに固定したベースは影響を受けたままです。
バージョンが古く見えても修正済みのことがある
Debianはリリース時のバージョンへ修正をバックポートし(Security FAQ)、Red Hatも番号だけでは判断できないとしています。Ubuntu 24.04のphp8.3は上流が 8.3.6(パッケージは 8.3.6-0ubuntu0.24.04.x)で、8.3.36よりかなり小さく見えます。
サイトヘルス等で分かるのはランタイムの値なので、背後のパッケージを確認します(いずれも読み取り専用)。
- バイナリを提供するパッケージを特定: Debian/Ubuntuは
dpkg -S <パス>、RHEL系(AlmaLinuxなど)は rpm -qf <パス>
- 正確なバージョンとリポジトリを記録:
apt-cache policy <パッケージ名> で取得元を確認
- ベンダーのCVEページで2件とも照合: Ubuntu CVE-2026-109618やDebian tracker CVE-2026-109618(CVE-2026-109619も同様)で、パッケージごとに現在の自分のリリースの「fixed」と比べます
末尾が別形式なら(例 +deb.sury.org+1)、作成元のサードパーティリポジトリを特定し、その情報で確認します。公式Dockerイメージはphp.netのソースからビルドされるため、PHPの修正版と比べます。8.1以前はphp.netの更新がなく、公式イメージにも修正はありません(Sansec)。
実務で使えるPHPインベントリ表
前提はサイト一覧です。古いキャンペーンサイトやPHP内蔵のアプライアンスは抜けがちです(カナダのサイバーセンターとNCSCも推奨)。一覧が散在しているなら、zcrCTEMのEASMとCAASMが出発点になります。EASMはルートドメインから公開ホストを探索し、CAASMは複数ソースのホスト、デバイス、クラウドリソースを1つのインベントリに統合し、Sync Healthはソースの途絶を警告します。PHPバージョン自体は上記の方法で確認します。
例(架空のデータ):
| サイト | ホスト | SAPI | ランタイム/パッケージ(リポジトリ) | 取得元 | 修正済み? | 担当 |
|---|
| shop.example.com | VPS(Ubuntu 24.04) | fpm-fcgi | 8.3.6/8.3.6-0ubuntu0.24.04.x(Ubuntu archive) | サイトヘルス+dpkg -S、apt-cache policy | 不明(確認待ち) | Web担当 |
| intranet | 旧Apacheサーバー | apache2handler | 7.4.x/不明 | 保護された確認ページ | 不明(確認待ち、7.4は上流でサポート終了) | 情シス |
| ベンダー製システム | アプライアンス | 不明 | 不明 | ベンダーに確認 | 不明 | 購買 |
「修正済み」は、インストール済みビルドの正確な番号、2件のCVEのトラッカー上の根拠、更新済みワーカーがリクエストを処理している確認、の3つが揃ったときだけ記入します。
- 一覧を先に揃える(DNS、ホスティング、クラウド、コンテナ、アプライアンス)
- Web側でランタイムを確認し、パッケージのビルドとリポジトリを記録して2件のCVEを照合する
- インターネット公開サイト、その中でもmod_phpを優先する
- 修正後は全PHPワーカーを再起動または置き換え、Web側で再確認する(8.2は2026年12月31日にサポート終了)
表計算で追い切れないなら、zcrCTEMのパッケージと料金を確認するか、デモをお試しください。
すぐにパッチを当てられない場合
PHPは、回避策では安全にならないとしています。パッチ前にWAFでどこまで防げるかと、未修正ホスト向けのログから痕跡を探す方法をご覧ください。
限界と、無料ツールで十分なケース
分かるのはバージョンで、侵害の有無ではありません。Web側の確認は処理したプールの値なので、複数プールのサイトは全プールを確認します。サイト数が少なければ、サイトヘルス、dpkgやrpm、トラッカー、表計算で十分です。プラットフォームが役立つのは一覧そのものを作れないときです。
📞 無料相談
関連記事
インベントリと外部公開資産については、次の記事をご覧ください。
関連製品
EASMとCAASMの範囲はzcrCTEMで、公開価格は料金ページで確認できます。
出典
- PHP News Archive 2026 — 修正版、影響を受けるSAPI、mod_phpの高リスク、PHP 8.1以前、8.2のサポート終了
- PHP Manual — php_sapi_name() —
cli、fpm-fcgi、apache2handler、PHP_SAPI
- PHP Manual — phpversion() —
PHP_VERSION との関係
- PHP Manual — phpinfo() — EGPCSと環境変数の出力
- PHP Manual — FastCGI Process Manager (FPM) — プールごとのphp.ini
- PHP Manual — Apache 2.x on Unix —
LoadModule php_module、php-src UPGRADING 8.0 — php7_module からの名称変更、Apache httpd(8) — -M
- PHP Manual — php.ini core directives (expose_php)
- php-fpm man page (php-src) —
-v オプション、nginx — fastcgi_pass — ソケット、アドレス、サーバーグループ
- PHP — Unsupported Branches — 8.1のサポート終了日
- WordPress — Site Health screen、WP_Debug_Data::get_wp_server()
- WP-CLI — wp cli info
- Laravel 12.x — Deployment — フロントコントローラー
public/index.php
- cPanel — MultiPHP Manager、Plesk — PHP Settings
- Docker — Building best practices、docker container exec、公式イメージのDockerfile
- Debian Security FAQ、Red Hat — Backporting Security Fixes、Ubuntu — About CVE statuses
- Launchpad — php8.3
- dpkg(1)、apt-cache(8)、rpm(8)
- Sansec — PHP2Shell、UK NCSC、Canadian Centre for Cyber Security AL26-026