PHP脆弱性php2shellの内容をサクッと把握!対策も!

PHP脆弱性php2shellの内容と対策まとめ!
2026年10月21日、PHPに深刻度「Critical」の脆弱性が公表されました。

通称「php2shell」。認証なしで任意のコード実行(RCE)につながる可能性がある、極めて危険度の高い脆弱性です。

PHPはWordPress・Laravel・Symfonyなど、多くのWebアプリケーションで使われているため、影響範囲は非常に広いです。

そんな中で悩むことは、

・自分の環境は影響を受けるのか分からない
・何をすればいいのか、優先順位が分からない
・すぐにアップデートできないが、放置していいのか不安

ですね。

今回はそんなお悩みを解決する、

・php2shell(CVE-2026-109618/CVE-2026-109619)とは
・影響を受ける構成とバージョン
・自分の環境を確認する方法(コマンドつき)
・修正バージョンへのアップデート手順
・すぐ更新できない場合の暫定対策
・IPAが示す「修正困難な場合」の判断ステップ

についてIPA・PHP.net・JVNの一次情報をもとに、脆弱性の内容と対策を具体的な手順つきでまとめます。

ゴール

この記事のゴールは、「影響を確認し、修正版にアップデートして、暫定策も押さえた状態」になることです。

項目 対策前 対策後
PHPのバージョン 8.4.26(影響あり) 8.4.27(修正済み)
SAPI構成 mod_php(最も危険) PHP-FPM へ移行を検討
暫定策 未設定 memory_limit / post_max_size を設定
侵害の兆候 未確認 アクセスログを確認済み
8.1以前の環境 EOLで放置 サポート版へ移行計画あり
POINT
・通称php2shell/CVE-2026-109618とCVE-2026-109619の2つ
・認証不要のリクエストで攻撃が成立し、アプリのコードが動く前に発動します
・mod_php が最も危険。PHP-FPM・php-cgi・FrankenPHP・LiteSpeed も対象です
・修正版は 8.5.12/8.4.27/8.3.36/8.2.35。直ちに更新してください

30秒でわかるまとめ

項目 内容
名称 php2shell(PHP2Shell)
CVE CVE-2026-109618/CVE-2026-109619
深刻度 Critical(CVSS 4.0 基本値 9.2)
影響 認証されていない第三者が任意のコードを実行できる可能性
公表日 2026年10月21日(PHP.net アドバイザリ)/10月22日(IPA注意喚起)
修正版 8.5.12/8.4.27/8.3.36/8.2.35
対象 Webリクエストを処理するすべてのPHP(mod_php/PHP-FPM/php-cgi/FrankenPHP/LiteSpeed)
対応の結論 直ちに修正版へアップデート。難しい場合は暫定策+侵害確認

何が起きたのか(時系列)

日付 出来事
2026年10月21日 IPAが「【事前準備のお願い】PHPのセキュリティリリース公開予定について」を公表
2026年10月21日 PHP.net がセキュリティアドバイザリを公開(8.5.12/8.4.27/8.3.36/8.2.35)
2026年10月22日 IPAが「PHPの脆弱性対策について(CVE-2026-109618、CVE-2026-109619:PHP2shell)」を公表
2026年10月22日 14:20 JVNがJVNVU#99905564として掲載・更新

IPAは「追記すべき情報がある場合には、その都度このページを更新する予定」としており、最新情報の確認が欠かせません。

脆弱性の正体:2つの問題が組み合わさっている

php2shellは、2つの脆弱性の組み合わせです。

CVE 種類 GHSA
CVE-2026-109618 メモリ不足(OOM)処理の不整合による RCE GHSA-w8hw-w9fx-j79w
CVE-2026-109619 古い内部状態の残存(stale global state)による RCE GHSA-6wmf-4rv5-p3rp

① CVE-2026-109618:OOM時の「中途半端な状態」が悪用される

PHPはリクエストを処理するとき、内部のデータを少しずつ初期化します。

