まずは相談する

PHPの緊急脆弱性「PHP2Shell」。自分のサイトは大丈夫? 今すぐ確認することと、当夜に実際にやった対応

結論から。 2026年10月21日の夜、PHP に「ログインなしでサーバーを乗っ取られる」深刻な脆弱性2件(通称 PHP2Shell)の修正版が公開されました。WordPress や EC-CUBE など、PHP で動くサイトはほぼすべてが対象です。完全な対策は修正版への更新だけで、それまでの時間稼ぎとして公式の一時対策があります。レンタルサーバーなら事業者の対応を待ちつつ、できる範囲の一時対策と改ざんの監視をします。サポートが切れた古い PHP で動いているサイトが、いちばん危ない状態です。

この記事は、前半が「サイトを持っている方向け」で、何が起きているのか、何がまずいのか、自分のサイトが対象かどうかの確認のしかた、対応が必要なケースと不要なケース、できること、保守会社や事業者への頼み方、の順で書いています。後半は、サーバーを管理している方向けの実践編です。前半だけ読んでも判断できるように書いています。

※記事中の情報は2026年10月22日未明時点のものです。状況は動いているので、公式の情報もあわせて確認してください。

何が起きているのか

PHP の開発チームが、10月21日23時(日本時間)に緊急の修正版 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 を公開しました。深刻度「Critical」の脆弱性2件への対応です。

前日の20日に公開予告が出ていましたが、修正版が出る前に脆弱性の詳細が外部に漏れてしまい、国内でもサービスを緊急停止する企業が相次ぎました。セキュリティ企業からは、実際の悪用も報告されています。

CVE 深刻度 ざっくり言うと
CVE-2026-109618 CVSS v4.0 9.2 メモリ不足のエラーで処理が中断されたとき、準備途中のデータを正しいものとして後片付けしてしまう
CVE-2026-109619 CVSS v4.0 9.2 解放済みのメモリを指す状態が残り、同じワーカーが次のリクエストを処理するときにそれを使ってしまう

どちらも、PHP が Web リクエストを処理する途中で起きる、メモリ管理の不具合です。影響を受けるバージョンは「PHP 5 以降ほぼすべて」と報告されています。

何がまずいのか

攻撃者は、PHP で動いているページならどれにでも、細工したリクエストを送るだけで、サーバー上で好きな命令を実行できます。ログインは要りません。

しかも攻撃が成立するのは、PHP がリクエストの中身を読み込む段階です。WordPress や EC-CUBE のプログラムが動き出す前なので、アプリ側のセキュリティ対策(プラグイン、ログイン制限、管理画面の IP 制限)では防げません。

攻撃が成立するのは、WordPress や EC-CUBE が動き出す前の段階

乗っ取られた場合に起こりうることは次のとおりです。

さらに今回は、修正版が出る前に詳細が漏れています。「修正版が出たから安心」ではなく、「修正版が出る前から攻撃できる状態だった」と考えて動く必要があります。

自分のサイトが対象か、どうやって確認する?

確認することは3つです。順番に見ていけば、5分で分かります。

1. PHP で動いているか

次のどれかに当てはまれば、まず PHP です。

Wix・Shopify・STUDIO・ペライチのようなサービスで作ったサイトは、PHP で動いていても利用者側に触れる部分がなく、サービス側が対応します。

2. PHP のバージョン

レンタルサーバーなら、コントロールパネルの「PHP 設定」「PHP バージョン」のような項目に書いてあります。WordPress なら、管理画面の「ツール → サイトヘルス → 情報 → サーバー」にも出ます。

見るのは、先頭の数字です。8.2 以上か、8.1 以下かで、やることが変わります。

3. サーバーの種類

確認は3つ。PHPかどうか、バージョン、サーバーの種類

どのケースなら対応が必要で、どのケースなら不要?

上の3つの確認結果で、次のように分かれます。

ケース 対応
PHP で動いていない(Wix・Shopify などのサービス、静的な HTML だけ) 不要。 サービス側が対応します
レンタルサーバー × PHP 8.2 以上 事業者の対応待ち。 お知らせを確認し、更新の告知が出るまでは後半の一時対策と監視をする
レンタルサーバー × PHP 8.1 以下 急ぐ。 事業者が修正を当てるかどうか、お知らせで確認する。当てない場合は、コントロールパネルで 8.2 以上に切り替えられないか確認する(切り替えるとサイトが壊れることがあるので、先に保守会社に相談)
VPS・クラウド × PHP 8.2 以上 今夜のうちに。 後半の手順で一時対策を入れ、修正版が届き次第更新する
VPS・クラウド × PHP 8.1 以下 いちばん急ぐ。 公式の修正版は出ない。後半の「【実践編】サポート切れの PHP」を読んで、保守会社に連絡する
制作会社・保守会社に丸ごと任せている 連絡する。 次の「どうやって頼めばいいか」を参照

