本文へスキップ

PHP2Shellとは:PHPの重大な脆弱性2件を解説

PHP2Shellは、9.2と評価されたPHPの脆弱性2件の総称で、1回のリクエストでWebサーバーを乗っ取られるおそれがあります。その仕組み、影響を受ける環境、そして完全な対策を解説します。

著者

6 分で読めます

英語の原文から機械翻訳したものです。原文はClaire Whitmoreが事実確認と編集を行いました。内容に相違がある場合は英語版が優先されます。 編集方針

PHPのGitHubセキュリティアドバイザリーGHSA-w8hw-w9fx-j79w。タイトルは「RCE via OOM corruption」で、深刻度は「Critical」(重大)と表示され、修正版として8.2.35、8.3.36、8.4.27、8.5.12が記載されています。

数字で見る

CVSS v4.0 score PHP gives each flaw
9.2
date CISA listed both flaws as exploited
Oct 26
internet-exposed hosts running PHP, per one Shodan search
1.9M+

PHP2Shellは、PHPに見つかった2件のセキュリティ上の欠陥の通称です。PHPは、WordPressやDrupalをはじめ、多くのWebサイトを動かしているプログラミング言語です。2件はCVE-2026-109618とCVE-2026-109619として追跡されており、PHPは2026年10月21日に両方を修正しました。PHPはそれぞれを10点満点中9.2と評価し、アカウントを持たない攻撃者でもインターネット経由で悪用できるとしています。

10月26日、事態はさらに深刻になりました。Tenableによると、この日、米国のサイバーセキュリティ・インフラストラクチャセキュリティ庁(CISA)が、悪用が確認されているバグのカタログに両方の欠陥を追加しました。連邦政府の民間機関は、10月29日までに修正しなければなりません。

PHP2Shellとは何か、誰が発見したのか

PHP2Shellは、2件の別々のバグをまとめて呼ぶ名前です。誰がこの名前を付けたのかについては、説明が分かれています。Recorded FutureのInsikt Groupによると、Wiz Researchがセキュリティ企業のCalifおよびOpenAIと協力してこれらの欠陥を発見し、名前を付けました。Tenableは、この名前の由来を、研究者のKirill Firsov氏が共有したエクスプロイトチェーンの動画にあるとしています。Firsov氏は、Calif.ioのLCFRの功績だとしています。

PHP Foundationは、Calif、OpenAI、Wizなどの功績を認めています。CalifとWizはいずれも、研究にAIモデルを使ったと述べています。Tenableによると、Califは、影響を受けるコードパスのうち最も古いものはPHP 5.4.0にさかのぼるとしています。

2件の欠陥の仕組み

どちらのバグも、PHPがWebリクエストのたびに開始時と終了時に実行するコードにあります。このコードは、WordPressのプラグインなど、サイト自体のコードが動く機会を得る前に実行されます。

Webサーバーは、ワーカーと呼ばれる長時間稼働するPHPプロセスをまとめて保持しています。各ワーカーは1つのリクエストに応答し、後片付けをして、次のリクエストを受け取ります。この再利用のため、あるリクエストの残りが次のリクエストに影響することがあります。

CVEPHPによる名称何が問題か
CVE-2026-109618OOM corruption(メモリ不足による破損)リクエストの内部データを作る途中で、PHPがメモリ不足に陥ります。その後、後片付けの処理が作りかけのデータを有効なものとして扱います。
CVE-2026-109619Stale global state(古いグローバル状態)あるリクエストのデータが、解放済みのメモリを指したまま残ります。同じワーカー上の次のリクエストが、PHPがそれをリセットする前に使ってしまうことがあります。

OOMは「out of memory」、つまりメモリ不足の略です。どちらの欠陥にも、プログラマーが解放後使用(use-after-free)バグと呼ぶものが関わっています。これは、プログラムがメモリの一部を返却した後も使い続けてしまうバグです。そのメモリに何が入るかを制御できる攻撃者は、プログラムを思いどおりに操れます。

