PHPPHPコード実行悪用確認

PHPの脆弱性PHP2Shell(CVE-2026-109618)|コード実行の対象バージョンと確認方法・修正版

公開 2026-11-02公表 2026-10-21資料確認 2026-11-02PHPの脆弱性 28件のまとめ
対象製品PHP
識別番号CVE-2026-109618・CVE-2026-109619
影響範囲PHP 8.5.12・8.4.27・8.3.36・8.2.35より前(Webのリクエストを処理するPHP。8.1以前はアドバイザリに記載なし)
修正情報8.5.12・8.4.27・8.3.36・8.2.35

PHP本体の脆弱性CVE-2026-109618・CVE-2026-109619(通称PHP2Shell)は、Webのリクエストを処理するPHPが、認証なしで遠隔からコードを実行されるおそれがあるものです。PHP公式が2026年10月21日(日本時間23時)に修正版を公開し、米CISAは10月26日(米国時間)に悪用を確認した脆弱性の一覧(KEV)に加えました。8.5.12・8.4.27・8.3.36・8.2.35より前の版が対象で、系列ごとにこの版以上へ上げます。[1][2][3][4]

この記事の要点
  • 対象は8.5.12・8.4.27・8.3.36・8.2.35より前のPHPで、修正版はこの4つです。PHP-FPM、mod_php、php-cgiなどWebのリクエストを処理するPHPが当てはまります。
  • 米CISAが10月26日にKEVへ追加しました。上げる前に、ログで攻撃の痕跡(PHP_SESSION_UPLOAD_PROGRESSを含むmultipartのリクエスト、メモリ上限のエラー)も確かめます。
  • OSのパッケージは番号が古いまま修正が入ります(Ubuntu 24.04は8.3.6-0ubuntu0.24.04.13)。php -vだけで判断せず配布元の修正版と比べます。
  • 8.1以前は、アドバイザリに対象としても修正版としても記載がありません。配布元の修正を確かめるか、8.2以上へ移ります。

01PHP2Shellで起きること

PHP公式によると、2件はどちらも認証なしで遠隔からコードを実行されるおそれがあります。CVE-2026-109618は、メモリ不足(OOM)で処理を抜けたとき、初期化の途中のデータを終了処理が正しいものとして扱う問題です。CVE-2026-109619は、終わったリクエストのメモリを指す内部状態が残り、同じワーカーの次のリクエストがそれを使う問題です。[1][2][3]

深刻度は緊急です(PHP公式の評価:CVSS 4.0で2件とも9.2)。NVDはCVSS 3.1で、CVE-2026-109618を9.8(緊急)、CVE-2026-109619を8.1(高)としています。攻撃の複雑さは高く、成功するかはPHPの版・実行環境・メモリの配置などで変わるとJPCERT/CCは説明しています。[2][3][5][6][8]

細工したリクエストでPHP本体のメモリの扱いを崩し、ワーカーの権限でコードを実行する

PHP公式の告知と2件のアドバイザリから、攻撃の入口と脆弱な部品を並べる。

攻撃者認証なしで細工したmultipartのリクエストを送る
Webのリクエストとして届く

PHP本体(8.5.12・8.4.27・8.3.36・8.2.35より前)

メモリ不足の処理(CVE-2026-109618)初期化の途中で処理を抜け、終了処理が不正なデータを使う
残った内部状態(CVE-2026-109619)終わったリクエストのメモリを、同じワーカーの次のリクエストが使う
メモリの破壊
起きることWebのワーカーのアカウントの権限で任意のコード実行
足がかりになる仕組み
multipartの受け取りpost_max_sizeの範囲内でmemory_limitを使い切らせる
セッションのアップロード進捗初期設定で有効。session_start()が無くても動く
致命的エラー・実行時間切れ状態を戻す前に処理が止まる
8.5のfatal_error_backtracesmod_phpへの攻撃を確認した経路

出典 PHP公式「Security advisory: Critical remote code execution vulnerabilities, update now」(2026-10-21)、GHSA-w8hw-w9fx-j79w・GHSA-6wmf-4rv5-p3rp(2026-10-21)

02PHPのどの動かし方が対象になるか