「対象外」と言い切れるのは、1行目だけです。それ以外は、程度の差はあっても何かしら動く必要があります。

自分でできることは何か

サーバーに詳しくなくても、できることが3つあります。どのケースでも、やっておいて損はありません。

  1. バックアップを取る。 公開ディレクトリ一式とデータベース。改ざんされたときの比較用と、復旧用を兼ねます。レンタルサーバーなら、コントロールパネルのバックアップ機能か、FTP ソフトで丸ごとダウンロードします
  2. 管理者アカウントを確認する。 WordPress や EC-CUBE の管理画面で、知らない管理者が増えていないか見ます。増えていたら、その時点で侵入済みです
  3. WAF を有効にする。 レンタルサーバーのコントロールパネルに「WAF」の項目があれば、オンにします。完全には防げませんが、攻撃の一部は止まります

逆に、やらないほうがいいこともあります。

保守会社や事業者に、どうやって頼めばいいか

「よく分からないけど不安」という状態で連絡しても、相手が答えにくいだけです。聞くことを絞ると、返事が早くなります。

制作会社・保守会社に送る文面の例

PHP の脆弱性「PHP2Shell」(CVE-2026-109618 / CVE-2026-109619)の件で、弊社サイトの状況を教えてください。

  1. 弊社サイトの PHP のバージョンと、サーバーの種類(レンタル/VPS)
  2. 修正版への更新、または一時対策の予定と時期
  3. 弊社側で何かやることがあるか

急ぎで恐縮ですが、本日中にご返信いただけると助かります。

返事が「対象外です」か「対応済みです(いつ、何をしたか)」のどちらかになるまで追います。「確認します」のまま2日以上止まったら、もう一度聞きます。

レンタルサーバーの事業者に対しては、問い合わせより先に、公式のお知らせページを見ます。今回のような事態では、事業者は全利用者向けに告知を出していて、問い合わせ窓口は混み合っています。お知らせに「対応済み」「メンテナンス予定」のどちらも書かれていないときだけ、問い合わせます。

ここから後半は、サーバーの管理をしている方向けの実践編です。

【実践編】VPS(自社管理サーバー)での対応手順

とある会社の VPS(Ubuntu 24.04、nginx + PHP-FPM)で、修正版の公開直後に行った手順です。

1. PHP の版と入手元を確認する

php -v と apt-cache policy php8.x-fpm で確認します。このサーバーでは、Ubuntu 標準の 8.3 と外部リポジトリ(ondřej PPA)の 8.4 が同居していて、FPM も2つ動いていました。

ターミナルの php -v は CLI 版の情報です。Web の処理を担う FPM は別物なので、systemctl list-units | grep php で動いている FPM をすべて洗い出します。

2. 修正版が来ているか確認する

sudo apt update のあと、更新候補の版を見ます。php.net で公開されてから OS のパッケージに反映されるまでには時差があり、当夜の時点では 8.4.27 / 8.3.36 はまだ届いていませんでした。

Ubuntu 標準のパッケージは、版の番号を上げずに修正だけを取り込みます。そのため、apt changelog に CVE 番号が載っているかどうかで判断します。

3. 修正版が届くまでの一時対策を入れる

公式が案内している緩和策を、すべての FPM の設定ディレクトリに追加して再起動しました。

; /etc/php/8.x/fpm/conf.d/99-php2shell.ini
session.upload_progress.enabled = 0
post_max_size = 8M
upload_max_filesize = 6M

ファイルのアップロードが必要なサイトでは、post_max_size を 32M にします。.user.ini や ini_set() では効かないので、必ず php.ini か FPM の pool 設定に書きます。

これは確認済みの攻撃経路を塞ぐだけで、完全な対策ではありません。

4. 使っていない FPM は止める

nginx の fastcgi_pass を確認し、使われていない FPM は停止して、攻撃を受ける窓口を減らします。

5. 修正版が届いたら更新して再起動する

sudo apt install --only-upgrade 'php8.x*' を実行して FPM を再起動し、CLI と Web 経由の両方で版を確認します。他のパッケージの一括更新や OS のアップグレードは、別の機会に分けて行います。今夜はこれだけに絞ります。

【実践編】レンタルサーバーの場合

レンタルサーバーでは、PHP 本体の更新は事業者が行います。利用者は更新されるのを待つしかなく、その間もサイトは公開されたままなので、リスクが残ります。

当夜は国内の大手事業者も緊急メンテナンスを実施していて、管理画面や SFTP につながらない時間帯がありました。そんな中でも通常の FTP は使えたため、FTP だけでできる範囲の一時対策を入れました。

