PHPセキュリティチームは、リモートコード実行(RCE)につながる2件の重大な脆弱性(CVE-2026-109618およびCVE-2026-109619)に対し、緊急のセキュリティパッチを公開しました。2件は「PHP2Shell」と総称されています。
認証不要でRCEが可能なこの2件の脆弱性は、Webリクエストを処理するすべてのPHP環境に影響します。PHP-FPM、mod_php構成のApache、php-cgi、FrankenPHP、LiteSpeedも対象です。
PHPセキュリティチームは「リスクが最も高いのはmod_phpだと考えています。認証なしのリクエストだけで、アプリケーションのコードが実行される前に攻撃を成立させられることが、実証されているためです」と説明しています。
2件はいずれも同じ根本的な問題に起因します。リクエストが異常終了すると、PHPのメモリが破損した状態のまま残る場合があり、これを悪用するとリモートコード実行を達成できます。
CVE-2026-109618では、複数の弱点を連鎖させてメモリ不足による破損を引き起こし、Webワーカーのアカウント権限でリモートコード実行に至る可能性があります。一方、CVE-2026-109619は古いグローバル状態が残る脆弱性で、認証なしでヒープのuse-after-free、メモリの漏えい、Webワーカーの権限でのリモートコード実行が可能になります。
PHP 8.xを実行しているサーバーの管理者は、できるだけ早くPHP 8.5.12、8.4.27、8.3.36、8.2.35のいずれかを適用してください。PHP 7以前を使用している場合は、修正済みのリリースへ移行する必要があります。
PHP開発チームは「PHP 8.1以前は、PHPプロジェクトによる更新がすでに終了しています。一部のディストリビューションやLTSベンダーはバックポートした修正を提供しているため、詳細はご利用のベンダーに問い合わせるか、サポート対象のバージョンにアップグレードしてください」と付け加えています。
「これらの脆弱性は深刻なため、PHPセキュリティチームはPHP 7.4、PHP 8.0、PHP 8.1向けに、最小限のソースコード版バックポートを用意しました。ソースからビルドする方や、LTSベンダーを利用できない方を支援するためです」としています。
事前警告
今回のパッチ公開に先立ち、PHP開発チームは火曜日、緊急パッチが翌日に出ると管理者に呼びかけ、公開と同時にセキュリティ更新を適用できるよう準備を促していました。
開発チームは「すべてのPHPユーザーは今のうちに準備し、リリースされ次第アップグレードできるようにしてください」と述べています。さらに「いずれかの脆弱性の詳細が公になった場合や、実環境での悪用の証拠が確認された場合には、予定より早くリリースする権利を留保します」としています。
PHPのコア開発者であるGina Peter Banyard氏は、PHP2Shellによる攻撃を完全に防げる緩和策はなく、公式のセキュリティパッチを適用することが唯一の恒久的な対策だと警告しました。
パッチ公開前の段階で、CloudflareのCTOであるDane Knecht氏は、既知のPHP2Shell攻撃手法をブロックするWAFルールを同社がすでに展開済みであることを明らかにしました。そのうえで、2件の脆弱性を狙った初期の攻撃をすでに観測していると確認しています。ただしKnecht氏は、こうした保護は一時的なものだと強調し、PHPのセキュリティ更新が利用可能になり次第、すべての管理者に適用するよう求めました。
英国の国家サイバーセキュリティセンター(NCSC)も、PHPを使用するシステムを直ちに更新するよう、英国の組織に警告しました。パッチを適用できるまでは、システムをオフラインにすることも求めています。
一時的な緩和策
すぐにサーバーへパッチを適用できない管理者向けに、PHPセキュリティチームは一部の攻撃経路への露出を減らせる緩和策もいくつか示しています。ただし、悪用を完全に防げるわけではありません(詳細はPHPのブログ記事を参照してください)。
- CVE-2026-109618:
memory_limit=-1を設定します。FPMプールのphp_admin_valueやApacheの設定など、アプリケーション側で上書きできない方法が望ましいです。post_max_sizeを小さく設定します。ファイルアップロードが不要なアプリケーションでは8M、必要な場合は32Mが目安です。- コンテナまたはcgroupの制限を可用性の境界として使用します。影響を受けたワーカーだけを終了させるポリシーが望ましいです。
-
session.upload_progress.enabled=0を設定し、すべてのワーカーを再起動します。- PHP 8.5では
fatal_error_backtraces=0を設定し、すべてのワーカーを再起動します。これで防げるのは、確認済みの致命的エラーのバックトレース経路のみです。 - 初期化前に診断メッセージを出力する、リクエストごとに適用された無効または非推奨の設定を削除します。
error_reporting、display_errors、@で診断メッセージを隠しても効果はありません。 - 攻撃者が到達できる致命的エラーや実行タイムアウトを修正します。コールバック、アップロードやインポートの処理、クリーンアップでの失敗も対象です。
PHP(Hypertext Preprocessor)は、オープンソースのサーバーサイドWeb開発言語です。WordPress、Joomla、DrupalといったCMSを含め、全Webサイトの75%から80%で使われています。
VirusTotalの推定によると、インターネットに公開されているPHPホストは510万台を超えます。このうち約380万台は、少なくとも1つのポートが開いています。