Skip to main content

PHPが認証不要の重大なRCE 2件を修正(CVE-2026-109618、CVE-2026-109619):[CVE-2026-115560に関する更新]

illustration hero ai

2026年10月26日

0 分で読めます

2026年10月21日(水)14:00 UTC、PHPプロジェクトは、CVSS v4.0でいずれも9.2と評価された、未認証のリモートコード実行を可能にする2件の重大な脆弱性を修正するため、PHP 8.5.12、8.4.27、8.3.36、8.2.35をリリースしました。PHPセキュリティチームは「完全な緩和策はありません。安全な選択肢はアップデートのみです」と推奨しています。

これはComposerパッケージではなく、PHPランタイムのバグです。そのため検出と修正の方法が異なります。以下で詳しく説明します。

要点 Webリクエストを処理するPHP(PHP-FPM、mod_phpを使用するApache、php-cgi、FrankenPHP、LiteSpeed)を実行している場合は、今すぐ8.5.12、8.4.27、8.3.36、または8.2.35にアップデートしてください。8.1以前を使用している場合は、ディストリビューションまたはLTSベンダーのバックポート版を入手するか、アップグレードしてください。

何が起きたのか

時刻はすべてUTCです。

  • 10月20日: PHPセキュリティチームは、10月21日14:00 UTCに予定されている重大なセキュリティリリースの事前通知を公開しました。CVSS v4.0で9.2と評価された2件の脆弱性を修正するもので、詳細が漏洩した場合や実環境での悪用が確認された場合には、予定を早めてリリースする権利を留保するとしています。

  • 10月21日、14:00 UTC以前: Snykは、両方のCVEに関するアドバイザリ(SNYK-UNMANAGED-PHP-21347795(CVE-2026-109618)およびSNYK-UNMANAGED-PHP-21347796(CVE-2026-109619))を公開しました。お客様に必要な対応をお知らせするとともに、修正バージョンが判明した時点で、監視対象のプロジェクトに検出結果が表示されるようにするためです。

  • 10月21日、14:00 UTC: PHPセキュリティアドバイザリと修正済みの4つのリリースが公開されました。約30分以内に、影響を受けるバージョン範囲や修正バージョンなど、関連するすべての詳細をSnykのアドバイザリに反映しました。

  • 10月21日以降: 事前にパッチを受け取っていたLinuxディストリビューションが、独自のアドバイザリを公開し始めました。Snykは、SNYK-UBUNTU2604-PHP85-21373920など、各アドバイザリの公開に合わせて情報を掲載しています。最新の一覧はCVE-2026-109618およびCVE-2026-109619で確認できます。

10月23日更新:session.upload_progress.enabled=0を維持してください

10月23日、PHPプロジェクトはCVE-2026-115560に関する情報提供アドバイザリを公開しました。このCVEは予約済みですが、まだ割り当てられていません。アドバイザリでは、CVE-2026-109619の部分的な回避ベクトルについて説明しています。これを防ぐ設定session.upload_progress.enabled=0は、すでにCVE-2026-109619の緩和策として記載されていました。

悪用の前提条件はまれであり、ほとんどのデプロイメントには当てはまらない可能性が高いため、PHPは緊急の修正を急いでいません。アプリケーションでsession.serialize_handlerをphp_binary or php_serializeに設定し、セッションのアップロード進捗が有効な状態でsession_start()を呼び出す前に、実行時にini_set()でphpに切り替える必要があります。実行時にシリアライゼーションハンドラーを変更しないアプリケーションでは、この機能を有効のままにできます。

脆弱性について

どちらもPHPエンジンのリクエスト処理ライフサイクルに存在するため、アプリケーションコードが実行される前に到達可能です。このことも、これらの脆弱性が広範囲に及び、危険である理由の一つです。

技術的な詳細

CVE-2026-109618、メモリ不足時の破損によるRCE: メモリ不足の処理によって、内部のリクエストデータが部分的にしか初期化されていない状態でPHPが中断されることがあります。その後のリクエストクリーンアップ処理が、不正なデータを有効なものとして扱います。悪意あるリクエストによってワーカーのメモリ上限に達するよう仕向けられると、攻撃者はこの中断を引き起こせます。

CVE-2026-109619、古いグローバル状態によるRCE: リクエストが所有する内部状態が、基盤となるメモリの解放後も残ることがあります。同じワーカーが処理する後続のリクエストが、通常の初期化でリセットされる前に、その古い状態を使用する可能性があります。長時間稼働するワーカーモデルでは、これはリクエストをまたいだuse-after-freeにあたります。