1. PHP の動き方を確認する

推測されにくい名前のファイル(例:chk_8f3k2.php)に <?php phpinfo(); と書いてアップロードし、ブラウザで開きます。見る項目は3つです。

項目 見るところ
PHP Version サポート中の版かどうか
Build Date 事業者が修正を当てて作り直したかどうかの目安(後述)
Server API Apache 2.0 Handler なら mod_php で、公式が最も危険とする構成。CGI/FastCGI なら CGI 系

確認が終わったら、phpinfo のファイルは必ずすぐ削除してください。サーバーの内部情報が丸見えになるためです。

2. .htaccess で一時対策を入れる(mod_php の場合)

mod_php で動いている場合は、.htaccess で PHP の設定を上書きできることがあります。とある EC サイト(さくらのレンタルサーバ、PHP 7.4、mod_php、EC-CUBE 2系)では、次の手順で設定が効くことを確認しました。

  1. ドキュメントルートの .htaccess をダウンロードして、バックアップしておきます
  2. 先頭に次の3行を追加して、アップロードします
php_flag session.upload_progress.enabled off
php_value post_max_size 32M
php_value upload_max_filesize 30M
  1. トップページ、商品ページ、管理画面を開いて、500 エラーにならないか確認します。エラーになった場合は事業者が許可していない設定なので、すぐバックアップに戻します
  2. もう一度 phpinfo を開き、session.upload_progress.enabled の Local Value が Off、Master Value が On になっていれば、このサイトでは設定が効いています。確認したら phpinfo を削除します

phpinfo で Local Value が Off になっていれば、.htaccess の設定が効いている

EC-CUBE 2系は upload_progress の機能を使っていないため、Off にしても動作に影響はありません。商品画像のアップロードがあるので、post_max_size は 8M ではなく 32M にしています。設定後に、管理画面から画像を登録できるかも確認しておきます。

.htaccess が使えない場合は、管理画面の「php.ini 設定」などで同じ項目を設定します。いずれにしても、確認済みの攻撃経路を1つ塞ぐだけで、完全な対策ではありません。

3. 改ざんに備えて、基準を取って監視する

FTP ではコマンドを実行できないため、次の方法で監視します。

通常の FTP はパスワードが暗号化されずに流れるので、FTP ソフトが対応していれば FTPS(明示的な TLS)で接続します。

4. そのほか

【実践編】サポート切れの PHP を使っている場合

一番危ないのは、サポートが切れた古い PHP で動いているサイトです。公式の修正版が出ないので、事業者や LTS ベンダーが独自に修正を移植しない限り、穴は開いたままになります。

ただし今回は深刻さを考慮して、7.4・8.0・8.1 向けに最小限のソースパッチが例外的に公開されています。

PHP の版 公式の修正 当面の対応 根本的な対応
8.2〜8.5 修正版あり 修正版に更新する 8.2 は2026年12月末でサポート終了。上の版へ移行を計画
7.4 / 8.0 / 8.1 最小限のソースパッチのみ 事業者の対応を確認し、一時対策を入れる サポート中の版へ移行
7.3 以前 なし 一時対策、アクセス制限、WAF。決済のあるサイトは一時閉鎖も検討 アプリごと移行(EC-CUBE 3系なら EC-CUBE 4.3 へ)

PHP 7.4.33 と表示されていても、修正済みとは限らない

7.4.33 は 7.4 系の最後の公式リリース(2022年11月)で、今回の 7.4 向けの修正は新しい版ではなく、このバージョンに当てるソースパッチとして出ています。そのため、事業者が修正を当てても、表示は 7.4.33 のままになる可能性が高いです。

判断するときは、phpinfo の「Build Date」が2026年10月21日より後になっているか、事業者から修正適用の告知が出ているかを確認します。8.0・8.1 も同じ考え方です。

EC-CUBE は、本体のバージョンが PHP を縛っている

EC-CUBE の場合は、本体のバージョンが対応する PHP を決めています。たとえば EC-CUBE 4.0 は PHP 7.4 までしか対応していないため、PHP 8 系に上げるには本体を 4.2 や 4.3 に上げる必要があります。

一方、EC-CUBE 2.17 系は PHP 8 系への対応が進んでいるため、カスタマイズ部分の動作確認は必要ですが、比較的小さな改修で PHP を上げられる見込みがあります。

古い EC-CUBE を古い PHP で動かし続けている構成は、今回のような事態で打てる手がほとんどありません。今回の件を、移行計画を立てるきっかけにしてください。

まとめ

お使いのサイトが対象かどうか分からない、保守会社から返事がない、という場合は、相談だけでも構いません。

参考情報

まずは相談する