メモリ不足(OOM)が起きると、その初期化が途中で中断されることがあります。

ところが後片付けの処理が、中途半端なデータを「正しいデータ」として扱ってしまうことがあります。

段階 本来の動き 脆弱な動き
① リクエスト受信 内部データを初期化 OOMで初期化が中断
② クリーンアップ 初期化済みのデータを解放 未初期化データを有効と誤認
③ 結果 正常終了 任意コード実行につながる

② CVE-2026-109619:前のリクエストの状態が残ってしまう

PHP-FPMなどのワーカー(プロセス)は、複数のリクエストを使い回します。

本来はリクエストごとに内部状態がリセットされますが、解放済みメモリの状態が残ってしまうことがあります。

その結果、次のリクエストが古い状態を使ってしまう可能性があります。

リクエスト 本来 脆弱な状態
1回目 処理後に完全リセット 状態が残る
2回目 新規に初期化 残った状態を参照

なぜ「危険度が高い」のか

理由 内容
認証不要 ログインしていない第三者がリクエストを送るだけで攻撃が成立します
アプリのコードより前 PHP本体の処理段階で発動するため、アプリ側の入力チェックでは防げません
mod_phpが最も危険 認証なしのリクエストで発動する実証例が示されています
影響範囲が広い WordPress・Laravel・Symfony など、PHP製アプリ全般が該当します

影響を受ける構成(SAPI)

構成 リスク 備考
Apache + mod_php 最も高い 認証なしのリクエストで発動する実証例あり
PHP-FPM 高い ワーカーが状態を持ち越す問題(109619)と相性が悪い
php-cgi 高い —
FrankenPHP 高い —
LiteSpeed 高い —

PHP.netは「Webリクエストを処理するすべてのPHP」が対象と明言しています。

CLIでしか使っていない場合はWeb経由の攻撃は受けませんが、Webサーバと同居している場合は注意が必要です。

影響を受けるバージョン

系列 影響あり 修正版
PHP 8.5 8.5.12 より前 8.5.12
PHP 8.4 8.4.27 より前 8.4.27
PHP 8.3 8.3.36 より前 8.3.36
PHP 8.2 8.2.35 より前 8.2.35
PHP 8.1以前 サポート終了(ただし影響は受ける) —(下記参照)

IPAの注意喚起では、調査に関与したWiz社の見解として「PHP 5.4以降のバージョンは、これらの脆弱性のいずれかの影響を少なくとも受ける」と紹介されています。

まず自分の環境を確認する(チェックリスト)

# 確認すること 確認方法
1 PHPのバージョン php -v
2 Webサーバの構成(SAPI) php -i | grep "Server API"
3 設定ファイルの場所 php --ini
4 FPMの稼働 ps aux | grep php-fpm
5 OSパッケージの状態 apt list --installed | grep php(Debian系)
6 Dockerイメージ docker image ls | grep php
7 アプリ側の要件 WordPress・Laravel・Symfony のバージョン

バージョンとSAPIを確認する

コマンド1つで分かるのでカンタンですね。

# PHPのバージョン
php -v

# SAPI(php-fpm / apache2handler / cgi-fcgi など)
php -i | grep -i "Server API"

# 設定ファイルの場所
php --ini

# 読み込まれているモジュール(Apacheの場合)
apache2ctl -M | grep php

Dockerを使っている場合

# 稼働中コンテナのPHPバージョン
docker exec -it コンテナ名 php -v

# イメージのタグ確認
docker image ls | grep php

# docker-compose の定義確認
grep -n "image:.*php" docker-compose.yml
注意:パッケージ管理の落とし穴
PHP.netは、rpms.remirepo.net(有志が運営するリポジトリ)を利用している場合について「本日の更新は提供されない」と明言しています。
ディストリビューションのパッケージかソースビルドへ切り替えるよう強く勧められています。

「upgradeしたのに古いまま」という場合は、どのリポジトリから取得しているかを確認してください。