Recorded Futureによると、これらのバグには、セッションのアップロード進捗データを読み取るコードでの解放後使用が含まれます。これは、ファイルのアップロードを追跡するためのPHPの機能です。Recorded FutureはVirusTotalのデータを引用し、この機能はバージョン5.4.0からPHPにあり、デフォルトで有効になっていると報じています。関連するバグの1つは、ワーカーのメモリを漏えいさせます。Wizによると、これにより他の人のリクエストに含まれるパスワード、ログイントークン、APIキー、証明書が露出するおそれがあります。

PHP2Shellの影響を受けるのは誰か

PHPは、Webリクエストを処理するすべてのインストール環境が影響を受ける可能性があるとしています。名前が挙がっているのはPHP-FPM、mod_phpを使ったApache、php-cgi、FrankenPHP、LiteSpeedで、これらはWebサーバーがPHPを動かす主な方法です。PHPは、Apache Webサーバー自体の中でPHPを動かすmod_phpを、最もリスクが高いと評価しています。mod_phpでは、ログインなしの1回のリクエストで、アプリケーションのコードが動く前に、実証済みのエクスプロイトを作動させられます。

攻撃はどこでも成功するわけではありません。セキュリティ企業のField Effectは、成功するかどうかはPHPのバージョン、OS、Webサーバー、ワーカーの設定、メモリレイアウトによって決まるとしています。同社は、攻撃は「影響を受けるすべての環境で一様に確実に機能するわけではないようだ」と書いています。

それでも研究者たちは、人気のあるアプリを完全に乗っ取れることを示しています。Tenableによると、Califは、WordPress、Drupal、Joomla、Magentoの特定のバージョンで、ログインなしのコード実行を確認しました。Trail of Bitsは、MediaWiki、Symfony、Laravel、phpBBでシェルを取得しました。シェルとは、サーバーをコマンドラインで操作できる状態のことです。

PHPは、PHPだとは思われていない製品の中にも潜んでいます。Field Effectは、影響を受ける製品を持つベンダーとして、Palo Alto Networks、Citrix、F5、HPE、NetApp、QNAP、Trend Microを挙げています。Help Net Securityは10月22日、Palo Altoが同社のPAN-OSとPanoramaソフトウェアのすべてのバージョンが影響を受け、修正版はまだ出ていないと述べたと報じました。

Tenableは、Henk Poley氏によるShodanでの検索結果を引用しています。それによると、PHPを実行していてインターネットに公開されているホストは190万台を超えます。PHPを実行しているだけで、サーバーが脆弱になるわけではありません。

何がいつ起きたか

日付(2026年)出来事
8月19日WizがAIを活用した研究ツールで最初の欠陥を発見
8月24日WizがPHPのセキュリティチームに欠陥を非公開で報告
9月21日PHPが報告を確認し、修正に着手
10月17日Amazonのおとりサーバーが攻撃の試みを記録
10月20日PHPが翌日に緊急リリースを行うと発表
10月21日PHPが8.5.12、8.4.27、8.3.36、8.2.35を公開する数時間前に、詳細がネット上に流出
10月23日PHPが、別のアップロード進捗の欠陥であるCVE-2026-115560を公表
10月26日Trail of Bitsが動作するエクスプロイトを報告。CISAが両方の欠陥を悪用確認済みとして登録

PHP Foundationによると、PHPはリリースを10月22日に予定していましたが、流出を受けて前倒ししました。私たちは事前告知と、続く10月21日のリリースを、それぞれ発生時にお伝えしました。Amazonはその後、同社のハニーポットが公表の4日前に攻撃の試みを捉えていたと発表しました。ハニーポットとは、攻撃者をおびき寄せるために作られたおとりのサーバーです。Amazonは、攻撃者がどうやって事前に詳細を入手したのかは分かっていないとしています。

