PHP、緊急のPHP2Shellアップデートの数日後に未修正の別のRCE脆弱性を開示

PHP、緊急のPHP2Shellアップデートの数日後に未修正の別のRCE脆弱性を開示

管理者として知っておくべきCVE-2026-115560とランタイムセッションハンドラーの脆弱性

システム管理者が極めて深刻なPHP2Shell脆弱性に対する緊急パッチの適用作業を終えようとしていた矢先、PHP開発チームから新たなセキュリティアドバイザリが公開されました。新たに特定されたリモートコード実行(RCE)の脆弱性は現行エンジンにおいて未修正のままであり、Webインフラ全体で直ちに設定の見直しを行う必要があります。

本日は2026年10月24日です。過去72時間にわたり、セキュリティチームは10月21日に開示された2つの深刻な脆弱性のパッチ適用に追われてきました。現在、CVE-2026-115560として追跡されているこの新たな開示は、緊急アップデートではカバーされていなかった追加の攻撃対象領域(アタックサーフェス)をもたらします。サーバー、コンテナ、または共有ホスティング環境のいずれであっても、本番環境でPHPを実行している場合は、この欠陥の仕組みを理解し、推奨される緩和策を適用することが不可欠です。

CVE-2026-115560とは何か?

新たに開示された問題は、PHPのセッションアップロード進捗メカニズムと、セッション設定に対するランタイム時の動的変更に関係しています。

ユーザーがファイルをアップロードする際、PHPは session upload progress(セッションアップロード進捗)と呼ばれる組み込み機能を通じて転送進捗をリアルタイムに追跡できます。これが有効な場合、PHPは受信ファイル転送をインターセプトし、アプリケーションスクリプトが実行される前に進行状況データをユーザーのセッションに直接書き込みます。

標準的な条件下では、この機能は安全に動作します。しかし、実行中にアプリケーションがその session serialization handler(セッションシリアライズハンドラー) を動的に変更したときに脆弱性が発生します。シリアライズハンドラーは、PHPが保存のために配列やオブジェクトをどのようにエンコードおよびデコードするかを決定するもので、次のような形式をサポートしています: php (デフォルト)、 php_binary、および php_serialize.

公式のセキュリティ通知によると、CVE-2026-115560が悪用されるには以下の3つの条件が重なる必要があります:

  1. サーバーが最初に session.serialize_handler を次のいずれかに設定している: php_binary または php_serialize.
  2. アプリケーションが実行中にその設定を php へ ini_set() を使用して、次の関数の呼び出し前に変更している: session_start().
  3. サーバー上でセッションアップロード進捗(Session upload progress)が有効化されたままである。

PHPはスクリプトの実行前に初期ハンドラーを使用してアップロード追跡データを書き込むため、動的にハンドラーを切り替えるとセッション開始時に深刻なシリアライズの不一致が発生します。これにより、攻撃者は細工された入力を送り込み、デシリアライズ時にメモリ破損を引き起こしてリモートコード実行を達成することが可能になります。

これまでのPHP2Shell脆弱性と何が異なるのか

CVE-2026-115560は、10月21日にリリースされた緊急アップデートの不備によるものではありません。それらのアップデートは、次の通称で呼ばれる2つの独立した重大な脆弱性に対処したものでした: PHP2Shell.

影響を受けるリスクを正しく評価するには、これら3つの異なる問題を区別して理解する必要があります:

1. CVE-2026-109618:メモリ不足(OOM)クリーンアップ時のRCE

この脆弱性は、PHPがリクエスト処理中にメモリ枯渇(Out-of-Memory)に遭遇した際に発生します。リクエストのデータ構造が部分的に初期化された状態でメモリ不足に陥ると、PHPはリソースをクリーンアップするために実行を中断します。このクリーンアップの処理中にランタイムが無効なメモリ状態を処理してしまい、攻撃者がWebワーカーアカウントの権限でリモートコード実行を達成することを可能にします(特にApacheの mod_php環境で顕著です)。PHPバイナリを更新することだけが、唯一の完全な修正策となります。

2. CVE-2026-109619:古い状態の残留とUse-After-Free

この問題は、PHP-FPMのような永続環境においてHTTPリクエスト間でワーカープロセスが再利用されることに起因します。ワーカーが以前のリクエストのメモリを解放したものの内部ポインタのリセットに失敗した場合、同じワーカーによって処理される後続のリクエストが古いメモリ領域にアクセスしてしまう可能性があります。これにより、 use-after-free(解放後メモリ使用) の状態が発生します。アップロード進捗の追跡はトリガーの1つに過ぎず、根本的なバグはランタイムの複数の実行パスに及んでいます。