これらのバグは、30年にわたって本番環境で使われてきたランタイムにおいて、AIの支援を受けて発見されました。LLMやエージェントが普及した今も、サーバーは稼働し続けています。そして、これらを発見したのと同種のモデルを攻撃者も手にしています。これが、エージェント自身だけでなく、エージェントが実行するアプリケーションもAIで保護する、SnykのEvo by Snykの前提です。AIを活用した脆弱性の発見が、PHP2Shellがこの種の最後の脆弱性ではない理由であり、対応のタイムラインが今や時間単位で測られる理由でもあります。

影響を受ける対象

Webリクエストを処理するすべてのPHPインストールがリスクにさらされています。PHP-FPM、mod_phpを使用するApache、php-cgi、FrankenPHP、LiteSpeedなどが対象です。mod_phpを使用するApacheが最も脆弱で、未認証のリクエスト1件でアプリケーションコードの実行前に攻撃が引き起こされることが実証されています。

PHP 8.1以前はPHPプロジェクトから更新を受け取れなくなっているため、パッチ未適用の8.1、8.0、7.4のインストールには、上流からの修正がありません。深刻度を踏まえ、PHPセキュリティチームはソースからビルドする場合やLTSベンダーを利用していない場合に向けて、7.4、8.0、8.1用の最小限のソースバックポートを公開しました。

今すぐ行うべきこと

  1. アップデートしてください。 修正済みバージョンはPHP 8.5.12、8.4.27、8.3.36、8.2.35です。8.2は2026年12月31日にサポート終了を迎えるため、8.2を使用している場合は、次のバージョンへのアップグレードを計画するタイミングでもあります。

  2. ベンダーの情報を確認してください。 LinuxディストリビューションとLTSベンダーは、リリース前にパッチを受け取っています。ソースからのビルドを待つのではなく、更新済みのパッケージを入手してください。パッチ適用済みのディストリビューションビルドでは、バージョン番号が古いままの場合があります。ディストリビューションのアドバイザリやパッチレベルも確認してください。

  3. 実際に稼働しているものを確認してください。 各ホストとイメージのPHPバージョン(php -vまたはイメージタグ)を確認してください。スキャン結果だけでは、インストールが修正済みかどうかは確認できません。

  4. 今日アップデートできない場合は、 特定の攻撃経路への露出を抑える緩和策をPHPが提示していますが、インストールが安全になるわけではありません。アプリケーションが上書きできない場所でmemory_limit=-1を設定する、post_max_sizeを低く設定する、session.upload_progress.enabled=0に設定してすべてのワーカーを再起動する、そして8.5ではfatal_error_backtraces=0に設定する方法があります。それぞれの注意事項は、該当するアドバイザリを確認してください。

  5. アップデートの有無にかかわらず、 アプリケーションが実行時にsession.serialize_handlerを切り替える場合は、次回の通常のバグ修正リリースまでsession.upload_progress.enabled=0を維持してください。詳細は上記の更新情報をご覧ください。

  6. PHP 8.1以前を使用している場合は、 サポート対象バージョンにアップグレードするか、ディストリビューションまたはLTSベンダーのバックポート版を入手してください。PHPが提供する7.4、8.0、8.1用のソースバックポートは、ソースからビルドするチーム向けの最終手段です。

オープンソース側の対応

PHPセキュリティチームは、固定のリリース時刻と深刻度を含む通知を1日前にエコシステムへ提供し、悪用に関する詳細は公開しませんでした。パッケージの修正をソースのリリースと同時に公開できるよう、Linuxディストリビューションにパッチを事前共有しました。サポート対象外バージョン(7.4、8.0、8.1)向けのバックポートを公開しました。また、人気のボランティア運営リポジトリ(rpms.remirepo.net)の利用者には、初日には更新されないことと、代わりに何をすべきかを伝えました。さらに、各設定で防げないことも含め、緩和策の指針を非常に明確に示しました。

ボランティアが運営するプロジェクトが適切に対応した場合の、協調的な脆弱性情報開示とはこういうものです。公開されたスケジュールがあれば下流の関係者も準備できるため、Snykはリリース前にアドバイザリを公開し、リリース後まもなく内容を完成させることができました。

Snyk SCAの動作

Snyk Open Sourceは、composer.jsonやcomposer.lockなどのマニフェストファイルやビルドファイルにアプリケーションが宣言している内容を読み取ります。PHPインタープリターは宣言された依存関係ではありません。Dockerfile、ディストリビューションパッケージ、プラットフォームイメージ、または手動でインストールされます。composer.jsonの"php": ">=8.2"という制約から分かるのは、アプリケーションが受け入れるPHPのバージョンであり、実際にデプロイされているバージョンではありません。

Snyk PlatformでPHPの露出状況を把握する方法

利用するもの

CVE-2026-109618およびCVE-2026-109619で確認できる内容

Snyk Open Source(CLIまたはSCM連携)

