【php2shell】PHP 8.5.12で修正された2件のRCE脆弱性と、PHP財団のセキュリティ体制強化を徹底解説
【php2shell】PHP 8.5.12で修正された2件のRCE脆弱性と、PHP財団のセキュリティ体制強化を徹底解説
2026年10月21日、PHP財団は極めて深刻度の高いセキュリティリリースを公表しました。通称「php2shell」と呼ばれる2件のCritical脆弱性(CVE-2026-109618 / CVE-2026-109619)は、認証不要でリモートコード実行(RCE)が可能という最悪のクラスに分類されます。HackerNewsでのスコアが483に達した異例の注目度が、この問題の深刻さを如実に物語っています。
PHPアプリケーションを運用している方は、この記事を読む前にまず以下の対応を実施してください。
- PHP 8.2系 → 8.2.35 にアップデート
- PHP 8.3系 → 8.3.36 にアップデート
- PHP 8.4系 → 8.4.27 にアップデート
- PHP 8.5系 → 8.5.12 にアップデート
緊急対応が完了した方は、以下で技術的な詳細と、PHP財団が進めているセキュリティ体制強化の全容を確認していきましょう。
php2shell脆弱性とは?2件のCVEの技術詳細
「php2shell」という名称は「PHPサーバーをシェルに変える」脆弱性であることを端的に示しており、セキュリティ界隈で急速に広まりました。2件とも**CVSS v4.0スコアは9.2(Critical)**で、共通の根本原因を持つ関連脆弱性です。
根本原因:fatalエラー時の内部状態破壊
2件に共通する問題の本質は、PHPがfatalエラーを処理する際に zend_bailout() と longjmp の組み合わせを使用することにあります。この仕組みは、エラー発生時にPHPの実行スタックを強制的に巻き戻しますが、その過程でPHPの内部状態が完全にリセットされず、破損した状態が残ることがあります。結果として「Use-after-free(解放済みメモリ参照)」という古典的かつ致命的なメモリ破壊が成立します。
CVE-2026-109618:OOM(メモリ枯渇)経由のRCE
発生メカニズム:session.upload_progress ハンドラーがリクエストを処理している最中に、PHPの memory_limit に達したとします。この瞬間、zend_bailout() が呼ばれ、longjmp によって実行フローが強制的に移動します。しかし、このタイミングでPHPの内部状態が未初期化のまま破損し、Use-after-freeが成立します。
攻撃手法の恐ろしさ:攻撃者が必要とするのは、PHPSESSID と PHP_SESSION_UPLOAD_PROGRESS フィールドを含むマルチパートPOSTリクエストだけです。意図的にメモリ枯渇を誘発させれば、それだけでRCEが実現します。セキュリティ研究者が「巧妙なペイロードは不要」と指摘している通り、以下のすべての条件が不要という事実が深刻度を際立たせています。
- 認証 → 不要
- アプリケーション固有の脆弱な実装 → 不要
- 特殊なサーバー設定 → 不要
CVE-2026-109619:Stale State(残留状態)経由のRCE
発生メカニズム:fatalエラーが発生した後、ワーカープロセスが保持し続けるグローバル状態が問題です。mod_phpやFPMのような永続ワーカー構成では、あるリクエストの処理中にfatalエラーが起きても、ワーカープロセス自体は死なずに次のリクエストを受け付けます。このとき、前リクエストで解放済みのメモリを指すポインタが残留(Stale)状態として存在し続け、次のリクエスト処理でUse-after-freeが成立します。
この脆弱性はApache + mod_php構成の実アプリケーションでRCEが実証済みです。PoCとしての理論的な脆弱性ではなく、実環境で再現可能であることが確認されています。
SAPIごとの危険度の違い
永続ワーカーを持つ構成ほどリスクが高くなります。
| SAPI | リスク |
|---|---|
| mod_php(Apache) | 最高:ワーカーが長期間持続するため状態汚染が累積しやすい |
| PHP-FPM | 高:ワーカープールの設定次第でリスクが変動 |
| CLI | 低:リクエストごとにプロセスが終了するため状態が引き継がれない |
影響範囲と対応:あなたのサーバーは安全か?
10年以上潜伏していた脆弱性
今回の脆弱性はPHP 5.4.0から存在しており、未パッチの全バージョンが影響を受けます。10年以上にわたって潜在していた欠陥が、2026年になって初めて発見・悪用可能な形で明らかになったということです。
最大の問題:69%に修正版が存在しない
調査によれば、インターネットに公開されているPHPサーバーは約200万台。そのうち137万台(69%)がサポート外のEOLバージョンを使用しており、今回のパッチが配布される予定がありません。今後、攻撃者がこのEOLサーバー群を標的にしていくことは容易に想像できます。
すぐにやるべきこと(チェックリスト)
ステップ1:バージョンを確認する
php -vステップ2:パッチを適用する
# Debian / Ubuntu
sudo apt update && sudo apt upgrade php
# RHEL / CentOS / Rocky Linux
sudo yum update php
# Homebrew(macOS開発環境)
brew upgrade phpステップ3:Webサーバーを再起動する
パッチ適用後は必ずWebサーバーを再起動してください。mod_phpやFPMの旧プロセスが残っていると、パッチの効果が反映されません。
sudo systemctl restart apache2 # Apache
sudo systemctl restart php-fpm # PHP-FPMアップデートできない場合の暫定回避策
EOLバージョンを使用しており、すぐにアップデートできない環境では、以下の暫定措置を検討してください。
; php.ini に追記
session.upload_progress.enabled = Off
ただし、この設定変更は根本的な対策ではありません。CVE-2026-109618への対処にはなりますが、CVE-2026-109619には効果がなく、あくまでも攻撃表面を一部縮小する暫定措置です。また、session.upload_progress を無効化すると、ファイルアップロードの進捗表示機能が動作しなくなる副作用があります。可能な限り早期のアップデートを強く推奨します。
WAFによるリクエストフィルタリングも補助的な対策として有効ですが、これも根本解決にはなりません。memory_limit の値を大きくすれば攻撃を防げるのでは、と考える方もいるかもしれませんが、これは根本対策にはならない点に注意してください。
PHP財団の組織体制と役割——「誰がPHPを守っているのか」
今回のリリースを語る上で、PHP財団の組織的な変化を理解することが重要です。
PHP財団とは
PHP財団は、PHPという言語の持続可能な発展を支えるために設立された非営利組織です。その基本的なモデルは「コアコントリビューターを雇用・支援すること」です。オープンソースの基盤言語がボランティアのみに依存する構造的なリスクを回避し、セキュリティ修正やコア機能の開発を継続的に行える体制を整えています。
2026年5月に新設された「Ecosystem Security Team」
今回の脆弱性対応の背景には、2026年5月に新設された専任のセキュリティチームの存在があります。
- Volker Dusch(AIセキュリティエンジニア):脅威分析と自動化による脆弱性検出
- Alexandre Daubois(トリアージ・修正):報告された脆弱性の優先度付けとパッチ開発
- Daniel Scherzer(ハードニング):PHPコアの堅牢化と予防的セキュリティ対策
ボランティアベースで脆弱性に対応していた従来の体制から、専任チームによる体系的な対応へとシフトしたことは、実際の開発現場では極めて重要な変化です。
意思決定プロセスの改革
PHP財団は、脆弱性対応に関わる意思決定プロセスを全会一致方式から多数決方式へと変更しました。全員が合意するまで動けない体制は、緊急性の高いセキュリティ対応においては致命的な遅延を生む可能性があります。この変更は、対応タイムラインを短縮するという明確な目的のためのトレードオフです。
過去の実績:2024年の外部セキュリティ監査
2024年、PHP財団は数年ぶりとなる外部セキュリティ監査を実施しました。資金提供はSovereign Tech Agency、仲介はOSTIF、実施はQuarkslabという体制で行われています。このケースは、公的資金がOSSのセキュリティを支えられるという重要な先例となりました。
「異例の事前通知」という新しい運用
今回のリリースでもう一つ注目すべき点は、PHP財団が10月21日 14:00 UTC にセキュリティリリースを行うということを事前に公表していたことです。これは、システム管理者やホスティングプロバイダーがパッチ適用の準備を事前に整えられるようにするための施策です。
事前通知には攻撃者にもタイムラインが伝わるというリスクがありますが、防御側が圧倒的に多い状況では、準備時間の提供によるメリットがリスクを上回ると判断された結果です。
今後のセキュリティ強化ロードマップ
PHP財団は今回のリリースを「一時的な対応」ではなく、継続的なセキュリティ強化フェーズの一部として位置付けています。
1. 高リスクコードパスの体系的レビュー
session.upload_progress のような歴史的なレガシー機能には、今回のような設計上の欠陥が他にも存在する可能性があります。Ecosystem Security Teamは zend_bailout / longjmp に起因する脆弱性クラス全体を体系的に見直していく方針を明らかにしています。
2. 事前通知プロセスの標準化
今回が「初回事例」として位置付けられており、今後は事前通知を標準的なプロセスとして確立していく予定です。運用チームとの連携を強化し、パッチ適用率を向上させることが目標です。
3. 政府機関・公共機関への資金調達拡大
PHPはWordPress、Drupal、Laravelなどを通じて世界のWebインフラの根幹をなしています。デジタルインフラとしてのPHPという位置づけを明確にし、Sovereign Tech Agencyの前例を活かして政府・公共機関からの資金調達を拡大していく方向性が示されています。
ロードマップが示す課題
137万台に及ぶEOLサーバーの問題は、PHP財団単独で解決できるものではありません。ホスティングプロバイダー、システムインテグレーター、そしてサーバー管理者自身がEOLバージョンからの移行を進めることなしに、この問題の根本的な解決はありません。
PHP財団への支援・貢献方法
PHPが安全に使い続けられる言語であり続けるためには、財団への支援が不可欠です。
企業スポンサーシップ
自社のビジネスがPHPにどれだけ依存しているかを試算し、その依存度に応じた金額での支援を検討してください。年間売上に占めるPHP基盤サービスの割合を算出すると、適切な支援額の目安になります。
ホスティング・配布プロバイダー
PaaSやマネージドホスティングとしてPHPを提供しているプロバイダーには、サービス提供規模に比例した責任があります。顧客がPHPを使うことで収益を得ているなら、その生態系の維持コストの一部を負担することは合理的な判断です。
開発者個人ができる貢献
金銭的な支援だけが貢献ではありません。
- バグレポートや再現環境の提供
- 個人スポンサーとしての少額支援
- 自社・自プロジェクトのEOLバージョンからの移行を進めること(これ自体が攻撃表面を縮小し、コミュニティへの貢献になります)
支援窓口は公式サイト thephp.foundation から確認できます。
まとめ:php2shellが残した3つの教訓
教訓1:EOLバージョンの放置は「いつか」ではなく「今日」のリスク
137万台のEOLサーバーは、今まさに修正版が存在しない状態でインターネットに公開されています。「いつか移行しよう」という先送りがどれほど危険かを、今回の事例は改めて示しました。
教訓2:OSSのセキュリティ体制は資金と人で決まる
Ecosystem Security Teamの新設と外部監査の実施は、どちらも「人と資金」があってこそ実現しました。私たちがPHPに依存して収益を上げているなら、その持続可能性を支えるコストを分担することがベストプラクティスです。
教訓3:事前通知を活かせる運用体制を自社に持つ
PHP財団が事前にリリース日程を告知しても、それを受け取って行動できる体制がなければ意味がありません。セキュリティアドバイザリを監視し、パッチ適用を迅速に実行できる運用プロセスを整備することが、技術的な対応と同じくらい重要です。
今すぐやること
php -vでバージョン確認- 対象バージョンであればパッチを即時適用
- Webサーバーを再起動
- アップデートできない環境は
session.upload_progress.enabled = Offを暫定措置として検討 - EOLバージョンの移行計画を今日中に立案開始
参考リンク・情報源
- PHP Foundation公式ブログ:Today's PHP security release and how we're strengthening PHP security
- OX Security:CVE-2026-109618 & CVE-2026-109619技術解説
- The Hacker News:PHP Issues Emergency Patches for Two Critical PHP2Shell RCE Flaws
- Tenable:php2shell FAQ
- DEV Community:PHP Patched the Two Critical RCE Flaws — Versions, Risk by SAPI, and Stopgaps
関連記事
ESLint+PrettierからOxlint+Oxfmtへ — REALITYのモノレポでlintを9.3秒→2.95秒にした全手順
ESLint+PrettierからOxlint+Oxfmtへ — REALITYのモノレポでlintを9.3秒→2.95秒にした全手順 約460ファイルのモノレポでESLint+PrettierをOxlint+Oxfmtに置き換えた結果、lint実行時間が9.29秒→2.95秒(約68%削減)を達成しました。依存パッケージは14種から3種へ、設定ファイルも大幅にシンプルになっています。速度ベンチマ...
Aurora/RDS オンデマンドキャパシティ予約でDR・マイグレーションの「キャパシティ不足」を防ぐ
Aurora/RDS オンデマンドキャパシティ予約でDR・マイグレーションの「キャパシティ不足」を防ぐ Amazon Aurora・RDSを本番運用しているエンジニアであれば、一度は耳にしたことがあるのではないでしょうか。フェイルオーバーや復旧手順を実行した直後に表示される エラーの恐ろしさを。2026年10月、そのリスクを根本から断ち切る新機能「オンデマンドキャパシティ予約(On-Demand...
GitLab に CVSS 10.0 の緊急パッチ ― 正規表現コンパイラの整数オーバーフローとは何か、今すぐやるべきこと
GitLab に CVSS 10.0 の緊急パッチ ― 正規表現コンパイラの整数オーバーフローとは何か、今すぐやるべきこと はじめに:2026年10月21日、GitLab が7バージョン同時リリース 2026年10月21日、GitLab は 19.5.1 / 19.4.3 / 19.3.6 / 19.2.9 / 19.1.9 / 19.0.10 / 18.11.13 の7バージョンを同時リリースし...
Mistral Large 4とは?1兆パラメータMoE × 1Mコンテキストを徹底解説【価格・性能比較つき】
Mistral Large 4とは?1兆パラメータMoE × 1Mコンテキストを徹底解説【価格・性能比較つき】 はじめに:1兆パラメータなのに「安い」モデルが出た 2026年10月、Mistralが投下した「Le Chonk」 2026年10月6日、フランスのAIスタートアップMistral AIは「Mistral Large 4」をパブリックプレビューとして公開しました。社内ニックネームは 「L...