結論(即答): 何が起きて、何をすればよいか
2026年10月21日(米国時間)、PHP と Node.js が同じ日にセキュリティ修正を公開しました。
PHP で見つかったのは、通称 php2shell と呼ばれる2件の脆弱性(CVE-2026-109618、CVE-2026-109619)です。ログインしていない第三者が外部から送ったリクエストによって、サーバー上で任意のプログラムを実行される(乗っ取られる)おそれがあります。深刻度は、脆弱性の深刻さを10点満点で表す CVSS v4.0 で 9.2(Critical、最も高い区分)です。Amazon は、公開の4日前の10月17日に最初の悪用の試みを観測し、公開の時点ですでに広く悪用されていたとしています。
Node.js では、10件の脆弱性(深刻度 High 4件、Medium 3件、Low 3件)が修正されました。最も重い CVE-2026-111497 は、圧縮形式 Brotli のデータを展開する処理の欠陥で、攻撃者が細工したデータを展開させると任意のコードを実行されるおそれがあります。
やることは、サイトがどこで動いているかで変わります。
- 共用レンタルサーバー(エックスサーバー、さくら、ロリポップなど): PHP を更新するのは事業者です。利用者は、事業者の「適用完了」の告知を確かめます
- PaaS やサーバーレス(Vercel、Heroku、Cloud Run など。サーバーの管理を事業者に任せてアプリを動かすサービス): 自動で更新されるか、再デプロイ(アプリを配置し直すこと)が要るかが、会社と設定によって分かれます。サポート終了の版を使っていれば、版を上げて再デプロイします
- VPS(仮想の専用サーバー)、自社サーバー、自前のコンテナ: 自分で更新します。更新先は、PHP が 8.5.12、8.4.27、8.3.36、8.2.35 以降、Node.js が 22.23.4、24.22.1、26.12.1 以降です
この記事は2026年10月22日12時(日本時間)時点の情報です。各社の対応は進行中のため、最新の状況は表のリンク先で確かめてください。
出典: PHP 公式のセキュリティ告知、Node.js 公式のセキュリティリリース告知、Amazon Threat Intelligence のブログ(いずれも2026年10月22日確認)
この記事の調べ方
X(旧Twitter)上の各社の公式アカウント、公的機関、開発者の投稿を Grok で集めました。Web 上の公式告知、変更履歴、配布元のパッケージ情報は Codex と Claude のサブエージェントで集めました。そのうえで、CVE 番号、版番号、各社の告知を一次情報と突き合わせ、一致したものだけを載せています。告知を確認できなかった会社は「確認できず」と書いています。
あなたのサイトはどれ? 置き場所で「誰が直すか」が決まる
まず、自分のサイトが PHP と Node.js のどちらで動いているかを確かめます。
| サイトの種類 | 動いているもの | 今回の影響 |
|---|---|---|
| WordPress、EC-CUBE、Laravel などで作ったサイト | PHP | php2shell の対象 |
| Next.js、Nuxt、Express などで作ったサイトや API | Node.js | Node.js の10件の対象 |
| HTML ファイルだけのサイト(サーバー側でプログラムが動かない) | どちらも動かない | 直接の対象外。ただし同じサーバーの別のサイトや問い合わせフォームが PHP で動いていれば対象 |
WordPress は PHP で動いているので、php2shell の対象です。WordPress 公式は、今回の問題は WordPress 本体にはなく、本体の更新は不要で、PHP の更新が必要だと告知しています。プラグインを更新しても、この脆弱性は直りません。
php2shell(PHPの脆弱性)の中身
2件の脆弱性と修正版
| CVE | 内容 | 深刻度 |
|---|---|---|
| CVE-2026-109618 | メモリ不足で処理が中断したとき、初期化の途中のデータを後始末の処理が正しいデータとして扱ってしまう | CVSS v4.0 9.2 |
| CVE-2026-109619 | 1つのリクエストの処理が終わってメモリを解放したあとも内部の状態が残り、同じワーカー(リクエストを処理する PHP のプロセス)が処理する次のリクエストがそれを使ってしまう | CVSS v4.0 9.2 |
修正版は PHP 8.5.12、8.4.27、8.3.36、8.2.35 です。PHP 8.1 以前は PHP プロジェクトとしての修正版が出ていません。7.4、8.0、8.1 向けには最小限の修正(新しい版の修正を古い版のソースコードへ移植したもの)が公開されていますが、PHP を自分でビルドする(ソースコードから組み立てる)人向けです。PHP 8.2 も2026年12月31日にサポートが終わります。
「php2shell」は発見に関わった研究者やセキュリティ企業が付けた通称で、PHP 公式の告知には出てきません。CVE の記録では、Calif.io の研究者、Wiz、OpenAI が報告者や発見者として載っています。
影響する構成
PHP 公式は、Web のリクエストを処理するすべての構成(Web サーバーから PHP を動かす方式)を対象としています。
| 構成 | 公式の説明 |
|---|---|
| Apache + mod_php | 最も危険。標準的な設定で、アプリのコードが動く前に、ログインなしの攻撃が成立することが実証されている |
| PHP-FPM | 対象。mod_php とまったく同じ経路ではないが、セッションの処理を使う経路で攻撃が確認されている |
| php-cgi、FrankenPHP、LiteSpeed | 対象 |
セキュリティ企業の Wiz は、WordPress、Drupal、Joomla に対して、ログインなしで任意のコードを実行できることを実証しています。PHP-FPM について「安全」と書いた公式情報はありません。
公開前から悪用が始まっていた
PHP の修正版は、2026年10月21日 14:00 UTC(日本時間 23:00)に公開されました。当初は22日の予定でしたが、前倒しされました。その前後の観測は次のとおりです。
| 日時(日本時間) | 出来事 | 出典 |
|---|---|---|
| 10月17日 | 公開の4日前。Amazon のおとりサーバーで、最初の悪用の試みを観測 | Amazon Threat Intelligence |
| 10月20日 | PHP 公式が、21日に重大な2件の修正を出すと予告 | PHP 公式 |
| 10月21日 11:00ごろ | Amazon が、攻撃コード(PoC)による最初の試みを観測。発信元の違う試みが続き、複数の攻撃者が関わっているとみられる | Amazon Threat Intelligence |
| 10月21日 12:02 | Cloudflare が、無料プランを含む WAF(不正なリクエストを遮断する仕組み)に保護ルールを追加 | Cloudflare |
| 10月21日 23:00 | PHP 公式が修正版を公開 | PHP 公式 |
| 10月22日 未明〜昼 | 国内のレンタルサーバー各社が修正を適用 | 各社の告知(下の表) |
Cloudflare の CEO は X で、同社のネットワークで観測した攻撃の試みが、公開前の10時間で数千件、公開から2時間で数十万件、22日午前の時点で数百万件に増えたと投稿しています。
一方、PHP の運営団体 PHP Foundation は、公開の時点で出回っていた PoC を調べたが、実際に動くものは確認できなかったと書いています。誰でも見られるリポジトリ(コードの置き場所)には「PoC」を名乗るものもありますが、本物かどうかは確認されていません。
Node.jsの10件の脆弱性
修正版は 22.23.4、24.22.1、26.12.1 です。サポートが終わった版(20.x、25.x など)には修正版が出ません。Node.js 公式は、サポート終了の版はセキュリティリリースのたびに影響を受けるとして、サポート中の版へ移るよう案内しています。
| CVE | 深刻度 | 対象の系列 | 内容 |
|---|---|---|---|
| CVE-2026-111497 | High | 22、24、26 | Brotli の展開処理の範囲外書き込み。任意のコード実行のおそれ |
| CVE-2026-105482 | High | 22、24、26 | dns.resolve が、途中に NUL 文字を含む名前を切り詰めてしまう |
| CVE-2026-105483 | High | 24、26 | 全角数字で書いた IP アドレスで、TLS(暗号化通信)のホスト名の検証をすり抜けられる |
| CVE-2026-106069 | High | 22、24、26 | IP アドレスとして解釈される変則的な表記で、TLS のホスト名の検証をすり抜けられる |
| CVE-2026-105481 | Medium | 22、24、26 | HTTP の keep-alive で、要求を送る前に届いた応答を処理してしまう |
| CVE-2026-106072 | Medium | 22、24、26 | TLS の証明書の検証で、変則的な IPv4 表記のホスト名を扱い誤る |
| CVE-2026-106074 | Medium | 22、24、26 | スナップショットや単一実行ファイル(SEA)で、乱数のキャッシュが複製される |
| CVE-2026-106070 | Low | 26 | zlib の ZIP の読み込みで、ヘッダーの検証に失敗したデータを返してしまう |
| CVE-2026-106071 | Low | 26 | Permission Model のワイルドカード指定で、権限を広く与えすぎる |
| CVE-2026-106073 | Low | 22、24、26 | fs.realpathSync() で Permission Model の制限をすり抜けられる |
深刻度は Node.js 公式のセキュリティ告知の区分です。26.12.1 のリリースノートでは CVE-2026-106072 が CVE-2026-106069 とまとめて High と書かれていますが、この表は、脆弱性ごとの区分を示した告知に合わせています。
Brotliの脆弱性が効いてくる場面
Node.js が入っているだけでは影響しません。アプリ自身や使っているライブラリが、攻撃者の用意した Brotli のデータを展開するときに影響します。代表的な場面は2つです。
- 受け取るリクエスト: Express の body-parser は、既定の設定で圧縮された本文(Brotli を含む)を展開します
- 取りに行く応答: Node.js の
fetch()は、相手のサーバーがContent-Encoding: brを返すと自動で展開します。自分のコードで展開処理(zlib)を呼んでいなくても、外部の API やページを取りに行く処理があれば経路になります
2つ目の「取りに行く応答」は、手前の WAF では止められません。Vercel も、Vercel 上の関数が外部から取得した応答は WAF の対象外で、ランタイムの更新でしか防げないと明記しています。
各社の対応(2026年10月22日12時時点)
国内のレンタルサーバー(PHP)
| 会社 | 対応 | 利用者の作業 |
|---|---|---|
| エックスサーバー(シン・レンタルサーバー、スターサーバーも同じ告知) | 21日17時台、予防のため管理画面などを停止(サイトの表示とメールは継続、不正アクセスへの対応ではないと明記)。22日1時台に適用を始め、6時44分に「PHP 8.2〜8.5 は対象の全サーバーへ適用完了」。古い版は独自の修正を順次適用。10時21分に管理画面を再開 | 公式の告知を確かめる。管理画面の再開後、利用状況によって追加の対策を求める場合があると案内 |
| さくらのレンタルサーバ | 21日23時〜22日6時30分に PHP を更新する緊急メンテナンス(数秒つながらない可能性)。コントロールパネルで選べるすべての PHP の版で対応完了。phpMyAdmin とウェブメールは対応を継続 | 緊急の作業は不要と告知。古い版の利用者には 8.3 への移行を勧めている |
| ロリポップ!、ヘテムル | 21日21時台、管理画面、FTP、自動更新などを予防のため停止。22日3時台、修正が終わるまで一部サーバーの顧客サイトを一時停止。22日8時55分時点で「全サーバーの適用と再開は昼ごろ予定」 | 適用完了の告知を待つ(12時時点で完了の告知は確認できず) |
| ConoHa WING | 21日19時〜22日10時に一部サーバーで「システムの保守作業」。22日にファイルマネージャとウェブメールを「予防保守」で停止。告知に PHP の記載はない | PHP の修正の適用を明記した告知は確認できず。公式の続報を確かめる |
| KAGOYA | レンタルサーバーの PHP 8.2〜8.5 は順次更新。マネージド専用サーバー、WordPress 専用サーバーなどは対応を検討中 | レンタルサーバーは待つ。他のプランは、暫定策としてサイトの停止やアクセス制限を検討するよう依頼 |
| mixhost | 22日10時18分ごろ、全サーバー(PHP 5.2〜8.5)に修正を適用完了。サポート終了の版も CloudLinux の独自修正で対応 | 作業は不要。表示上の版番号は変わらない(8.4.26 のままでも修正済み) |
出典: エックスサーバー公式X、さくらインターネットのお知らせ、さくらの緊急メンテナンス情報、ロリポップ!公式X、ConoHa WING のお知らせ、KAGOYA のお知らせ、mixhost のお知らせ(いずれも2026年10月22日確認)
mixhost のように、修正しても表示上の版番号が変わらない事業者があります。WordPress のサイトヘルスや phpinfo(PHP の設定を表示する機能)の番号だけで「直っていない」と判断せず、事業者の告知と合わせて確かめてください。
海外のクラウドとPaaS
| 会社(対象) | 対応 | 利用者の作業 |
|---|---|---|
| Vercel(Node.js) | 21日、全プロジェクトに攻撃の経路を止める WAF ルールを適用。修正した Node.js をマネージドランタイム(Vercel が管理する実行環境)へ順次展開中 | 22.x、24.x は設定の変更不要(パッチ版は Vercel が管理)。20.x は 22.x か 24.x に変えて再デプロイ。Vercel の外で動かす Node.js(外部のバックエンド、自前のコンテナ、CI(自動でテストやビルドをする環境)、手元の開発環境)は自分で更新 |
| Heroku(PHP、Node.js) | PHP 8.2.35、8.3.36、8.4.27、8.5.12 と、Node.js の修正版をビルド用に提供 | 再デプロイ(再ビルド)しないと取り込まれない |
| Cloudflare(PHP の WAF) | 21日12時02分(日本時間)から、無料プランを含む WAF に既定の保護を追加 | 無料プランは作業なし。有料プランはマネージドルールがブロックになっているか確かめる。PHP の更新は別に必要 |
| AWS(PHP) | AWS のサービス自体は影響なしと告知。Elastic Beanstalk の PHP プラットフォームを更新、Lightsail は新しいブループリントを用意、AWS WAF の暫定ルールを案内 | Beanstalk はマネージド更新が有効なら自動、無効なら手動で更新。Lightsail は新しいインスタンスへ移す。EC2 などは自分で更新 |
| Google Cloud(PHP) | App Engine スタンダード(8.2以上)は自動で更新済み。Cloud Run は「自動ベースイメージ更新」が有効なら自動 | App Engine フレキシブルは再デプロイ。Cloud Run は自動更新が無効なら再ビルドと再デプロイ |
| Microsoft Azure(PHP) | PHP の更新を強く推奨し、WAF のカスタムルールを案内 | App Service の PHP の更新時期は、公式の告知を確認できず |
| WordPress.com などの Automattic 系(PHP) | WordPress.com、WordPress VIP、Pressable などは保護済みと告知 | 作業なし |
出典: Vercel の告知、Heroku の PHP の変更履歴、Cloudflare のブログ、AWS のセキュリティ告知、Google Cloud のセキュリティ告知、Azure のブログ、Automattic の告知(いずれも2026年10月22日確認)
Netlify、Render、Cloudflare Workers、AWS Lambda、AWS Amplify は、今回の Node.js の修正についての告知を確認できませんでした。AWS Lambda のマネージドランタイムは、既定の「自動」モードなら AWS が順次更新します。コンテナイメージで作った関数は、自分で作り直して再デプロイします。
Railway は同じ21日に、環境変数を保存するシステムへの不正アクセスを公表しました。PHP と Node.js の脆弱性とは別の件ですが、調査のあいだはビルドとデプロイが止まっており、修正版を再デプロイできない状態でした。
公的機関
- IPA: 10月21日、修正版の公開前に、PHP を使っているシステムの洗い出しと、修正版をすぐに適用できる準備を求める告知を出しました。その時点では悪用は確認していないと書いています
- JVN: 10月22日、JVNVU#99905564 として PHP の2件を掲載しました
- 国家サイバー統括室: X で、修正版をすぐに適用できない場合はサイトの一時停止もリスクを下げる手段になると呼びかけました
出典: IPA の告知、JVNVU#99905564、国家サイバー統括室の投稿(いずれも2026年10月22日確認)
Node.js の10件について、IPA、JVN、JPCERT/CC の注意喚起は確認できませんでした。
自分で確かめる手順
PHPの版を確かめる
- WordPress: 管理画面の「ツール」→「サイトヘルス」→「情報」→「サーバー」に PHP の版が出ます
- レンタルサーバー: 管理画面の PHP の設定画面で、ドメインごとの版を確かめます
- VPS や自社サーバー:
php -vで版を確かめます。Web サーバーから動く PHP と、コマンドで動く PHP が別のこともあるので、PHP-FPM の版も確かめます
上流(PHP 公式)の版番号より古く見えても、修正済みのことがあります。たとえば Ubuntu 24.04 の PHP は、8.3.6-0ubuntu0.24.04.13 で修正が入っています。OS のパッケージを使っている場合は、配布元のセキュリティ情報(Ubuntu は USN-8948-1、Debian は DSA-6574-1)のパッケージ番号と比べます。
Node.jsの版を確かめる
- 手元や自社サーバー:
node -vで確かめ、22.23.4、24.22.1、26.12.1 以降に上げます。nvm を使っているならnvm install 24.22.1のように版を指定します - Docker: 公式の
nodeとphpのイメージは修正版に更新済みです。ベースイメージを取得し直してイメージを作り直し、再デプロイします - 常駐しているプロセス: 更新したあと、Node.js のアプリや PHP-FPM を再起動しないと、古い版のまま動き続けます
- Vercel などの PaaS: 実行中の関数で
process.versionを出力させると、本番で動いている版が分かります
不審な動きがないか見る
Amazon は、修正版を当てたあとに、次の点を見るよう勧めています。
- Web サーバーのログに、不審なリクエストがないか
- POST の本文に
PHP_SESSION_UPLOAD_PROGRESSという文字列を含むリクエストがないか - サーバー上で、想定外のプロセスの実行やファイルの変更がないか
すぐに更新できないときの緩和策
PHP 公式は「更新だけが完全な対策」としたうえで、更新までのあいだ攻撃の経路を減らす設定を挙げています。どれも経路の一部を塞ぐだけで、これで安全になるわけではありません。
| 対象 | 設定 | 注意 |
|---|---|---|
| CVE-2026-109618 | memory_limit=-1 を管理者側の設定で固定し、post_max_size を小さくする(アップロードなしなら 8M、ありなら 32M)。Web サーバーやプロキシで、リクエストの大きさや項目の数を制限する |
RLIMIT_AS、RLIMIT_DATA は脆弱な処理を引き起こすので使わない |
| CVE-2026-109619 | session.upload_progress.enabled=0 にし、すべてのワーカーを再起動する。PHP 8.5 は fatal_error_backtraces=0 も設定する |
ini_set() や .user.ini では効かない。php.ini か FPM のプール設定に書く |
設定を変えられない共用レンタルサーバーの利用者は、事業者の対応を待つことになります。国家サイバー統括室や KAGOYA が案内しているように、問い合わせフォームなど止めても困らない部分を一時的に止めるのも手です。
WAF(Cloudflare、AWS WAF、Azure WAF、Vercel の WAF)は時間を稼ぐ手段です。どの会社も、WAF だけで済ませず更新するよう明記しています。
誤解されやすい点
緊急メンテナンスをした会社が被害を受けたわけではない
pixiv、Cygames、BASE などが21日に緊急メンテナンスをしましたが、各社は予防のための停止と説明しています。エックスサーバーは不正アクセスへの対応ではないと明記し、pixiv は不正アクセスや情報流出は現時点で確認していないと告知しています。なお、pixiv と Cygames の告知の本文には「PHP」とは書かれておらず、PHP との結びつきは報道によるものです。
サイトを見に来た人が何かをする必要はない
サイトを閲覧する人や、WordPress で記事を書くだけの人が、自分で PHP を更新する話ではありません。共用レンタルサーバーなら事業者が更新します。自分で作業が要るのは、VPS や自社サーバー、自前のコンテナで PHP や Node.js を動かしている人です。
WordPress.com の短い停止は今回のPHPとは無関係
WordPress.com は、21日の短時間の停止は PHP の問題とは関係がないと投稿しています。
「@php_net」というXアカウントは公式ではない
X の @php_net は版番号と CVE 番号こそ公式と同じですが、リンク先は php.net ではない別のドメインです。一次情報は php.net で確かめてください。
OBS Studio本体が危ないわけではない
一時、配信ソフトの OBS Studio が危ないという投稿が広がりましたが、PHP を使っていたのは OBS の公式サイトで、ソフト自体ではないと訂正されています。
よくある質問
php2shellとは何ですか?
2026年10月21日に修正版が公開された、PHP の2件の脆弱性(CVE-2026-109618、CVE-2026-109619)の通称です。ログインなしで外からサーバーを乗っ取られるおそれがあり、深刻度は CVSS v4.0 で 9.2 です。修正版は PHP 8.5.12、8.4.27、8.3.36、8.2.35 です。
エックスサーバーを使っています。何かする必要はありますか?
エックスサーバーは、10月22日6時44分に PHP 8.2〜8.5 の全サーバーへの適用完了を告知しています。古い版は順次対応中です。管理画面の再開後、利用状況によって追加の対策を求める場合があると案内しているので、管理画面のお知らせを確かめてください。
WordPressのプラグインを更新すれば直りますか?
直りません。問題は WordPress を動かしている PHP 自体にあります。WordPress 本体やプラグインの更新ではなく、PHP の更新が必要です。共用レンタルサーバーなら事業者が更新します。
Vercelを使っています。再デプロイは必要ですか?
Node.js 22.x か 24.x を使っているなら、Vercel は版の設定を変える必要はないとしています。20.x を使っているなら、22.x か 24.x に変えて再デプロイします。本番で動いている版は、関数の中で process.version を出力すると確かめられます。
PHPの版番号が古いままです。直っていないのですか?
そうとは限りません。mixhost のように、版番号を変えずに修正を当てる事業者があります。Ubuntu や Debian のパッケージも、上流より古い番号で修正が入っています。事業者や配布元の告知で確かめてください。
Node.jsの脆弱性はPHPほど危ないですか?
最も重い CVE-2026-111497 は、攻撃者の用意した Brotli のデータを展開すると任意のコードを実行されるおそれがあります。ただし、Node.js が入っているだけでは影響せず、アプリやライブラリが外から来たデータを展開するときに影響します。PHP と違い、10月22日12時時点で実際に悪用されたという一次報告は見つかっていません。それでも、ほかに暗号化通信(TLS)の検証をすり抜けられる問題もあるので、早めに更新してください。
WAFを入れていれば更新しなくてよいですか?
いいえ、更新が必要です。Cloudflare、AWS、Vercel のいずれも、WAF は更新までの時間稼ぎで、更新の代わりにはならないと明記しています。特に Node.js の Brotli の問題は、サーバーが外から取りに行く応答が経路になるため、手前の WAF では防げません。
関連リンク
- 公式情報: PHP のセキュリティ告知、Node.js のセキュリティリリース告知、WordPress の告知、PHP Foundation の解説
- 研究者の解説: Wiz の研究報告
- 配布元: Ubuntu USN-8948-1、Debian DSA-6574-1
- AI事業(AIコーチング、週次AIリサーチ): 当社の AI 導入支援
AI エージェントの開発や運用に関する他のリサーチは、この下の一覧にあります。