PHPランタイムはマニフェストファイルに通常の依存関係として記載されないため、CVE自体は報告されません。PHP/Composerプロジェクトでは、Snykはアプリケーションが宣言している依存関係を表示します。これにより、PHPアプリケーションであるプロジェクトを特定しやすくなります。宣言されたPHPのバージョン制約から、実際にデプロイされているバージョンは分かりません。

Snyk C/C++ Unmanagedスキャン

プロジェクト内にPHPランタイムが存在する場合、アドバイザリが報告され、CVE IDで絞り込むことができます。

Snyk Container

LinuxディストリビューションのパッケージからインストールされたPHPは、ディストリビューションがアドバイザリを公開した後に報告されます。サポート対象ディストリビューションの一部はすでにアドバイザリを公開しており、テスト結果で確認できます(例:SNYK-RHEL10-PHP84-21392647、SNYK-UBUNTU2604-PHP85-21373920)。その他の情報も各ディストリビューションの公開に合わせて取り込んでおり、CVE-2026-109618およびCVE-2026-109619から確認できます。公式のphp: Dockerイメージを含む、ソースからコンパイルされたPHPはSnyk Containerでは検出されません。

Snyk API & Web

DASTは外部から稼働中のアプリケーションを調査・テストし、テクノロジースタックを特定します。お客様のアプリケーションがphp2shellにさらされている場合、それを検出して報告します。

ゼロデイレポート

Snyk Zero Dayレポートは、お客様のプロジェクトとアドバイザリを照合します。そのため、一覧に表示されるのは「Unmanagedスキャン」またはディストリビューションパッケージのContainerスキャンでスキャンされたプロジェクトのみです。Open Sourceのみのプロジェクトでは、結果は表示されません。

Snyk API & WebでPHPの攻撃対象領域を見つける

パッチを適用するには、まず対象を把握する必要があります。Snyk API & WebのDiscoveryタブでは、ドメイン上で見つかったアセットを列挙し、テクノロジースタックを特定します。Discoveryを開き、TechフィルターをPHPに設定すると、PHPが特定されたすべてのホストとエンドポイントが、リスク評価、スコア、最終確認日とともに表示されます。すぐにスキャンするか、ターゲットとして追加できます。

PHPアセットで絞り込んだSnyk API and Web Discoveryのダッシュボード。中・高・重大のリスク評価を受けたターゲットが表示されています。

同じTechフィルターはTargetsリストでも利用でき、追加済みのアプリケーションも同じ方法でPHPに絞り込めます。

PHPテクノロジーで絞り込まれたSnyk Targetsダッシュボード。重大および高リスクのターゲットと、スキャン状況および検出結果を表示。

PHPのバージョンは分かりませんが、確認すべき場所が分かります。これは修正に向けた重要なステップです。

Snyk API & Webで脆弱性をテストする

Snyk API & Webでは、アプリケーションやAPIをスキャンして、PHP2Shellの脆弱性の影響を受けるかどうかを検出できます。

現在、フルプロファイルでスキャンするとPHP2Shellの脆弱性もテストされます。また、PHP2Shellのみをテストするカスタムスキャンプロファイルを作成することもできます。これにより、アプリケーションが脆弱かどうか、または修正が完了したかどうかをすばやく確認できます。

「PHP RCE」という名前のSnyk API & Webのスキャンプロファイル。包括的なペイロードが設定され、重大な脆弱性「PHP2Shell」が選択されています。

Snykの対応

  • 両方のCVEに関するアドバイザリは、PHPの14:00 UTCのリリース前に公開され、リリースから約30分以内に影響を受けるバージョンと修正の詳細を反映しました。

  • CVE-2026-115560についてもアドバイザリを公開しました。詳細と修正が公開され次第、更新します。

  • 各Linuxディストリビューションの公開に合わせて、ディストリビューションのアドバイザリを取り込んでいます。UbuntuとRed Hatの情報は現在利用できます。

  • 今回の事象に関するゼロデイレポートは、UnmanagedおよびContainerプロジェクトで利用できます。

Snykのセキュリティリサーチチームは、常にこの情報開示を追跡し、新たな情報が入り次第アドバイザリを更新します。ご質問がある場合は、SnykのアカウントチームまたはSupportにお問い合わせください。

参考情報

レポート

2026年 エージェント型AI導入の現状:第3巻

承認済みモデルの一覧でわかるのは、導入されているモデルであり、それぞれのモデルがアクセスできる範囲ではありません。エージェントの監査をどこから始めればよいか、お悩みですか?

続きを読む

blog feature ai pink
Blog

PHP2Shellが最後ではない。次の脆弱性が最初に現れる場所

PHP2Shellは、エンジンレベルの欠陥がインターネットに公開されたアプリケーションをいかに速く危険にさらすかを示しました。次の脆弱性が公表される前に、外部からの資産把握、迅速なテスト、繰り返しの確認がなぜ重要なのかをご紹介します。