3. CVE-2026-115560:ランタイムハンドラーのデシリアライズ脆弱性

これまでのメモリ破損バグとは異なり、この欠陥はアプリケーションのブートストラップロジックが実行の途中でセッション形式を変更することに依存しています。公式パッチは定期リリースサイクルで提供される予定であるため、管理者はシステムを保護するにあたって10月21日のバイナリだけに依存することはできません。

事前悪用の痕跡:10月17日まで遡った監査の必要性

PHP側はCVE-2026-115560の開示前に積極的な悪用は確認されていないと発表していますが、先述のPHP2Shell脆弱性については、野生環境(インザワイルド)で活発な攻撃試行が確認されていました。

Amazonの脅威リサーチャーの報告によると、同社のMadPotハニーポットネットワークにおいて、公式発表および緊急パッチリリースの丸4日前にあたる10月17日に、PHP2Shellを標的としたエクスプロイト試行が捕捉されていました。このトラフィックは商用匿名化ネットワークから送信されていました。

この脅威インテリジェンスは、運用面で直ちに対処すべき影響を意味します:

  • パッチの適用は将来の攻撃からシステムを保護しますが、すでに侵入が発生しているかどうかまではわかりません。
  • アクセスログ、ファイルの改ざん、または異常なプロセス実行に関するフォレンジック調査は、開示日から始めるのではなく、少なくとも2026年10月17日まで遡って実施する必要があります。

段階的な緩和策および堅牢化ガイド

CVE-2026-115560に対する公式エンジンパッチはまだ準備中であるため、管理者は10月21日のアップデートのロールアウトを完了させつつ、直ちに設定による緩和策を適用する必要があります。

ステップ1:php.iniでセッションアップロード進捗を無効化する

アップロード進捗を無効化することで、通常のファイルアップロードを無効化することなくCVE-2026-115560の攻撃経路を遮断できます。通常のアップロード機能は正常に動作し続け、PHP内部のセッショントラッカーのみが無効化されます。

ディレクティブの値を 0 に設定してください(適用中の php.ini またはFPMプール設定内):

; Disable PHP session upload progress tracking
session.upload_progress.enabled = 0

有効な設定ファイル全体で設定を確認します:

# Check if session upload progress is enabled
php -i | grep -E "session.upload_progress.enabled"

コマンドの出力結果が session.upload_progress.enabled => Off => Offであれば、緩和策は有効に機能しています。

ステップ2:PHP-FPMおよびWebサーバーデーモンを再起動する

PHPはワーカープロセスが生成される際に設定ディレクティブを読み込みます。そのため、 php.ini を編集しても、再起動するまで実行中のワーカーには反映されません。

PHP処理サービスを再起動します:

# For systems running PHP-FPM with systemd
sudo systemctl restart php*-fpm

# For systems running Apache with mod_php
sudo systemctl restart apache2 || sudo systemctl restart httpd

# Verify that worker processes refreshed their start times
ps -eo pid,lstart,cmd | grep -E "php-fpm|apache2|httpd" | grep -v grep

ステップ3:ランタイムハンドラー変更の有無についてアプリケーションコードを監査する

この脆弱性が悪用されるには、アプリケーションが実行時に session.serialize_handler を ini_set()を使って動的に切り替えている必要があります。コードベースをスキャンし、アプリケーションコードや導入済みベンダーライブラリがこの切り替えを行っていないか確認してください:

# Search for runtime serialization handler changes
grep -rn "session.serialize_handler" /var/www/html/ 2>/dev/null

検索の結果、 ini_set('session.serialize_handler', ...)の該当箇所が見つからなければ、アプリケーションは脆弱なランタイム遷移を実行していません。ベンダーライブラリで特定のハンドラーが必要な場合は、 php.ini 内で静的に設定し、次の呼び出し前に動的に変更するのは避けてください: session_start().

ステップ4:10月17日以降のシステムログおよびWebログを調査する

ハニーポットデータによって特定されたゼロデイ期間中にシステムが標的とされていなかったことを確認するため、Webログを監査します:

# Check web server logs for suspicious session upload parameters
sudo zgrep -E "PHP_SESSION_UPLOAD_PROGRESS|php_serialize" /var/log/nginx/*access.log* /var/log/apache2/*access.log* 2>/dev/null | head -n 30

# Check for unexpected PHP files created since October 17
sudo find /var/www/html/ -type f -newermt "2026-10-17" -name "*.php" -ls

検証されていない不審なPHPスクリプトや、Webワーカーアカウントから生成された予期せぬバックグラウンドプロセスがないか調査してください。

まとめ

CVE-2026-115560の開示は、重要なセキュリティの教訓を再認識させるものです。それは、ソフトウェアパッチの適用と設定による堅牢化が連携して機能しなければならないということです。PHP2Shellのメモリバグを解消するために10月21日の緊急パッチの展開を完了させる必要がある一方で、セッションアップロード進捗を無効化することは、この最新のRCE攻撃ベクトルに対する即座の防御策となります。これら両方の対策を講じることで、アップストリームからバグ修正リリースが届くまでWebインフラの耐障害性を維持できます。

メリット

  • セッションアップロード進捗を無効化することで、バイナリの再コンパイルを待つことなく直ちに保護を得られる。
  • 通常のファイルアップロードは正常に動作し続けるため、アプリケーションのコア機能が維持される。
  • 不要なレガシーセッションフックを排除することで、全体的な攻撃対象領域(アタックサーフェス)を削減できる。
  • 10月17日までログを遡って監査することで、開示前の偵察活動やWebシェルの設置を検知できる。
  • リスクの高いランタイム環境の動的変更よりも、静的で決定論的なセッション設定を促進できる。

デメリット

  • アップロード進捗を無効化すると、PHP内部のセッション配列を問い合わせるカスタムUIプログレスバーが破損する。
  • 分散されたサーバー群全体で設定の変更とデーモンの再起動を調整する必要がある。
  • 設定による緩和策では根本的なメモリバグに対処できないため、緊急アップデートの適用が依然として必須である。
  • 難読化されたベンダーパッケージ内の動的な ini_set 呼び出しを特定するには、専用のコード監査が必要となる。

注意

本記事は教育目的のみを意図したものです。システムコマンド、設定ディレクティブ、およびファイルパスは、ご使用のLinuxディストリビューション、PHPバージョン、およびホスティング構成に合わせて適宜変更する必要があります。本番インフラストラクチャを変更する前に、必ずステージング環境で設定変更をテストし、アップストリームのプロジェクトメンテナによるセキュリティアドバイザリを確認してください。

よくある質問(FAQ)

  • CVE-2026-115560とは何ですか? — セッションアップロード進捗機能と、実行時のセッションシリアライズハンドラーの変更との間の不一致によって引き起こされる、PHPの新たに開示されたリモートコード実行(RCE)の脆弱性です。
  • CVE-2026-115560は最新のPHPリリースで修正されていますか? — いいえ、現行ビルドにおいてこの欠陥は未修正のままであり、PHPプロジェクトは次回の定期リリースサイクルで公式な修正を提供する予定です。
  • 管理者は今すぐどのようにサーバーを保護できますか? — 管理者は session.upload_progress.enabled = 0 を各 php.ini ファイルに設定し、すべてのPHPワーカーサービスを再起動する必要があります。
  • アップロード進捗を無効化すると、ユーザーによるファイルのアップロードができなくなりますか? — いいえ、HTTP POSTによる通常のファイルアップロードは引き続き正常に動作します。無効化されるのはPHP内部のリアルタイムセッション進捗トラッカーのみです。
  • この新たな脆弱性は、10月21日の緊急アップデートを適用したシステムにも影響しますか? — はい、10月21日のアップデートは先述のPHP2Shellメモリ欠陥を修正したものであり、CVE-2026-115560は設定による緩和策が必要な別の問題です。
  • なぜセキュリティチームは10月17日まで活動を遡って調査しているのですか? — AmazonのMadPotネットワークからの脅威インテリジェンスにより、公式発表の4日前にPHP2Shellを標的とした攻撃の偵察試行が観測されたため、調査すべき対象期間が拡大されたためです。
  • CVE-2026-115560の悪用にはどのような条件が必要ですか? — アプリケーションが非標準のシリアライズハンドラーで開始され、それを php に ini_set() 経由で session_start()の呼び出し前に変更し、かつセッションアップロード進捗が有効になっている必要があります。

タグ

#php #cve2026115560 #php2shell #cybersecurity #vulnerability #infosec #sysadmin #devops #websecurity #patchmanagement

Free field guide

Prompt-Injection Defense Checklist

The controls that actually reduce the blast radius when your app feeds untrusted text to an LLM. Enter your email — you'll get the PDF instantly, plus new posts on AI, security & Linux.