対策①:修正版へアップデートする(最優先)

これが唯一の完全な解決策です。

Debian / Ubuntu 系

sudo apt update
sudo apt upgrade -y
# バージョン確認
php -v

RHEL / Rocky / AlmaLinux 系

sudo dnf update -y
# 特定パッケージのみ更新する場合
sudo dnf update php\* -y
php -v

Docker の場合

# Dockerfile のタグを修正版に変更
# FROM php:8.4.27-fpm   ← 8.4.26 などから変更

docker compose build --pull
docker compose up -d
docker exec -it コンテナ名 php -v

ソースからビルドしている場合

PHP.net のダウンロードページから 8.5.12/8.4.27/8.3.36/8.2.35 を取得して再ビルドします。

WordPress・Laravel・Symfony の場合

環境 やること
WordPress PHP本体の更新(レンタルサーバなら管理画面のPHPバージョン切り替え)
Laravel PHP本体を更新し、composer update は不要(フレームワーク側の修正ではないため)
Symfony 同じくPHP本体の更新が対象
レンタルサーバ 提供元の対応状況を確認し、切り替え可能なら最新版へ

アプリのコードを直すのではなく、PHP本体(実行環境)を更新するのがポイントです。

対策②:すぐ更新できない場合の暫定策

重要:暫定策は攻撃経路を減らすだけで、安全にはなりません。あくまで更新までの時間稼ぎです。

CVE-2026-109618(OOM)への暫定策

設定 内容
memory_limit=-1 アプリが上書きできない形で設定(FPMプールの php_admin_value など)
post_max_size を小さく アップロード不要なら 8M、必要なら 32M
upload_max_filesize post_max_size より小さくする
Webサーバ側の制限 リクエストサイズ・入力フィールド数・マルチパート数・ヘッダ数・ネスト深さ
コンテナ/cgroup メモリ上限で可用性を守る(影響ワーカーだけを終了させる方針が望ましい)
やってはいけない暫定策
PHP.netはRLIMIT_AS や RLIMIT_DATA を代替にしないよう明言しています。

これらを使うと、かえって脆弱なメモリ確保失敗を誘発するおそれがあります。

また、Content-Length が無いリクエストも制限の対象にしてください。

CVE-2026-109619(状態の残存)への暫定策

設定 内容
session.upload_progress.enabled=0 設定後、すべてのワーカーを再起動
設定の置き場所 php.ini/FPMプール/サーバ設定(リクエスト解析より前に効くもの)
PHP 8.5 の場合 fatal_error_backtraces=0 を設定し、全ワーカーを再起動
診断設定の整理 リクエストごとに診断を出す無効・非推奨の設定を削除する
効かない方法(実は意味がありません)
・ini_set() や FPMの .user.ini での設定 → リクエスト解析に間に合いません
・error_reporting/display_errors/@ でエラーを隠す → 診断自体は発生するため回避になりません
・ワーカーの再起動をしない → 古い状態が残ったままになります

対策③:侵害の兆候を確認する

更新とあわせて、不審なアクセスがなかったかを確認しておきましょう。

見るもの 確認ポイント
Webサーバのアクセスログ 通常と違うパス・異様に大きいリクエスト・大量のエラー
PHPのエラーログ OOM(Allowed memory size exhausted)の多発
FPMのログ ワーカーの異常終了・再起動の繰り返し
不審なファイル アップロード先や公開ディレクトリの見覚えのないファイル
不審なプロセス Webサーバ権限で動く見覚えのないプロセス
アウトバウンド通信 サーバから外部への不自然な通信

不審な兆候があった場合は、証拠(ログ)を保存したうえで、IPAや専門機関への相談を検討してください。

PHP 8.1以前を使っている場合

PHP 8.1以前はサポート終了(EOL)のため、PHPプロジェクトからは更新が提供されません。

ただし、今回の事態を受けてPHP 7.4/8.0/8.1 向けに最小限のソースバックポートが提供されています。

