はじめに
2026年10月21日、Palo Alto Networksの脅威インテリジェンスチーム Unit 42 が、PHPで新たに発見された2件の重大な脆弱性(CVE-2026-109618 / CVE-2026-109619)に関する脅威ブリーフを公開しました。どちらもリモートコード実行(RCE)につながる深刻なもので、CVSS 4.0で9.2(Critical)と評価されています。
このブログもWordPressで動いていて、その裏側はPHPです。他人事ではないので、自分用のメモも兼ねて要点を整理してみます。
脆弱性の概要
2件ともPHP本体(php-src)の問題で、PHP Groupが2026年10月21日にアドバイザリを公開しています。共通する背景は、PHPがメモリ不足(OOM)などの致命的なエラーから脱出するために使っている longjmp() の挙動です。
CVE-2026-109618: OOM時の未初期化メモリ
PHPはメモリ不足(OOM)に陥ると、longjmp() で現在の処理コンテキストを抜けてリクエストの処理を中断します。ところが一部の処理ではこのシナリオが考慮されておらず、メモリ確保の前にリクエストメモリが未初期化のまま残されてしまうことがあります。リクエスト終了時のクリーンアップ処理が、この未初期化メモリを読み取ったり分岐条件に使ったりする可能性があり、複数のOOM戦略によってこの状態を安定して誘発できるため、攻撃者は意図的にメモリ枯渇を起こしてRCEに持ち込めます。
CVE-2026-109619: 解放済みメモリを参照し続けるグローバル状態
PHPのグローバル状態は、一時的にリクエストメモリを指すことがあります。一部のシナリオではこの状態が正しくリセットされない(またはリセット後に再設定されてしまう)ため、解放済みのリクエストメモリをグローバル状態が参照し続けることになります。後続のリクエストが、この初期化されていない古い状態を読み取ったり分岐条件に使ったりすることで、任意コード実行につながるというものです。
影響を受けるバージョン
PHPの公式情報では、次のバージョンが影響を受けます(いずれも記載のバージョン未満)。
- PHP 8.2.x → 8.2.35 未満
- PHP 8.3.x → 8.3.36 未満
- PHP 8.4.x → 8.4.27 未満
- PHP 8.5.x → 8.5.12 未満
根本的な対策は、修正済みバージョン(8.2.35 / 8.3.36 / 8.4.27 / 8.5.12)へのアップデートです。
現時点の状況
- Unit 42はPoC(概念実証コード)の存在を確認しています。
- Cortex Xpanseのテレメトリでは、公開インターネット上に2,260万件以上の潜在的に脆弱なPHPインスタンスが確認されています。
- 欧州の少なくとも1つの政府機関が、予防措置としてWebサイトを一時的にオフラインにしたとのことです。
- 記事の範囲では、実際の攻撃による侵害の確認報告はないようです。
CVSS 4.0の評価ベクトルは AV:N/AC:H/AT:P/PR:N/UI:N で、攻撃の成立には「複雑度:高」「前提条件あり」となっています。ただし攻撃経路はネットワーク経由・権限不要で、WebサーバーやCMSは世界中でPHPを使っているため、影響の裾野は非常に広いです。
どうすればいいか
- まずPHPのアップデート。修正版(8.2.35 / 8.3.36 / 8.4.27 / 8.5.12)へ更新します。レンタルサーバーやマネージドホスティングを利用している場合は、PHPバージョンの変更方法と対応予定を確認しましょう。
- PHPのバージョンは
php -vや phpinfo() のほか、WordPressなら管理画面の「ツール → サイトヘルス」で確認できます。 - Palo Alto Networksの次世代ファイアウォール利用環境では、2026年10月20日以降に配信されたThreat Preventionシグネチャ「543004」(Advanced Threat Prevention Plus / Frontier Virtual Patching)で攻撃をブロックできるとのことです。
まとめ
今回は longjmp() による致命的エラー処理という、PHPのかなり深い部分の問題です。アプリケーション側での回避は難しいため、PHP本体の更新が実質的な対策になります。WordPressサイトを運用している方は、ご自身の環境のPHPバージョンを一度確認してみてください。自分の環境もPHP 8.3系なので、8.3.36以降への更新を進めていきたいと思います。
【参照】