こんにちは。雷神久(ライジング)です。
いま、世界中および日本国内のWeb業界・ITインフラを揺るがす極めて深刻なセキュリティ問題が連日ニュースを騒がせています。
2026年10月21日、PHP公式開発チームより緊急セキュリティリリースが公開され、認証不要で遠隔からサーバーを乗っ取ることが可能なリモートコード実行(RCE)の脆弱性2件が公表されました。セキュリティ研究者や各国のセキュリティ機関の間では、この一連の脆弱性は「PHP2Shell」と呼ばれています。
共通脆弱性評価システム「CVSS v4.0」での深刻度スコアは「9.2(最高レベルのCritical)」。すでに国家サイバー統括室やIPA(情報処理推進機構)、JPCERT/CCが緊急警告を発出しており、大手ホスティング事業者や自治体も緊急対応に追われています。
「自分のブログや会社のホームページは大丈夫なのか?」「具体的に何をすればいいのか?」――本記事では、このPHP問題の正体、脆弱性の技術的メカニズム、そして今すぐ実行すべき具体的な対策手順を雷神久が分かりやすく徹底解説します!
この記事でわかること!
- PHP2Shellの正体:CVSS 9.2を記録した未認証リモートコード実行(RCE)脆弱性
- 対象CVE番号:CVE-2026-109618(OOMエラー処理)とCVE-2026-109619(グローバル状態の残留)
- 深刻な社会的影響:自治体・大手サーバー会社の緊急メンテと中小企業の「丸投げ放置サイト」問題
- 修正済み安全バージョン:PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 の一覧とEOLの危険性
- 今すぐやるべき5大対策:バージョン確認法、アップデート、WAF適用、委託先確認テンプレート
1. いま何が起きている?「PHP2Shell」の正体と社会的大混乱
PHPは、世界中のWebサイトの約7割以上、そしてWordPressをはじめとする無数のCMSやWebアプリケーション、API基盤で採用されているWebの基幹プログラミング言語です。
今回公表された「PHP2Shell」は、そのPHPのコアランタイム自体に潜んでいた致命的な不具合であり、以下のような破滅的な特徴を持っています。
PHP2Shellが極めて危険視される3大理由
- ログイン認証が一切不要(未認証で攻撃可能):管理者パスワードやアカウントがなくても、外部から細工したHTTPリクエストを1本送り込むだけでサーバー内部に侵入可能。
- 任意のOSコマンドが実行可能(RCE:Remote Code Execution):Webサーバー上で攻撃者が好きなプログラムを自在に起動できるため、サイトの完全改ざん、データベースの持ち出し、ランサムウェアの設置など何でも可能。
- デフォルト機能(セッションアップロード等)が悪用可能:特殊なプラグインを入れていなくても、PHP標準の機能群(`session.upload_progress` 等)を悪用して攻撃が成立する。
なぜ日本国内でこれほど大きなニュースになっているのか?
連日ニュースを騒がせている最大の理由は、「日本の企業・自治体・店舗サイトにおけるPHPの放置率の高さ」にあります。
大手レンタルサーバー各社(さくらインターネットや各種クラウド事業者)は、自社が管理する共有サーバーに対して緊急のパッチ適用や一時的な機能制限を実施しました。しかし、以下のような現場ではパニックが発生しています。
- 中小企業の「制作会社丸投げ」問題:数年前に外部の制作会社に作ってもらって以来、一度もPHPの更新を行っておらず、自社サイトがどのバージョンで動いているか誰も把握していない。
- すでに保守契約が切れている:制作会社との契約が終了しており、緊急のバージョンアップを誰に頼めばいいか分からず途方に暮れるケースが多発。
- サポート終了(EOL)バージョンの蔓延:PHP 7.4やPHP 8.0など、とっくに公式サポートが切れたバージョンを使い続けているサイトが国内に無数に残存している。
国家サイバー統括室やIPAが異例の緊急呼びかけを行った背景には、こうした「無防備な放置サイト」が一斉にサイバー攻撃の踏み台にされ、他社へのDDoS攻撃や個人情報流出の温床になることへの強い危機感があります。
2. 【図解】なぜ起きた?2つの脆弱性のメカニズム
今回公表されたPHP2Shellは、独立した2つの重大なCVE(共通脆弱性識別子)で構成されています。その全体構造と攻撃フローを図解にまとめました。

