PHP本体に深刻な脆弱性「PHP2Shell」が発覚、緊急パッチが公開
要点
-
PHP本体に、外部から認証なしで任意のコードを実行できる2件の深刻な脆弱性が発見された。
-
「PHP2Shell」と呼ばれるこの欠陥はPHP 5.4以降のほぼ全バージョンに影響し、安全なコードで書かれたサイトでも攻撃を受ける恐れがある。
-
最も危険性が高いのはApacheのmod_php環境で、アプリ実行前に単一リクエストで攻撃が成立することが実証されている。
-
PHP 8.2〜8.5向けの修正版が緊急公開されており、設定による回避策は限定的なためランタイムの更新が強く推奨されている。
-
PHPの開発チームは2026年10月21日、PHPの実行エンジン自体に存在する2件の重大な脆弱性に対処する緊急アップデートを公開した。セキュリティ企業のWizやCalif、OpenAIの研究者が報告したもので、外部の攻撃者が認証を経ずにWebサーバー上で任意のコードを実行(RCE:遠隔から不正なプログラムを実行すること)できる危険性がある。詳細情報の漏洩を受けて公開が前倒しされ、公式予定時刻に合わせて修正版が提供された。
安全なコードで書かれたサイトも影響を受けるエンジン本体の欠陥
今回公開された2件の脆弱性は総称して「PHP2Shell」と呼ばれており、深刻度を評価するCVSS(共通脆弱性評価システム)v4.0のスコアでともに「9.2」と高く判定されている。識別番号は「CVE-2026-109618」および「CVE-2026-109619」だ。
影響はPHP 5.4以降のほぼすべてのバージョンにおよび、Apacheのmod_phpやPHP-FPM、php-cgi、FrankenPHP、LiteSpeedなど、Webリクエストを処理する環境全般が対象となる。欠陥はWebサイト側のプログラムではなくPHPランタイム(プログラムを実行する基盤ソフトウェア)そのものにあるため、アプリケーションが安全に実装されていても、単純な「Hello World」ページであっても攻撃を受ける恐れがあるという。
サーバー構成によるリスクの差異とメモリ読み取りの脅威
サーバー環境によって危険度は異なり、公式アドバイザリでは特にApacheのmod_phpが最も高リスクとされている。mod_phpでは、アプリケーションコードの実行前段階において、認証なしの単一リクエストで攻撃が成立する実証コードが確認されている。
一方のPHP-FPMは、初期セットアップ失敗時にワーカープロセスを停止するため挙動が異なる。一方の欠陥では影響の可能性がありつつも完全な実証には至っておらず、もう一方ではアプリケーション内の処理に依存する形でコード実行が可能と確認された。
さらに、コード実行に至らなくてもワーカープロセスのメモリを直接読み取れる点も指摘されている。ここには他のリクエストで処理されたパスワードや認証トークン、APIキーなどが残る可能性があり、研究チームは外部のアプリケーションに対しても稼働中ワーカーからのメモリ読み出しを実証したと説明している。
各ブランチへの修正版の提供と旧バージョンへの支援
影響を受ける環境向けに、PHP 8.5.12、8.4.27、8.3.36、8.2.35の修正版がリリースされた。WordPressなどのアプリケーション側を更新しても下層のPHP本体は更新されないため、サーバーパッケージやコンテナイメージを通じてPHP本体を更新し、Webサーバーやワーカープロセスを再起動する必要がある。
なお、公式サポートが終了したPHP 8.1以前や、2026年12月31日に終了予定の8.2向けには、PHP 7.4、8.0、8.1を対象とするソースコードパッチが公開された。また、Linuxディストリビューションには事前に対策が共有されており、Debianが案内するように、パッケージのバージョン番号ではなくチェンジログのCVE記載で適用の有無を確認することが推奨されている。
設定変更による緩和策とその限界
直ちに更新できない環境向けに設定による緩和策も案内されているが、PHPチームは設定変更だけでは安全にならず、更新のみが完全な対策だと強調している。
CVE-2026-109618向けには、設定ファイルで memory_limit=-1 を指定してアプリ側の上書きを防ぎつつ、post_max_size を抑え、Webサーバー側でリクエストサイズの上限を課す方法が示された。なお、OS制限の RLIMIT_AS や RLIMIT_DATA は同様の脆弱経路を誘発するため代替不可とされている。
CVE-2026-109619では、session.upload_progress.enabled=0 の指定と全ワーカーの再起動、およびPHP 8.5での fatal_error_backtraces=0 の設定が挙げられている。パッチ公開前にコミュニティで回避策として広まっていたセッション進捗機能の無効化は、一部の攻撃経路を防ぐに過ぎず、別バリアントやもう一方の欠陥には効果がないことが公式に確認されている。