PHP2Shell(CVE-2026-109618 / CVE-2026-109619)まとめ ~公開からパッチ、現在までのタイムライン~
PHP Security CVE Vulnerability AI生成
2026年10月21日に公開されたPHP本体の重大な脆弱性「PHP2Shell」について、事前告知からパッチリリース、各ベンダーの対応までを時系列で整理します
:::message alert この記事はAIによって生成されたものです。筆者(Daisuke Akagawa)が執筆したものではありません。公開前に筆者がレビューしていますが、内容がすべて正確であることは保証できません。正確な情報は記事末尾の一次情報(公式アドバイザリなど)をご確認ください。 :::
2026年10月21日、PHP本体(コアランタイム)に重大な脆弱性が2件公開され、X(旧Twitter)でもトレンド入りするなど大きな話題になりました。研究チームはこれらを「PHP2Shell」と呼んでいます。
この記事では、一次情報(php.net、GitHub Security Advisory、CVE/NVD、研究者のブログなど)をもとに、以下を整理します。
- 何が起きたのか(脆弱性の概要)
- 影響を受けるバージョンと修正バージョン
- 事前告知からパッチ公開、ディストリビューションの対応までのタイムライン
- 今すぐやるべきこと(アップデートと暫定的な緩和策)
:::message 本記事の内容は 2026年10月22日 0時20分(JST)時点 の情報です。状況は刻々と変わっているので、最新情報は必ず末尾の一次情報を確認してください。日時は原則として元の表記(UTCなど)と日本時間(JST = UTC+9)を併記しています。 :::
まずは結論から!
| 項目 | 内容 |
|---|---|
| 通称 | PHP2Shell(php2shell) |
| CVE | CVE-2026-109618 / CVE-2026-109619 |
| GHSA | GHSA-w8hw-w9fx-j79w / GHSA-6wmf-4rv5-p3rp |
| 深刻度 | 両方とも Critical、CVSS v4.0 で 9.2(CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N) |
| 影響 | 認証不要のリモートコード実行(RCE)、メモリの内容漏えい |
| 影響を受けるもの | Webリクエストを処理するすべてのPHP(PHP-FPM、Apache mod_php、php-cgi、FrankenPHP、LiteSpeed) |
| 修正バージョン | PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 |
| PHP 8.1以前 | PHPプロジェクトからの修正リリースはなし(7.4 / 8.0 / 8.1向けに最小限のソースパッチは提供) |
| CISA KEV | 筆者確認時点(KEVカタログ 2026.10.21版)では未掲載 |
一言でいうと、「PHPランタイムそのもののバグなので、アプリやプラグインを更新しても直らない。PHPを更新してワーカーを再起動するしかない」という脆弱性です。
脆弱性の概要
PHPのセキュリティアドバイザリによると、どちらの脆弱性も「リクエストが異常終了したときに、PHPがメモリを壊れた状態のまま残してしまう」という共通の問題に起因しています。
CVE-2026-109618:OOM(メモリ不足)処理による破損(RCE via OOM corruption)
PHPはメモリ不足(OOM)エラーが起きると longjmp() で処理を抜けてリクエストを中断します。しかし、一部の処理ではリクエスト用のメモリが「初期化しきれていない状態」で参照可能になっており、そこでメモリ確保が失敗すると、無効な状態のまま後片付け(リクエストのシャットダウン処理)が走ってしまいます。その結果、RCEにつながります。
アドバイザリでは、OOMを意図的に起こす手口として以下のようなmultipartリクエストの性質が挙げられています。
- 有効な Content-Length がないmultipartリクエストが、最初の
post_max_sizeチェックを通過してしまう - 1つのパートに無制限の数のヘッダーを付けられ、PHP内部ではワイヤー上より大きなメモリを消費する
- 空のファイル入力欄は
max_file_uploadsにカウントされないのに、メタデータの配列は作られる
特に Apache mod_php では、リクエストの開始処理に失敗してもシャットダウン処理が必ず呼ばれるため、アプリケーションのコードが1行も実行される前に攻撃が成立します。mod_phpに対しては、デフォルトのメモリ制限・入力制限のままでHTTP経由の完全なRCEが確認されています。FPMについてはソース解析上は影響を受けうるものの、このCVEでは完全なエクスプロイトは示されていないとされています。
CVE-2026-109619:古いグローバル状態の残存(RCE via stale global state)
PHPのワーカーは、エラー・セッション・オブジェクト・拡張機能などのグローバルな状態を保持しています。本来はリクエストのメモリを解放する前にリセットされるべきですが、致命的エラー(OOMを含む)などで処理が途中で中断されると、解放済みのメモリを指したままの状態が残ってしまいます。同じワーカーが次のリクエストを処理するとき、通常の初期化より前にその古い状態を参照してしまい、Use-After-Free → メモリ漏えい・RCEにつながります。
確認済みのパターンとして、以下の2つが挙げられています。
- PHP 8.5の致命的エラーのバックトレース(
fatal_error_backtraces有効時):mod_phpに対するRCEの根拠になっている最も強力なケース - セッションのアップロード進捗(session upload progress):デフォルトで有効で、アプリが
session_start()を呼んでいなくても到達可能。mod_phpとFPMの両方でRCEを確認
:::message 研究チーム(Wiz Research)のブログでは、実際に見つかったバグとして「アップロード進捗のunserializer UAF」「リモートからのプロセスメモリ漏えい」「致命的エラーのバックトレースUAF」「OPcacheの型混同」の4つが紹介されています。Wizのブログ内の表とPHP公式アドバイザリでは、個々のバグがどちらのCVEに属するかの書き方が一部異なっています。CVEの分類はPHP公式アドバイザリを基準に読むのがよいと思います。 :::
どれくらいヤバいのか
Wiz Researchは、これらを組み合わせたエクスプロイトスクリプト「php2shell」で、WordPress・Drupal・Joomlaの公式コンテナイメージ(latest)に対して認証なしのRCEを実証したと公表しています。ただしこれらは代表例であり、脆弱なのはPHP本体なので、シンプルな「Hello World」アプリでも影響を受けうるとしています。
また、RCEまで行かなくても、PHPワーカーのメモリ(パスワード、認証トークン、APIキー、証明書など)を読み出せることも実証されています。
なお、Wizはこの研究で Wiz Atlas、Gemini 4 Argon、GPT-5.6 Sol といったAIモデルを活用したと説明しており、「AIによって複雑なエクスプロイト開発のハードルが下がった」ことも話題になったポイントです。
影響を受けるバージョンと修正バージョン
PHP公式アドバイザリ(GHSA)とCVEレコードに記載されている影響範囲は以下のとおりです。
| ブランチ | 影響を受けるバージョン | 修正バージョン |
|---|---|---|
| PHP 8.5 | 8.5.12 未満 | 8.5.12 |
| PHP 8.4 | 8.4.27 未満 | 8.4.27 |
| PHP 8.3 | 8.3.36 未満 | 8.3.36 |
| PHP 8.2 | 8.2.35 未満 | 8.2.35 |
| PHP 8.1以前 | サポート終了(EOL) | 公式リリースなし。7.4 / 8.0 / 8.1向けに最小限のソースバックポートのみ提供 |
Wiz Researchおよび Google Cloud のブログでは、PHP 5.4以降のほぼすべてのバージョンが少なくともどちらかの脆弱性の影響を受けるとされています。
:::message alert PHP 8.2 は 2026年12月31日でサポート終了(EOL)予定です。8.2.35 に上げて終わりではなく、サポート中のバージョンへの移行計画もあわせて検討しましょう。 :::
タイムライン
ここからは、発見から現在までを時系列で整理します。日付のみの情報は元ソースのとおり記載しています。
| 日時(元の表記) | 日本時間(JST) | 出来事 | 出典 |
|---|---|---|---|
| 2026-08-19 | - | Wiz Research が最初の脆弱性を発見 | Wiz |
| 2026-08-20 | - | Drupal に対する認証なしRCEを確認 | Wiz |
| 2026-08-21 | - | WordPress に対する認証なしRCEを確認 | Wiz |
| 2026-08-24 | - | Wiz Research が PHP セキュリティチームに報告 | Wiz |
| 2026-09-21 | - | PHP が報告を受理し、協調した修正の開発を開始 | Wiz |
| 2026年10月上旬 | - | Cloudflare が WAF 保護ルールの開発・展開を開始 | Cloudflare |
| 2026-10-12 21:03 UTC | 10-13 06:03 | 両CVE IDが予約(reserved)される | CVEレコード |
| 2026-10-20 | - | php.net が「重大なセキュリティリリースの事前告知」を掲載。リリースは 10月21日 14:00 UTC 予定、2件とも CVSS v4.0 9.2、詳細が漏れたり悪用が確認された場合は前倒しもありうると告知 | php.net |
| 2026-10-21 03:02 UTC | 10-21 12:02 | Cloudflare の WAF(無料プラン含む)で php2shell 対策がデフォルト有効に(公開の約9時間前と説明) | Cloudflare |
| 2026-10-21 13:30 UTC | 10-21 22:30 | CERT-EU によると、この時刻に PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 がリリース(予定の14:00 UTCより前) | CERT-EU |
| 2026-10-21 13:48 / 13:54 UTC | 10-21 22:48 / 22:54 | CVE-2026-109618 / CVE-2026-109619 のCVEレコードが公開 | CVEレコード |
| 2026-10-21 | 10-21 | php.net がセキュリティアドバイザリ「Critical remote code execution vulnerabilities, update now」と各リリースを公開。GitHub上で GHSA-w8hw-w9fx-j79w / GHSA-6wmf-4rv5-p3rp が公開 | php.net / GitHub |
| 2026-10-21 | 10-21 | Wiz Research が詳細ブログを公開、特設サイト php2shell.com も公開 | Wiz / php2shell.com |
| 2026-10-21 14:04 UTC | 10-21 23:04 | CISA KEV カタログ 2026.10.21 版が公開。本CVEは未掲載 | CISA KEV(JSON) |
| 2026-10-21 14:17 UTC | 10-21 23:17 | NVD に CVE-2026-109618 が登録(ステータス:Received) | NVD API |
| 2026-10-21 14:29 UTC | 10-21 23:29 | Google Cloud が対応ガイダンスのブログを公開 | Google Cloud |
| 2026-10-21 | 10-21 | 英国 NCSC がアラートを公開。即時アップデート、できない場合はオフライン化も検討するよう呼びかけ | NCSC |
| 2026-10-21 | 10-21 | CERT-EU が Security Advisory 2026-018 を更新。技術的な詳細が公に議論され、初期のPoCが出回り始めていると記載 | CERT-EU |
| 2026-10-21 | 10-21 | 各ディストリビューションが修正パッケージを公開(後述) | Red Hat / Debian / Ubuntu |
悪用状況(in the wild)とPoC
現時点で確認できた情報は以下です。
- Cloudflare:脆弱性の情報が公式リリース前に漏れており、顧客を狙った攻撃トラフィックを観測したと公表しています。攻撃者がWAFを回避しようとペイロードを変化させている様子も観測したとのことです。
- BleepingComputer:パッチ公開前に、Cloudflare CTO が「初期の攻撃」を観測していると認めたと報じています。
- CERT-EU:初期のPoCが出回り始めており、攻撃者がすでに悪用している可能性が高まっているとしています。
- CISA KEV:筆者が確認した KEV カタログ(2026.10.21版、2026-10-21 14:04 UTC 公開)には、どちらのCVEもまだ掲載されていませんでした。
:::message 「PoCが出回っている」「攻撃が観測されている」という情報は上記の組織による報告であり、筆者自身が攻撃コードを確認したわけではありません。KEVへの追加は今後変わる可能性が高いので、継続的にチェックしてください。 :::
ディストリビューション・ベンダーの対応
php.netによると、Linuxディストリビューションや LTS ベンダーには事前にパッチが共有されていました。筆者が確認できた範囲の対応状況は以下です。
| ベンダー | 内容 |
|---|---|
| Red Hat | RHSA-2026:87072(php:8.2 モジュール、RHEL 9、深刻度 Important、2026-10-21 公開)。php-8.2.35 ベースのパッケージ |
| Debian | DSA-6574-1(trixie:php8.4 8.4.27-1 |
| Ubuntu | 優先度 Critical。22.04 LTS(php8.1 8.1.2-1ubuntu2.28)、24.04 LTS(php8.3 8.3.6-0ubuntu0.24.04.13)、26.04 LTS(php8.5 8.5.4-0ubuntu1.5)、26.10(php8.5 8.5.9-0ubuntu2.1)で修正済み(CVE-2026-109618 のページで確認) |
| Cloudflare | WAF マネージドルールを無料プランを含む全プランにデフォルトで展開。リクエストとレスポンスの両方を見る新機能「full transaction detection」を使ったルールも提供 |
| Google Cloud | App Engine standard(PHP 8.2以降)は自動でパッチ適用。Cloud Run、GKE、App Engine flexible などは、パッチ済みのPHPでリビルド・再デプロイが必要 |
:::message
ディストリビューションのパッケージは、上流のバージョン番号(8.2.35など)ではなく独自のバージョン番号でバックポートされていることがあります。php -v の表示だけで判断せず、各ディストリビューションのセキュリティトラッカーで修正済みパッケージかどうかを確認しましょう。
:::
今すぐやるべきこと
1. PHPをアップデートしてワーカーを再起動する
唯一の完全な対策はアップデートです。PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35(またはディストリビューションの修正済みパッケージ)に更新し、Apache・PHP-FPM・常駐するPHPワーカーをすべて再起動してください。コンテナで動かしている場合は、イメージをリビルドして再デプロイする必要があります。
2. すぐに更新できない場合の暫定策
PHP公式アドバイザリでは、以下の緩和策が示されています。ただし「特定の攻撃経路を減らすだけで、安全になるわけではない」と明記されている点に注意してください。
CVE-2026-109618(OOM破損)向け
memory_limit=-1を、アプリから上書きできない方法(FPMプールやApache設定のphp_admin_valueなど)で設定する。どこかで有限の値に戻されていないかも確認するpost_max_sizeを小さくする(アップロード不要なら8M、必要なら32M)。upload_max_filesizeはpost_max_sizeより小さくする- Webサーバーやプロキシ側で、リクエストサイズ・入力フィールド数・multipartのパート数・ヘッダー数・ネストの深さを制限する(Content-Length がないリクエストもカバーすること)
- コンテナや cgroup のメモリ制限を可用性の境界として使う。
RLIMIT_ASやRLIMIT_DATAで代用してはいけない(脆弱な経路を逆に踏む原因になる)
CVE-2026-109619(古いグローバル状態)向け
session.upload_progress.enabled=0に設定し、すべてのワーカーを再起動する(ini_set()や FPM の.user.iniではなく、php.ini・FPMプール・サーバー設定で行う)- PHP 8.5 では
fatal_error_backtraces=0に設定して再起動する - リクエストごとに適用される、無効な設定や非推奨の設定を取り除く(
error_reportingやdisplay_errors、@で警告を隠しても効果なし) - 攻撃者が到達できる致命的エラーや実行タイムアウトを潰す
; 暫定策の例(あくまで緩和策です。アップデートの代わりにはなりません)
session.upload_progress.enabled = 0
post_max_size = 8M
; PHP 8.5 の場合
fatal_error_backtraces = 0
:::message alert
memory_limit=-1 は、メモリ不足の処理をOSに任せることになるため、ワーカーが強制終了されやすくなるなど可用性に影響します(php2shell.com でも注意喚起されています)。設定を変える前に、自分の環境で影響を確認してください。
:::
3. 侵害の痕跡を確認する
Wiz Research と php2shell.com では、調査の手がかりとして以下が挙げられています。
- 異常なmultipartリクエストのあとに、メモリ制限エラーや HTTP 500 が繰り返されている
- レスポンスの
PHPSESSIDCookie が異常に大きい、または不正な形式になっている - 原因不明のPHPワーカーのクラッシュや再起動
ただし、これらの兆候がないからといって安全とは限らない点も強調されています。英国 NCSC も、すぐに更新できない場合は、更新前にバックドアなど侵害の痕跡を確認するよう推奨しています。
まとめ
今回は、2026年10月21日に公開されたPHP本体の脆弱性「PHP2Shell」(CVE-2026-109618 / CVE-2026-109619)について、タイムラインを中心に整理しました。
- PHPランタイム自体のバグなので、アプリやCMSを更新しても直らない
- 対策は PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 への更新+ワーカー再起動 が基本
- 事前告知の段階で情報が漏れ、公開前から攻撃が観測されている
- PHP 8.1以前を使っている場合は、ベンダーのバックポートを確認するか、サポート中のバージョンへの移行を急ぎましょう
PHPで動いているサーバーをお持ちの方は、まずは自分の環境のPHPバージョンを確認するところから始めてみてください。
参考資料(一次情報)
- PHP: Hypertext Preprocessor(php.net トップ:セキュリティアドバイザリ、各リリース告知、10/20の事前告知)
- GHSA-w8hw-w9fx-j79w: RCE via OOM corruption(php/php-src)
- GHSA-6wmf-4rv5-p3rp: RCE via stale global state(php/php-src)
- php/php-src Security Advisories 一覧
- CVE-2026-109618(CVE.org API レコード)
- CVE-2026-109619(CVE.org API レコード)
- NVD API: CVE-2026-109618
- CISA Known Exploited Vulnerabilities Catalog(JSON)
- PHP2Shell: AI uncovers critical RCE vulnerabilities affecting 70% of the Internet(Wiz Blog)
- PHP2Shell 特設サイト(php2shell.com)
- Cloudflare deploys protections against php2shell vulnerability(Cloudflare Blog)
- Responding to core PHP vulnerabilities CVE-2026-109618 and CVE-2026-109619(Google Cloud Blog)
- Critical security issue affecting PHP(UK NCSC)
- CERT-EU Security Advisory 2026-018: Critical Vulnerabilities in PHP
- RHSA-2026:87072: Important: php:8.2 security update(Red Hat)
- Debian Security Tracker: CVE-2026-109618
- Ubuntu: CVE-2026-109618
- PHP ships emergency patches for critical PHP2Shell flaws(BleepingComputer)