PHP公式は対象を「Webのリクエストを処理するすべてのPHP」とし、PHP-FPM、Apacheのmod_php、php-cgi、FrankenPHP、LiteSpeedを挙げています。最も危険なのはmod_phpで、アプリのコードが動く前に攻撃が始まることを実証済みとしています。コマンドライン(CLI)だけで動かすPHPの記載はありません。[1]

足がかりは、multipartのリクエストでmemory_limitを使い切らせること、初期設定で有効なセッションのアップロード進捗、致命的エラーや実行時間切れ、8.5のfatal_error_backtracesなどです。[2][3]

mod_phpは攻撃を検証済みで、PHP-FPMなどの動かし方も対象に入る

PHP公式の告知とCVE-2026-109618のアドバイザリから、動かし方ごとの扱いを並べる。

Apacheのmod_php
PHP公式の評価最も危険。アプリのコードより前に攻撃が始まる
CVE-2026-109618の検証初期設定の上限で、遠隔からの攻撃を検証済み
PHP-FPM
PHP公式の評価対象
CVE-2026-109618の検証起動後の経路で対象。完全な攻撃は未実証
FrankenPHP・LiteSpeed
PHP公式の評価対象
CVE-2026-109618の検証FrankenPHPはソースの分析で対象の見込み。LiteSpeedはアプリ次第で見込みありだが未検証
だから 動かし方にかかわらず修正版に上げ、mod_phpで公開しているサーバーから先に進める。

出典 PHP公式「Security advisory: Critical remote code execution vulnerabilities, update now」(2026-10-21)、GHSA-w8hw-w9fx-j79w(2026-10-21)

03PHP2Shellの悪用の状況

米CISAは10月26日(米国時間)に2件をKEVへ追加し、連邦政府機関の対応期限を10月29日としました。今後30日に悪用される見込みの推定(EPSS)は、2件とも99.9%を超えています(11月1日時点)。[4][18]

JPCERT/CCは、悪用できると主張するPoCが多数公開され、悪用を試みる通信の観測も相次いでいるとし、10月29日には、あるファイアウォール製品で侵害の成功を示唆する痕跡が報告されたと追記しました。IPAの注意喚起(11月2日更新)は、国内での攻撃被害の事例は把握していないとしています。国内で緊急メンテナンスを行ったサービスはPHP2Shellのサービス停止まとめにあります。[7][8][12]

修正版の公開から5日でKEVに載り、10月29日には侵害の痕跡も報告された

PHP公式、米CISA、JPCERT/CC、IPAの告知から、日付のある出来事を並べる。

PHP公式 米CISA・JPCERT/CC・IPA

2026年10月20日

PHP公式が公開日時を予告CVSS 4.0で9.2の脆弱性2件と案内

10月21日

8.5.12・8.4.27・8.3.36・8.2.35を公開14時(UTC)。アドバイザリ2件も同時に公開
9.2CVSS 4.0(PHP公式の評価)

10月22日

JPCERT/CCとIPAが注意喚起更新と侵害の有無の調査を呼びかけた

10月23日

米CISAが検知ルールを公開同じ日、PHP公式がCVE-2026-115560を告知

10月26日

米CISAがKEVに追加米国時間。連邦政府機関の対応期限は10月29日

10月29日

JPCERT/CCが侵害の痕跡の報告を追記あるファイアウォール製品で侵害の成功を示唆する痕跡

11月2日

IPAが注意喚起を更新影響を受ける可能性のある製品・機器について追記

出典 PHP公式の告知(2026-10-20・21・23)、米CISA「Known Exploited Vulnerabilities Catalog」(2026.10.30版)、JPCERT/CC「JPCERT-AT-2026-0033」(2026-10-29更新)、IPA(2026-11-02更新)

04攻撃を受けていないかの確認

更新に加えて、それまでに攻撃を受けていないかを確かめます。JPCERT/CCが挙げる確認点は次の3つです。[8]

  1. 過去のレスポンスで、不自然に長い、または形式のおかしいPHPSESSIDのCookieを設定していないか。
  2. 不審なmultipart/form-dataのリクエストと、その前後のメモリ上限のエラーやHTTP 500がないか。
  3. PHPのワーカーの予期しない異常終了や、頻繁な再起動がないか。

