CVE-2026-109619 — 古いグローバル状態の再利用(use-after-free)によるリモートコード実行
概要
PHPのワーカー(リクエストを処理するプロセス)は、エラー・セッション・オブジェクト・拡張機能などのグローバルな状態を保持しています。本来は、あるリクエストのメモリを解放する前にこれらをリセットする必要がありますが、致命的エラー(メモリ不足を含む)などで処理が途中で打ち切られると、解放済みのメモリを指したまま状態が残ることがあります。
同じワーカーが処理する次のリクエストで、通常の初期化より前に動く処理(入力・設定・セッション・エラー処理など)がこの古い状態を使ってしまい(use-after-free)、ヒープの配置を工夫することで認証なしでのリモートコード実行につながります。公式アドバイザリでは、セッションのアップロード進捗(session.upload_progress、既定で有効)の経路と、PHP 8.5の致命的エラーのバックトレース(fatal_error_backtraces)の経路が確認されたとしています。
影響を受けるバージョン
- PHP 8.2 系: 8.2.35 未満(8.2.0 以上)
- PHP 8.3 系: 8.3.36 未満(8.3.0 以上)
- PHP 8.4 系: 8.4.27 未満(8.4.0 以上)
- PHP 8.5 系: 8.5.12 未満(8.5.0 以上)
影響を受ける構成: php.netは、Webリクエストを処理するすべてのPHP(PHP-FPM、Apacheのmod_php、php-cgi、FrankenPHP、LiteSpeed)が対象としています。リスクがもっとも高いのはmod_phpで、アプリケーションのコードが動く前に、認証なしのリクエストで攻撃が成立することが実証されています。
PHP 8.1 以前: php.netからの更新は提供されません(サポート終了)。ディストリビューションやLTSベンダーがバックポートを提供している場合があるため提供元に確認するか、サポート中のブランチへ移行してください。ソースからビルドする利用者向けに、PHPセキュリティチームが7.4・8.0・8.1用の最小限のバックポートを公開しています。
公式アドバイザリによると、mod_phpでの攻撃が確認されているほか、PHP-FPMでも通常の動的プールで、条件となるアプリケーションの処理がある場合に成立する経路が検証されています。
自分のPHPバージョンを確認する
- WordPress: 管理画面「ツール → サイトヘルス → 情報 → サーバー」の「PHPバージョン」
- レンタルサーバー: 管理画面(コントロールパネル)の「PHPバージョン設定」などのメニュー
- SSH:
php -v(CLI用。Webサーバー側と異なる場合があります)
PHPバージョンの確認方法を詳しく見る → / WordPressの場合 →
対策
- 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 以降へ更新してください(できれば各ブランチの最新リリース)。
- レンタルサーバーでは、事業者の公式のお知らせで更新状況を確認し、必要なら管理画面でPHPのバージョンを切り替えます(エックスサーバーの手順)。Linuxディストリビューションの更新パッケージは、各ディストリビューションで確認してください(php.netによると、ディストリビューションとLTSベンダーには事前にパッチが提供されています)。
- PHP 8.1 以前はphp.netの修正版がありません。サポート中のブランチへ移行するか、提供元のバックポートを確認してください。
- rpms.remirepo.net を使っている場合: php.netは、当日は更新が提供されないため、ディストリビューションのパッケージへの切り替えかソースからのビルドを推奨しています。
- 更新後は、PHP-FPMやWebサーバーを再起動して、すべてのワーカーが新しいPHPで動いていることを確認してください。
すぐに更新できない場合の緩和策(部分的)
session.upload_progress.enabled=0を設定し、すべてのワーカーを再起動します。php.ini、FPMプール、またはリクエストの解析より前に適用されるサーバー設定で行います。ini_set()やFPMの.user.iniには頼らないでください。確認済みのセッション経路は防げますが、ほかの派生経路は防げません。- PHP 8.5では
fatal_error_backtraces=0を設定し、すべてのワーカーを再起動します。確認済みの「致命的エラーのバックトレース」の経路だけを防ぎます。 - リクエストごとに適用される無効な設定や非推奨の設定で、初期化前に警告などを出すものを取り除きます。
error_reporting、display_errors、@で表示を隠しても効果はありません。 - 攻撃者が引き起こせる致命的エラーや実行時間切れ(コールバック、アップロード・インポート処理、後処理での失敗を含む)を修正します。
あわせてCVE-2026-109618の緩和策も確認してください。
よくある質問
CVE-2026-109619はどのバージョンが対象ですか?
PHP 8.2〜8.5の各ブランチで、8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 より前のバージョンが対象です。PHP 8.1以前はphp.netの修正版がありません。
session.upload_progress.enabled=0 にすれば安全ですか?
いいえ。確認済みのセッション経路は防げますが、ほかの派生経路は防げません。公式アドバイザリは、設定だけで完全に防ぐ一般的な方法はなく、修正版への更新だけが確実な対策だとしています。
エラー表示をオフにすれば防げますか?
いいえ。公式アドバイザリによると、警告を表示・記録するかを判断する前に古い状態にアクセスするため、error_reporting、display_errors、@ では防げません。
自分のサイトが該当するか確認できますか?
phpcheck.jpでサイトのURLまたはPHPバージョンを入力すると、このCVEに該当するかを無料で判定できます。
出典
- php-src Security Advisory GHSA-6wmf-4rv5-p3rp
- CVE-2026-109619 (CVE.org)
- php.net: Security advisory: Critical remote code execution vulnerabilities, update now
- PHP 8 ChangeLog
- www.php.net/ChangeLog-8.php#8.5.12
- www.php.net/ChangeLog-8.php#8.4.27
- www.php.net/ChangeLog-8.php#8.3.36
- www.php.net/ChangeLog-8.php#8.2.35
最終確認日: 2026-10-21