① CVE-2026-109618:OOMエラー処理におけるHeap Use-After-Free
PHPランタイムは、メモリ不足(Out-of-Memory / OOM)や致命的なエラーが発生した際、C言語の `longjmp()` 関数を用いて現在のリクエスト処理を強制中断し、安全に終了させる仕組みを持っています。
しかし、特定の実行コードパスにおいて、この `longjmp()` によるジャンプ処理が正しく考慮されておらず、「リクエストメモリが未初期化、または破損した状態のままクリーンアップルーチンが実行される」という重大な不具合が存在していました。
これにより、後続のリクエスト終了処理が解放済みのヒープメモリを不正に読み書きしてしまうHeap Use-After-Free(UAF)が発生し、メモリ空間の制御を奪われてリモートコード実行へと繋がります。
② CVE-2026-109619:解放後メモリを指し続けるグローバル状態の残留参照
PHPは処理の高速化のため、リクエスト単位のメモリ領域を一時的に指し示すグローバルステート(大域変数)を内部で保持しています。
通常、リクエストが終了するとこのグローバル状態は完全にクリアされなければなりません。しかし特定の条件下においてリセットが正常に行われず、「すでに解放されたリクエストメモリのアドレスをグローバルステートが指し続けたまま残存する(ダングリングポインタ)」現象が発生していました。
次の新しいHTTPリクエストが届いた際、PHPエンジンがこの残留した古い状態を参照して処理を開始してしまうため、攻撃者が送り込んだ任意のコードポインタへ実行フローがハイジャックされてしまいます。
セキュリティ研究者によって公開された実証コード(PoC)では、PHPのファイルアップロード進行度管理機能(session.upload_progress)が悪用可能であることが示されています。巨大なダミーリクエストを送り込んで意図的にOOMを引き起こし、破損したセッション領域にシェルコードを流し込むことで、ネットワーク越しにサーバーの管理者権限(シェル)が奪取されます。
3. 影響を受けるバージョンと修正済み安全バージョン一覧
現在利用しているPHPが以下の「修正済みバージョン」以降であるかを必ず確認してください。
| PHPメジャー系列 | 影響を受ける危険バージョン | 修正済み・安全なバージョン | 状態 |
|---|---|---|---|
| PHP 8.5系 | 8.5.11 以前の全バージョン | PHP 8.5.12 以降 | 公式パッチ提供済 |
| PHP 8.4系 | 8.4.26 以前の全バージョン | PHP 8.4.27 以降 | 公式パッチ提供済 |
| PHP 8.3系 | 8.3.35 以前の全バージョン | PHP 8.3.36 以降 | 公式パッチ提供済 |
| PHP 8.2系 | 8.2.34 以前の全バージョン | PHP 8.2.35 以降 | 公式パッチ提供済 |
| PHP 8.1 以前 (8.0 / 7.x / 5.x) |
すべてのバージョン | 公式パッチなし(EOL) | 超危険・移行必須 |
PHP 8.1以前(PHP 7.4や5.6等)はすでに公式サポートが終了(EOL)しているため、PHP開発チームからのセキュリティ修正パッチは一切提供されません。
現在も古いPHPを稼働させているサーバーは完全に無防備な状態に晒されています。サポート中のPHP 8.2〜8.4系へ即座にバージョン移行するか、OSディストリビューション(Ubuntu ESMやRHEL)の有償バックポートパッチを適用することが絶対不可欠です。
4. 今すぐ実施すべき5つの緊急対策ステップ
Web担当者やサイト運営者が今すぐ実行すべき具体的なアクションを5つのステップにまとめました。
ステップ1:自分のサイトのPHPバージョンを確認する
まずは自サイトがどのバージョンで動いているかを確認します。
- レンタルサーバー(ConoHa WING、エックスサーバー、さくら等)の場合:コントロールパネルにログインし、「サーバー設定」➔「PHP設定」または「PHPバージョン切替」メニューを開くことで現在のバージョンが表示されます。
- WordPressの管理画面から確認する場合:「ツール」➔「サイトヘルス」➔「情報」タブ➔「サーバー」アコーディオンを開くと「PHPバージョン」が記載されています。
- SSHターミナルから確認する場合:コマンド
php -vを実行します。
ステップ2:安全な修正バージョンへアップデートする
もし現在のバージョンが脆弱性の対象(PHP 8.2.34以前、8.3.35以前など)だった場合、直ちに最新版へアップデートを行ってください。
- レンタルサーバーの場合:管理画面のPHPバージョン選択から最新の安全なバージョン(PHP 8.2.35以上、8.3.36以上など)を選択して保存します。
- Linuxサーバー(Ubuntu / Debian)の場合:パッケージマネージャーを更新して最新セキュリティパッチを適用します。
sudo apt update && sudo apt --only-upgrade install php*-cli php*-fpm - RHEL / AlmaLinux / Rocky Linuxの場合:
sudo dnf upgrade php php-fpm
ステップ3:Docker・Kubernetesコンテナイメージを再ビルドする
見落としがちなのがDockerコンテナ環境です。ホストOSのパッケージを更新しても、コンテナ内にパッケージングされたPHPバイナリは古いままです。
Dockerfileのベースイメージ(例:php:8.3-fpm、php:8.2-apache)を最新のパッチ適用済みタグに更新し、必ず --no-cache オプションを付けて再ビルドおよびローリングデプロイを実行してください。
ステップ4:WAF(Web Application Firewall)の緊急ルールを有効化する
プログラムのアップデートに互換性検証の時間が必要な場合は、一時的な緩和策としてWAFの緊急シグネチャを有効化します。
- AWS WAF / Azure WAF / Cloudflare:各社とも「PHP2Shell」のPoCおよび悪意あるmultipart/form-dataリクエストを遮断する緊急ルールセットをすでに配信しています。マネージドルールの更新を確認してください。
- ※ただし、WAFはあくまで時間を稼ぐための応急処置です。根本的な解決にはPHP本体のアップデートが絶対に必要です。
ステップ5:制作会社・保守委託先への緊急確認(コピペ用メール文面)
「ホームページを外部の制作会社に作ってもらったため自分では触れない」という場合は、以下の文面をコピーして今すぐ担当窓口へ問い合わせてください。
【外部委託先・制作会社への確認メール文面例】
件名:【至急確認】2026年10月公開のPHP脆弱性(PHP2Shell / CVE-2026-109618・109619)に関する対応状況のお伺い
いつも大変お世話になっております。[会社名]の[担当者名]です。
連日ニュース等で報道されております、PHPの重大な未認証リモートコード実行脆弱性(通称:PHP2Shell / CVSS 9.2)についてご相談です。
弊社で運用委託しておりますWebサイト([サイトURL])について、以下の点をご教示いただけますでしょうか。
1. 現在稼働しているPHPのバージョン番号
2. 今回公表されたセキュリティ修正版(PHP 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 以降)へのアップデート対応状況、またはパッチ適用のご予定
3. サポート終了バージョン(PHP 8.1以前)に該当している場合、移行のご提案とお見積り
サイバー攻撃の標的となるリスクを避けるため、大変恐縮ですが状況のご確認とお返事をいただけますと幸いです。よろしくお願い申し上げます。
おすすめの厳選セキュリティ・バックアップ定番アイテム
万が一のサイバー攻撃やサーバー障害から大切なデータと認証基盤を守るために、ITプロフェッショナルが愛用するセキュリティ定番アイテムをご紹介します。
5. まとめ:Web担当者が今すぐ確認すべきこと
今回の「PHP2Shell」脆弱性は、「ログイン画面を設けていない静的な紹介サイトだから関係ない」という油断を完全に打ち砕く、言語レベルの最悪のリモートコード実行バグです。
「現在は問題なくWebサイトが表示されているから大丈夫」と放置している間に、バックドアを仕掛けられ、ある日突然他社への攻撃の踏み台にされて警察や関係機関から連絡が入る――そんな最悪の事態が現実になり得ます。
- 自社サイトのPHPバージョンを今日中に必ず確認する
- PHP 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 へのアップデートを即座に実施する
- PHP 8.1以下のサポート切れ環境は、これを機に最新環境へ移行する
サイトと利用者のデータを守るため、本記事で紹介した手順を今すぐ実践し、安全なWeb運用を徹底してください!



コメント