米CISAの検知ルール(Sigma)は、index.phpへのPOSTでPHPSESSIDとPHP_SESSION_UPLOAD_PROGRESSを含むmultipartのリクエスト、エラーログの「PHP Fatal error:」「Allowed memory」「in Unknown」がそろう行、PHP-FPMやApacheから/bin/sh・curl・wgetを起動した記録、公開された攻撃コードやスキャナーの印(php2shell-scan、区切り文字列B7kQpoc618・BNDRY12345)を探します。[10]

ターミナル(Debian系の例)
grep -E "PHP Fatal error: +Allowed memory.* in Unknown" /var/log/php*-fpm.log /var/log/apache2/error.log
grep -E "php2shell|B7kQpoc61|BNDRY12345" /var/log/nginx/access.log /var/log/apache2/access.log

本文の文字列はアクセスログに残らないことが多いので、WAFやプロキシの記録でも探します。JPCERT/CCは、痕跡が無くても侵害されていないとは言い切れないとし、不審なプロセス・外部への通信・ファイルの作成も確かめ、疑わしければログを保全してシステムを隔離するよう求めています。[8]

緊急の場合AI攻撃リスク即点検サービス公開情報と、契約後すぐに用意できるアクセスの記録から先に調べ、被害や狙われやすい構成がないかを早く確かめます。

05PHPの系列ごとの対象と推奨する版

対象と修正版は、PHP公式の告知と2件のアドバイザリから出しました。11月2日時点で、これより新しい版は出ていません。[1][2][3]

系列対象推奨する版
8.58.5.12より前8.5.12
8.48.4.27より前8.4.27
8.38.3.36より前8.3.36
8.28.2.35より前8.2.35(セキュリティ修正は2026年12月31日まで)
8.1以前アドバイザリに記載がないアドバイザリに記載がない(PHP公式の更新の対象外)

NVDの判定では、CVE-2026-109619は5.4.0以降、CVE-2026-109618は7.3.0以降が対象です(11月2日確認)。Windows版は、10月26日の8.5.12-1などを入れると、同梱のBrotliの脆弱性もあわせて直ります。[5][6][19][16]

06動いているPHPの版を確かめて、修正版に上げる手順

  1. Webのリクエストを処理しているPHPの版を確かめます。ターミナルのphpとPHP-FPM・mod_phpは別の版のことがあります。FPMの実行ファイル名は環境で違います。

    ターミナル
    php -v
    ls /usr/sbin/php-fpm*
    php-fpm8.3 -v
    apachectl -M | grep -i php
  2. OSのパッケージは、番号ではなく配布元の修正版と比べます。Debian 12のphp8.2は8.2.35-1~deb12u1、Ubuntu 24.04のphp8.3は8.3.6-0ubuntu0.24.04.13、Ubuntu 22.04のphp8.1は8.1.2-1ubuntu2.28で直っています。RHEL系は更新履歴でCVE番号を探します。[13][14]

    ターミナル
    dpkg -l 'php*' | grep '^ii'
    rpm -q --changelog php-fpm | grep -m1 CVE-2026-10961
  3. コンテナは本番のイメージそのもので確かめます。公式のphpイメージは、8.4-fpmのような系列のタグも10月31日に作り直されています。手元のイメージは基のイメージを取り直して作り直します。[15]

    ターミナル
    docker run --rm <本番のイメージ> php -v
    docker build --pull --no-cache -t <イメージ名> .
  4. composer auditが見るのはインストールしたパッケージです。PHP本体の版はcomposer show --platformで見られますが、Composerを動かしたPHPの版なので、手順1と照らし合わせます。[17]

    ターミナル
    composer show --platform | grep '^php '
  5. 更新したらPHP-FPMやApacheを再起動し、手順1と同じ方法で修正版になったことを確かめます。再起動までは古い版が動き続けます。

    ターミナル(Debian系の例)
    sudo apt update && sudo apt upgrade
    sudo systemctl restart php8.3-fpm
    sudo systemctl restart apache2
    php-fpm8.3 -v

07すぐに上げられないとき