リリース時点でPHP Foundationは、ネット上に出回っているコードの中に「機能するエクスプロイトは確認されなかった」と述べていました。それは数日のうちに変わりました。Tenableによると、PHP 8.4.26を動かしていたある研究者のハニーポットが10月24日に攻撃を受けました。Trail of Bitsは10月26日までに、PHP 8.2から8.5に対して動作するエクスプロイトを手にしていました。それでもRecorded Futureは、「入手できる報告からは、攻撃の成功や侵害の確認がどこまで及んでいるかの全容は明らかになっていない」と注意を促しています。

10月23日の欠陥は別の問題で、10月21日のリリースでは修正されません。PHPはこれを「セッションのアップロード進捗における、可能性の低いリモートコード実行の経路」と呼んでいます。Field Effectによると、影響を受けるのは、アップロード進捗が有効な状態で、プログラムの実行中にsession_start()を呼び出す前にsession.serialize_handlerを変更するアプリです。

開発者にとっての意味

更新だけが完全な対策です。それ以外はすべて時間稼ぎにすぎません。

  • 更新し、すべてのワーカーを再起動する。 修正版は8.5.12、8.4.27、8.3.36、8.2.35です。Tenableは、新しいパッケージを入れても、すでに動いているプロセスにはパッチが当たらないと指摘しています。Califによると、古いコードは再起動するまでメモリに残ります。
  • サーバーが探査を受けていた場合は、先にメモリを保存する。 Google CloudがMandiantと共同で作成したガイダンスは、再起動する前にワーカーのメモリを取得するよう勧めています。再起動すると証拠が消えてしまいます。
  • 設定の変更は応急処置として扱う。 1つ目の欠陥に対するPHPの暫定的な対策はmemory_limit=-1で、アプリが上書きできないように設定します。2つ目に対してはsession.upload_progress.enabled=0で、PHP 8.5ではさらにfatal_error_backtraces=0も加えます。
  • セッションのコードでCVE-2026-115560を確認する。 アプリがsession_start()の前にsession.serialize_handlerを変更している場合は、PHPの次の定例リリースまでアップロード進捗を無効にしてください。
  • SimpleXMLのクラッシュに注意する。 Tenableによると、8.4.27と8.5.12にはリグレッション(php-srcのissue #24488)があり、一部のSimpleXMLアプリがクラッシュするおそれがあります。修正はマージされましたが、10月26日時点ではリリースされていません。
  • 自社のサーバー以外にも目を向ける。 ファイアウォール、ストレージ機器、セキュリティツールにはPHPが組み込まれていることがあるため、各ベンダーのアドバイザリーを読んでください。ログは10月17日までさかのぼって確認してください。
  • PHP 7.4から8.1までを使っているなら、アップグレードを計画する。 これらのブランチには最小限のソースパッチしか提供されず、公式リリースは出ません。ディストリビューションやサポートベンダーに、バックポートについて問い合わせてください。

出典

  1. PHP2Shell (CVE-2026-109618, CVE-2026-109619): Frequently asked questions about critical PHP remote code execution vulnerabilities - Tenable
  2. PHP2Shell Exploitation: Two Critical PHP Flaws Explained - Recorded Future
  3. PHP2Shell: Critical PHP vulnerabilities patched, update now! - Help Net Security
  4. Another PHP issue identified while vendors report affected products - Field Effect

関連記事

2026年10月21日のphp.netのトップページ。PHPのロゴの下に、8.5.12、8.4.27、8.3.36、8.2.35の各リリースへのリンクが並んでいます。
プログラミング

PHP 8.5.12と8.4.27、重大なRCE脆弱性2件を修正

PHPは10月21日に8.5.12、8.4.27、8.3.36、8.2.35を公開し、9.2と評価されたリモートコード実行(RCE)の脆弱性2件を修正しました。PHPは、更新だけが完全な対策だとしています。