CVE-2026-115560 は、2026年10月23日に PHP セキュリティチームが公表した、特殊な設定で遠隔コード実行(RCE)につながりうる新しい脆弱性です。先に修正された php2shell(CVE-2026-109618・109619)とは別の脆弱性で、修正パッチはまだ出ておらず、PHP は次回の定期更新で直す方針です。やっかいなのは、php2shell を修正した版(8.5.12 など)に上げても、この CVE-2026-115560 は残る点です。一方で発動には通常とは異なる設定とアプリのコードの組み合わせが要るため条件は狭く、何より暫定の緩和策があります。すぐに更新できないときの考え方はWAFによる仮想パッチにもまとめていますが、今回は PHP 自身が設定1つでの緩和を案内しています。この記事は、何が起きたか・発動の3条件・php2shell との違い・いますぐの緩和と確かめ方を、報道の一次整理と実機点検で整理します。依存する実行環境の脆弱性への備えはサプライチェーン攻撃とは|手口・防御ツール比較・npm 12の新機構まで実践解説も参考にしてください。
CVE-2026-115560何が起きたか
php2shell とは別の、未修正の PHP RCE
-
10/21
php2shell の修正版が公開
CVE-2026-109618・109619(8.5.12 ほか)
-
10/23
別の RCE を公表(未修正)
CVE-2026-115560。修正版 8.5.12 でも影響
-
緩和
upload_progress を無効化
session.upload_progress.enabled=0 を暫定で案内
-
修正
次回の定期更新で修正予定
影響版・深刻度はまだ未公表
-
現状
115560 の実環境悪用は確認なし
発動に狭い条件が必要
30秒でわかる
- ・何が:php2shell とは別の未修正 PHP RCE(CVE-2026-115560)。修正版 8.5.12 でも影響
- ・いつ危ない:3条件すべて(serialize_handler の切り替え+upload_progress 有効)が揃うときだけ。条件は狭い
- ・いますぐ:session.upload_progress.enabled=0 にして全ワーカー再起動。php2shell で設定済みなら追加対応は不要
- ・修正:次回の定期更新で。実環境の悪用は現時点で確認なし
まずやること
・session.upload_progress.enabled=0 を php.ini・PHP-FPM のプール・Apache の設定で入れ、全ワーカーを再起動する
・php2shell(CVE-2026-109619)対策で既に 0 にしているなら、追加対応は不要
・アプリが ini_set('session.serialize_handler', 'php') をしていないか探す(していなければこの経路の心配は薄い)
CVE-2026-115560 とは:php2shell とは別の、未修正の PHP RCE
10月21日に修正された php2shell(CVE-2026-109618・109619)は、未認証で到達しうる RCE で、修正版へ上げれば直りました。今回の CVE-2026-115560 は、それとは別の脆弱性です。PHP は、特殊な設定で RCE につながりうるとして10月23日に公表し、修正パッチはまだ出ていません。影響を受けるバージョンや深刻度スコアはまだ公表されておらず、完全な勧告は次回のリリースと一緒に出る見込みです。
重要なのは、php2shell を修正した版(8.5.12 など)でも、この CVE-2026-115560 は影響するという点です。「10月21日の更新で直ったはず」と考えて更新を済ませた環境でも、別途の対応が必要になります。PHP が 115560 と php2shell(CVE-2026-109619)で根本原因を共有するかどうかは、現時点では明らかにしていません。
発動に必要な3つの条件(なぜ「狭い」のか)
この脆弱性が怖い経路になるのは、次の3つがすべて揃ったときだけです。ひとつでも欠ければ、この経路では影響しません。
ALL THREE NEEDED発動の前提
3つがすべて揃うと影響する
-
1.config の serialize_handler が php_binary/php_serialize
既定の php では該当しない
-
2.アプリが ini_set で php に切り替える
session_start() を呼ぶ前に
-
3.session.upload_progress が有効
既定で ON
・設定で session.serialize_handler が php_binary か php_serialize になっている(既定の php では該当しません)
・アプリが実行時に ini_set() でそれを php に切り替え、その後 session_start() を呼ぶ
・session.upload_progress が有効(既定で ON)
この「設定を特殊な値にしておき、アプリ側で実行時に切り替える」という組み合わせは、通常の構成ではあまり見られません。PHP が悪用に『通常とは異なる設定とアプリケーションコードの組み合わせが必要』としているのはこのためで、だから条件は狭く、現時点で実際の悪用も報告されていません。
とはいえ、3つのうち「upload_progress が有効」は既定で ON なので、実質は残り2つ、とくに「アプリが実行時に serialize_handler を php に切り替えているか」が分かれ目になります。古いコードや、セッションの保存形式を途中で変える処理を持つアプリでは、知らずに当てはまっていることがあります。自分のアプリがこの組み合わせに該当しないかは、後述の検知で確かめておく価値があります。なお、攻撃の具体的な手順やコードはここでは扱いません。防御に必要なのは、前提条件を知って自分の露出を見極め、緩和を入れることです。
php2shell との違い(修正版でも影響する)
同じ session.upload_progress が関わるため混同しやすいので、php2shell との違いを整理します。
TWO PHP RCESphp2shell との違い
別の CVE。片方は修正済み、115560 は未修正
php2shell
CVE-2026-109618・109619
- 修正済み(8.5.12 ほか)
- 未認証で到達しうる
- 更新で直る
CVE-2026-115560
別の CVE
- 未修正(次回更新で修正予定)
- 修正版 8.5.12 でも影響
- 発動に3条件が必要で狭い
| 観点 | php2shell(109618・109619) | CVE-2026-115560 |
|---|---|---|
| 修正の状況 | 修正済み(8.5.12 ほか) | 未修正(次回更新で修正予定) |
| 修正版での影響 | 更新すれば解消 | 修正版 8.5.12 でも残る |
| 到達のしやすさ | 未認証で到達しうる | 3条件が必要で狭い |
| 同じ緩和が効くか | upload_progress.enabled=0 が有効 |
upload_progress.enabled=0 が有効 |
ポイントは、両方に同じ緩和(session.upload_progress.enabled=0)が効くこと。だから php2shell 対応でこの設定を 0 にしていれば、115560 のためにあらためて何かをする必要はありません。逆に、php2shell では更新だけで済ませて緩和設定を入れていない場合は、今回この設定が必要になります。
いますぐやる緩和と、自分が影響するか確かめる
GOTCHAS勘違いしやすい点
修正版でも影響。だが今すぐ緩和できる
こう思いがち
実際は
こう思いがち: 8.5.12 に上げたから安全
実際は: 115560 は修正版でも影響。別途の緩和が要る
こう思いがち: パッチが出るまで打つ手なし
実際は: upload_progress=0 で今すぐ塞げる(全ワーカー再起動)
こう思いがち: php2shell 対応とは別に何か要る
実際は: php2shell で upload_progress=0 済みなら追加対応は不要
緩和は設定1つです。session.upload_progress.enabled=0 を、php.ini・PHP-FPM のプール・Apache の設定で入れ、すべてのワーカーを再起動します。ホスト・コンテナイメージ・FPM プールごとに確認してください。アップロードの進捗バーを使っているアプリは、この設定で動かなくなる点に注意します。自分の環境の状態と、危ない書き方をしていないかは、次で確かめられます。
# この環境の設定(upload_progress が ON か、serialize_handler は何か)
php -r 'echo "upload_progress=", ini_get("session.upload_progress.enabled"), " / handler=", ini_get("session.serialize_handler"), "\n";'
# アプリが実行時に serialize_handler を php に切り替えていないか探す
grep -rnE "ini_set\(['\"]session\.serialize_handler['\"]" . 2>/dev/null
これは判定ではなく構成の確認で、この結果だけでは安全とは言えません。フレームワークやライブラリが内部でハンドラを切り替えている場合までは、この2つでは拾い切れないからです。確実な対策は、緩和を入れたうえで、修正版が出たら各環境を更新することです。
当サイトで確かめたこと(2026-10-24)
この記事を書いた環境の PHP は 8.3.6 でした。php -r で既定値を見ると、session.upload_progress.enabled は 1(ON)で、緩和にはこれを明示的に 0 にする必要があると分かります。一方 session.serialize_handler は既定で phpで、発動条件の1つ「config が php_binary か php_serialize」は既定では満たされません。これが「条件が狭い」と言われる理由です。掲載した検知 grep は、ini_set('session.serialize_handler', 'php') を含むファイル(陽性)で該当行を検出・終了コード0、含まないファイル(陰性)で検出なし・終了コード1になることを確認しました。脆弱性を発動させる操作は一切行っていません。
影響範囲とこれから
影響範囲について公式に示されているのは、特殊な設定とアプリのコードの組み合わせで RCE につながりうること、修正版 8.5.12 を含む環境でも影響すること、修正は次回の定期更新の予定であることです。影響を受けるバージョンの一覧や深刻度スコアは、2026年10月24日時点ではまだ公表されていません。115560 の実環境での悪用は、現時点で報告されていません。
関連して、修正済みの php2shell(CVE-2026-109618・109619)には、公開前から攻撃の試みがあったと報告されています。ある観測では公開の数日前から試行が見られ、複数の攻撃者の関与が示唆される一方、侵害を確認していないとする説明もあります。つまり「条件が狭い・まだ悪用がない」ことは油断の理由にはならず、緩和を入れて修正版を待つのが堅実です。とくに未修正の脆弱性は、完全な勧告や影響版の一覧が後から出てくることが多いので、続報を追いながら、まず手元で打てる緩和を先に入れておくのが安全です。更新できない間に時間を稼ぐ考え方はWAFによる仮想パッチに、php2shell そのものの詳しい対応はPHP の脆弱性 php2shell の記事にまとめています。
参照ソース
・PHP shares mitigation for new and unpatched RCE vulnerability(BleepingComputer) — 公表内容・暫定緩和・発動条件(2026-10-24 確認)
・PHP CVE-2026-115560 only hits apps that switch serialize_handler to php at runtime(lilting.ch) — 発動の3条件の整理と独立検証
・PHP CVE-2026-115560: unpatched session upload progress RCE explained(safeguard.sh) — 緩和手順と修正版での影響
・PHP の脆弱性 php2shell(CVE-2026-109618・109619)の記事(当サイト) — 同じ緩和が関わる別の PHP RCE