PHP公式は、更新だけが完全な対策で、次の設定は特定の経路を減らすだけだとしています。php.iniやFPMのプールに書いてすべてのワーカーを再起動し、ini_set()や.user.iniには頼りません。[1]

  • memory_limit=-1をアプリが上書きできない形で設定し、メモリの上限はコンテナやcgroupで設ける(RLIMIT_AS・RLIMIT_DATAは使わない)。
  • post_max_sizeをアップロードが無ければ8M、あれば32Mにし、upload_max_filesizeをそれより小さくする。
  • session.upload_progress.enabled=0にする(10月23日に告知された別の問題CVE-2026-115560の対策も兼ねる)。8.5ではfatal_error_backtraces=0も。[11]
FPMのプールの設定(例:/etc/php/8.3/fpm/pool.d/www.conf)
php_admin_value[memory_limit] = -1
php_admin_value[post_max_size] = 8M
php_admin_value[upload_max_filesize] = 4M
php_admin_flag[session.upload_progress.enabled] = off

米CISAは、すぐ更新できないPHPはオフラインにするよう勧めています。[9]

08PHP 8.1以前を使っているとき

PHP公式は8.1以前を更新の対象外とし、配布元や長期サポートの事業者の修正を確かめるか、サポート中の版へ上げるよう求めています。7.4・8.0・8.1向けの最小限のソースの修正はGitHubのブランチにありますが、リリースではありません。[1][20]

Ubuntu 22.04のphp8.1のように配布元が直したものもあります。一方、公式のphpイメージの8.1のタグは2026年1月2日から更新されていないので(11月2日確認)、8.2以上のイメージへ移ります。[14][15]

脆弱性の公表・更新一覧 2026年10月版の表紙
資料(無料)脆弱性の公表・更新一覧 2026年10月版60日間の公表・更新と、悪用が確認された脆弱性を分析し、どこから直すかの考え方と確認の手順をまとめた資料です。

よくある質問

Ubuntu 24.04でphp -vを打つと8.3.6でした。対象ですか?

番号だけでは決まりません。Ubuntuは修正を8.3.6のまま取り込み、パッケージの版8.3.6-0ubuntu0.24.04.13以降で直っています(USN-8948-1)。dpkg -l 'php*'で確かめます。[14]

cronのバッチなど、コマンドラインでしかPHPを使っていません。

PHP公式が対象に挙げるのはWebのリクエストを処理するPHPで、CLIの記載はありません。同じサーバーでWebも動かしているなら、同じパッケージの更新で両方が上がります。[1]

Windows版のPHPは何を入れればよいですか?

10月26日に出た8.5.12-1・8.4.27-1・8.3.36-1・8.2.35-1です。PHP2Shellの修正に加えて、同梱のBrotliの脆弱性も直ります。[19]