状況 推奨される対応
ソースからビルドしている バックポートを適用して再ビルド
LTSベンダーのサポートがある ベンダーの修正版を適用
どちらも無い サポート対象バージョンへ移行(8.2以降)

IPAが示す「修正が難しい場合」の6ステップ

IPAは、すぐに修正できない組織向けに判断の手順を示しています。

# ステップ 内容
1 サポート状況を確認 EOLのバージョンなら、サポート版への更新や対策済みサービスへの移行を検討
2 暫定対策を講じる 脆弱な状態で放置せず、アクセス制限などを実施
3 システムの状況を把握 そのシステムの役割・代替可否を確認し、必要性を見直す
4 組織として実現性を検討 人員・予算・保守体制を経営層も含めて検討
5 今後の方針を決める 移行/機能縮小/公開終了・廃止も選択肢に入れる
6 利用者・業務への影響を考慮 データ移行・代替手段の案内を計画する

「対策できないから放置」が最も危険です。外部からのアクセス遮断や一時停止も、IPAは選択肢として示しています。

よくある質問(FAQ)

質問 回答
WordPressを使っています。プラグイン更新で直りますか? 直りません。PHP本体(サーバ側)の更新が必要です
CLIでしかPHPを使いません Web経由の攻撃は受けませんが、同じサーバでWeb公開している場合は対象です
レンタルサーバです 提供元の対応状況を確認し、PHPバージョンの切り替えができれば最新へ
アップデートでサイトが壊れませんか? マイナー更新ですが、事前にステージングで確認し、バックアップを取ってから実施してください
暫定策だけでも大丈夫ですか? 不十分です。攻撃経路を減らすだけで、安全にはなりません
WAFで防げますか? 補助にはなりますが、PHP本体の処理段階で発動するため根本対策になりません

用語集

用語 意味
RCE Remote Code Execution。遠隔から任意のコードを実行される脆弱性
SAPI Server API。PHPがWebサーバとやり取りする方式(mod_php/FPM/CGIなど)
PHP-FPM FastCGIでPHPを動かす仕組み。ワーカー(プロセス)を使い回す
mod_php ApacheのモジュールとしてPHPを組み込む方式
OOM Out Of Memory。メモリ不足で処理が中断されること
CVSS 脆弱性の深刻度を表す共通指標。9.0以上が「Critical」
GHSA GitHub Security Advisory の識別子

タカヒロ

タカヒロ
「アプリの入力チェックである程度守られている」と思っていると危ないのが今回の怖さです。
PHP本体の処理で発動するので、アプリ側では防げません。まずは php -v で自分のバージョンを確認するところから始めましょう。

さいごに

今回は、PHPの脆弱性「php2shell」の内容と対策をまとめました。

・php2shell(CVE-2026-109618/CVE-2026-109619)とは
・影響を受ける構成とバージョン
・自分の環境を確認する方法(コマンドつき)
・修正バージョンへのアップデート手順
・すぐ更新できない場合の暫定対策
・IPAが示す「修正困難な場合」の判断ステップ
1. php -v でバージョンを確認する(8.5.12/8.4.27/8.3.36/8.2.35が修正版)
2. mod_php は特に危険。SAPIの構成も確認する
3. 直ちに修正版へアップデートする(これが唯一の完全な解決策)
4. すぐ無理なら暫定策+アクセス制限+侵害確認を行う
5. 8.1以前はバックポート適用かサポート版へ移行する
6. IPA・PHP.netの最新情報を継続して確認する

脆弱性対応は「知ったときが一番早い」と言われます。

まずは php -v でのバージョン確認から、ぜひ試してみてください。
当てはまる場合は今日中にアップデートを済ませましょう。

エク短ツールズ
エク短ツールズ(ツール一覧)
Excelの変換・比較・PDF・バーコード作成まで、ブラウザだけで使える無料ツールを公開しています。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。






コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA ImageChange Image