出典・参考資料

  1. PHP公式:Security advisory: Critical remote code execution vulnerabilities, update now2026-10-21 / 修正版4つ、対象の動かし方、mod_phpの危険性、8.1以前の扱いと最小限の修正、配布元への事前提供、緩和策
  2. PHP公式:GHSA-w8hw-w9fx-j79w(CVE-2026-109618、RCE via OOM corruption)2026-10-21 / 仕組み、対象(8.2.35・8.3.36・8.4.27・8.5.12より前)、CVSS 4.0 9.2、足がかりのリクエストの形、SAPIごとの検証の状況
  3. PHP公式:GHSA-6wmf-4rv5-p3rp(CVE-2026-109619、RCE via stale global state)2026-10-21 / 仕組み、対象と修正版、CVSS 4.0 9.2、アップロード進捗・致命的エラー・fatal_error_backtracesの経路、緩和策
  4. 米CISA:Known Exploited Vulnerabilities Catalog(JSON版 2026.10.30)2026-11-02確認 / 2件の追加日10月26日、対応期限10月29日、Forensic Triageの対象
  5. NVD:CVE-2026-1096182026-10-30更新 / NVDの評価CVSS 3.1 9.8、対象の判定(7.3.0以降)
  6. NVD:CVE-2026-1096192026-10-30更新 / NVDの評価CVSS 3.1 8.1、対象の判定(5.4.0以降)
  7. IPA:PHPの脆弱性対策について(CVE-2026-109618、CVE-2026-109619:PHP2shell)2026-10-22(11-02更新) / 国内での被害の事例を把握していないこと、PHP 5.4以降が少なくとも一方の影響を受けるというWizの説明
  8. JPCERT/CC:PHPにおける複数の脆弱性に関する注意喚起(JPCERT-AT-2026-0033)2026-10-22(10-29更新) / PoCの公開と悪用の試みの観測、ファイアウォール製品での侵害の痕跡、侵害の調査で確かめる3点、成功が環境に左右されること
  9. 米CISA:Critical Vulnerabilities in PHP Require Immediate Patching2026-10-21(10-26更新) / 更新できないPHP・8.1以前のPHPをオフラインにする勧め、WAFの扱い、検知ルールの追加
  10. 米CISA:SIGMA_Rules(CISA_SIGMA_261429 PHP2Shell)2026-10-23更新 / リクエスト・エラーログ・プロセスの痕跡、PoCの印、攻撃元のIPアドレス・ドメイン、誤検知の程度
  11. PHP公式:Informational advisory: Session upload progress2026-10-23 / CVE-2026-115560の条件、session.upload_progress.enabled=0の勧め
  12. PHP公式:Upcoming Critical PHP Security Release2026-10-20 / 公開日時の予告(10月21日14時UTC)
  13. Debian:Security Tracker CVE-2026-1096182026-11-02確認 / Debian 12(8.2.35-1~deb12u1)・Debian 13(8.4.27-1~deb13u1)の修正版
  14. Ubuntu:CVE-2026-109618(USN-8948-1)2026-11-02確認 / Ubuntu 24.04(8.3.6-0ubuntu0.24.04.13)・22.04(8.1.2-1ubuntu2.28)の修正版
  15. Docker Hub:php(公式イメージ)のタグ2026-11-02確認 / 8.5.12・8.4.27・8.3.36・8.2.35のタグ、系列のタグの10月31日の更新、8.1系のタグが1月2日から更新されていないこと
  16. PHP公式:Supported Versions2026-11-02確認 / 8.2のセキュリティ修正の終了日
  17. Composer公式:Command-line interface(audit・show・check-platform-reqs)2026-11-02確認 / auditの対象、show --platform、check-platform-reqs
  18. FIRST:EPSS(CVE-2026-109618・CVE-2026-109619)2026-11-01 / EPSSの値
  19. PHP公式:Updated PHP Windows builds for Brotli security fix2026-10-26 / Windows版8.5.12-1などの再公開
  20. php-src:PHP-8.1-CVE-2026-109618-109619(ブランチ)2026-11-02確認 / 8.1向けの最小限のソースの修正

あわせて読みたい記事

PHP公開 2026-11-01

PHPのWindows版のBrotliの脆弱性、8.5.12-1などへの入れ替えとcURL・Guzzleの確かめ方(CVE-2026-111497)

PHPのWindows版に同梱のBrotliの脆弱性CVE-2026-111497は、米CISAが悪用を確認しています。10月21日の版も対象のままである理由、GuzzleやWordPressで自動展開が有効になる条件、8.5.12-1などへの入れ替えと確かめ方を説明します。

PHP公開 2026-11-01

Laravelの脆弱性CVE-2026-114509|TokenGuardの認証回避と13.30.0・12.69.0への対応

Laravelの脆弱性CVE-2026-114509は、TokenGuardで守るAPIに文字列でない値を送ると、MySQL・MariaDBの一部の構成で既存の利用者として認証されるおそれがあります。自社がTokenGuardかSanctumかの見分け方、12.69.0・13.30.0以上への上げ方、サポートが終わった11系以前の扱いを説明します。

Python公開 2026-11-01

Brotliの脆弱性の確認方法、PythonとNode.jsで対象かを確かめて直す(CVE-2026-111497、コード実行のおそれ)

圧縮形式Brotliの展開処理の脆弱性CVE-2026-111497(HTTP2Shell)は、米CISAが悪用を確認しています。Pythonのbrotli・brotlicffi、Node.jsの同梱版などで、自分の版と構成が対象かを確かめる方法と修正版を、言語ごとに説明します。