1. 今回、何が起きたのか
2026年10月21日(日本時間では21日深夜)、PHPの開発チームが緊急の修正版を公開しました。対象は「CVE-2026-109618」「CVE-2026-109619」という2つの脆弱性で、まとめて「PHP2Shell」と呼ばれています。
そもそもPHPって?
PHPは、Webサイトを動かすためのプログラミング言語です。DrupalもWordPressも、PHPで動いています。つまりPHPは、CMSを支える「土台」にあたる部分です。
どれくらい危険なの?
深刻度(CVSS v4.0)は10点満点中の9.2で、最も高い「Critical(致命的)」に分類されています。この脆弱性を悪用されると、ログインしていない第三者が、外からサイトのサーバーに勝手に命令を実行できてしまう可能性があります(これを「リモートコード実行(RCE)」と呼びます)。サイトの改ざんや情報の流出、乗っ取りにつながりかねません。
押さえておきたいポイント
- 修正版より古いPHPは、すべて対象です。サーバーの種類(PHP-FPMやApacheなど)を問わず影響があり、とくにApacheのモジュールとしてPHPを動かしている構成(mod_php)は、危険度が高いとされています。
- 修正版はPHP 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12です。お使いのバージョンに合わせて更新が必要です。
- PHP 8.1以前には、公式の修正版がありません。7.4・8.0・8.1は、OSなどの提供元が配るパッケージや、PHPが公開した最小限の修正(ソースコード)で対応できる場合があります。7.3以前(PHP 5を含む)は修正されないため、新しいバージョンへの移行が必要です。
- 公開の4日前(10月17日)には、攻撃の試行が確認されていました。AWS(Amazonのクラウド部門)の調査チームが報告しています。
- OSやレンタルサーバーの提供元が、独自に修正を反映している場合があります。その場合、バージョン番号が古いままでも修正済みのことがあるため、番号だけで判断せず、提供元の案内も確認しましょう。
- 研究者は、WordPress・Drupal・Joomla・Magentoでも攻撃が成立することを報告しています。
その後、状況は大きく動いています。2026年10月26日、アメリカのサイバーセキュリティ機関CISAが、この2つの脆弱性を「悪用が確認された脆弱性のリスト(KEVカタログ)」に追加しました。IPA(情報処理推進機構)も、10月27日にこの件を追記しています。なお、IPAは「国内での攻撃被害の事例については把握していない」としています(いずれも2026年10月28日時点)。被害が国内で確認されていないからといって、安心はできません。修正版が公開されると、攻撃する側もその内容を調べ始めるためです。
参考:IPA - PHPの脆弱性対策について(CVE-2026-109618、CVE-2026-109619:PHP2shell)
CISA - CISA Adds Two Known Exploited Vulnerabilities to Catalog
Tenable - php2shell (CVE-2026-109618, CVE-2026-109619) FAQ
ITmedia NEWS - PHPに「緊急」レベルの脆弱性2件
2. 「CMSを最新にしていれば安全」ではありません
Webサイトの管理をしていると、まずCMS本体のバージョンを気にされる方が多いと思います。しかし今回、WordPressは「本体の更新は不要」、Drupalも同様でした。CMSを最新にしていても、土台のPHPが古ければ、サイトに侵入される可能性があるのです。
家にたとえると、どれだけ立派な家具(CMS)を揃えても、土台が壊れていたら安全とは言えませんよね。Webサイトは、次のような層が積み重なってできています(下から順に)。
- 実行環境:PHP、Webサーバー、OS、データベースなど
- CMS本体:Drupal、WordPressなど
- モジュール/プラグイン:CMSに機能を追加する部品や、自社で開発したプログラム
- コンテンツ・運用:ユーザーの権限設定、パスワード、公開範囲など

どの層に問題があっても、サイト全体の乗っ取りにつながる可能性があります。「CMS本体の更新」しか見ていないと、1層目(実行環境)と3層目(モジュール/プラグイン)が見えなくなってしまいます。
3. 同じ月に、Drupalでも重要な修正がありました
PHPの件の少し前、2026年10月中旬には、Drupalでも別の重大な脆弱性が修正されています。こちらも、外部からサーバーに命令を実行されてしまう可能性があるものです。
- CVE-2026-108097:Drupal本体(コア)の「Field UI」モジュールの脆弱性です。現在サポートされているすべてのバージョンが対象です。
- CVE-2026-108099:追加モジュール(contribモジュール)の「Entity List」の脆弱性です。
- 修正版:Drupal 10.6.19 / 11.3.19 / 11.4.10、Entity List 3.0.10
- Drupalのセキュリティチームは、「数時間〜数日で攻撃コードが作られる可能性がある」と警告しています。
ここで注目したいのは、Drupal本体だけでは悪用できず、追加モジュールや自社開発のプログラムが「攻撃の入り口」になるとされている点です。問題が本体、モジュール、実行環境のどこに潜んでいても、結果は同じ、サイトへの侵入です。
引用:BleepingComputer - Drupal patches critical RCE flaws, warns exploits may emerge soon
4. CMSごとの違いは? それでもDrupalが優れている理由
どのCMSも、PHPで動く以上、今回のようなPHP本体の問題からは逃れられません。違いが出るのは、脆弱性が見つかったときに、どれだけ備えができていて、どれだけ素早く対応できるかです。この点で、私たちはDrupalが優れていると考えています。
Drupalが備えている「守りの仕組み」
- セキュリティチームによる一元的な対応:Drupalには、本体と追加モジュールの脆弱性をまとめて調整・公開する公式のセキュリティチームがあります。今回の本体の修正でも、事前の告知があったうえで修正版が公開されました。
- 危険度を正直に伝えてくれる:「数時間〜数日で攻撃コードが作られる可能性がある」と率直に知らせてくれるので、運用する側が、どれくらい急ぐべきか判断しやすくなります。
- Drupal Steward(ドルーパル・スチュワード):一部の既知の攻撃を、更新が間に合う前でも防いでくれる仕組みです(すべての攻撃を防げるわけではありません)。
- Composer(コンポーザー)による管理:Drupal本体やモジュールのバージョンを、コードでまとめて管理できるツールです。「何がどのバージョンで動いているか」を把握しやすく、更新も手順どおりに進められます。
- 当面の回避策が示される:今回も「field_ui モジュールを無効にする」という具体的な回避策が案内されました。
ノーコードツール・SaaSを使う場合に気をつけたいこと
プログラミングの知識がなくてもサイトを作れる「ノーコードツール」や、インターネット経由で使う「SaaS(サース)」型のサービスは、手軽なのが魅力です。たとえば、Wix(ウィックス)、Jimdo(ジンドゥー)、STUDIO(スタジオ)などが、Webサイト作成サービスとしてよく知られています。実行環境の更新を提供元が行ってくれる点は、利用する側にとっての利点でもあります。ただ、セキュリティの面では、次のような点に気をつけたいところです。
※ここで挙げたサービスに問題があるという意味ではありません。「自分で確認・管理できる範囲が限られる」という、この種のサービスに共通する特徴についてのお話です。
- 自分で確認・コントロールできない範囲が増える:実行環境のバージョンや、修正がいつ適用されるのかがわからず、すべて提供元に任せることになります。
- 「何を使っているか」の把握が難しくなる:部署ごとにツールが導入されると、会社全体で「何が、どこで動いているか」を把握しにくくなります。
- 権限や公開範囲の管理がバラバラになる:ツールごとに設定が違うため、「必要な人だけに必要な権限を与える」といったルールを全体で徹底しにくくなります。
Drupalは、開発者があらかじめ安全で丈夫な土台を作り、使う人はその範囲の中で自由に、すばやくコンテンツを更新できる設計です。手軽さと管理のしやすさを両立したい企業サイトには、Drupalが優れた選択肢だと私たちは考えています。
どのCMSでも変わらないこと
ただし、PHP本体の問題はCMSの更新機能では解決できません。サーバー側(ホスティング会社や自社のインフラ)で対応する必要があります。「PHPの更新は誰の担当か」がはっきりしていないサイトほど、対応が遅れてしまいます。
つまり、Drupalの仕組みと、PHPを含む実行環境まで見ている運用体制の両方があって、はじめて守れるということです。
5. 今回の件から学べる、5つの運用ポイント
(1) 「何が、どのバージョンで動いているか」をすぐ答えられるようにする
緊急のときに最初に必要なのは、PHP・CMS・モジュール・OSのバージョン一覧です。これがないと、影響があるかどうかを調べるだけで数日かかってしまいます。バージョンの棚卸しは、何もない平常時にやっておく仕事です。
(2) サポート終了(EOL)の環境を放置しない
PHP 8.1以前には、公式の修正版がありません。「動いているから触らない」で何年も経ったサイトほど、いざというときに打つ手がなくなります。サポートが終わる前に、移行の計画を立てておくことが、いちばん確実な対策です。
(3) すぐ更新できる体制を先に作っておく
今回のPHPでは、公開前から攻撃の試行が確認されていました。Drupalでも「数時間〜数日」と警告されています。次のような体制があれば、緊急の更新も「大事件」ではなく「いつもの作業」になります。
- 本番と同じ構成のテスト用サイト(ステージング環境)で確認してから、本番に反映する流れ
- 緊急のときに、判断・承認できる連絡ルート
- 更新後の動作確認チェックリスト
- 万一に備えたバックアップと、元に戻す手順
(4) 当面の回避策は「時間稼ぎ」。根本的な解決は更新だけ
まず大切なことは、PHP開発チームも「完全な回避策はなく、更新が唯一の確実な対策」としていることです。すぐに更新できない場合の時間稼ぎとして、たとえば次のような方法がありますが、どれも一部の攻撃を防ぐだけで、サイトが安全になるわけではありません。
- Drupal:使っていない field_ui モジュールを無効にする(Drupalが案内している回避策。こちらはPHPではなく、Drupalの別の脆弱性への対策です)
- PHP:
session.upload_progress.enabled=0などの設定を変更する(一部の攻撃経路に対する軽減策として、PHP公式が案内しています。設定後はPHPの再起動が必要です) - WAF(Webサイトへの不審な通信を見張って遮断する仕組み):Cloudflareなどが既知の攻撃を遮断するルールを提供していますが、あくまで一時しのぎで、その会社の仕組みを通る通信しか守れません
- 更新できないサーバーは、外部からのアクセスを遮断する、または一時停止することも検討する(IPAも案内しています)
あくまで修正までの時間稼ぎとして、更新の予定とセットで行いましょう。
(5) 「1つ破られても致命傷にならない」ように多層で守る
どれだけ更新を徹底しても、修正版が出る前に悪用される脆弱性(ゼロデイ)までは防げません。だからこそ、「侵入されてしまった後」を想定した備えも大切です。
- 管理画面にアクセスできる人や場所を制限する(IPアドレス制限・多要素認証)
- 必要最小限の権限で運用する(Webサーバーやデータベースの権限を絞る)
- 不審な動きを検知する仕組みを入れる(WAFや監視)
- 定期的なバックアップと、復旧の訓練
6. 今すぐ確認したいチェックリスト
- 本番環境のPHPバージョンを確認した
- 修正版(8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 以降)、またはOS提供元の修正パッケージが適用されている
- PHP 8.1以前の場合、移行の計画(または代わりの保護策)がある
- 更新したあと、PHPを再起動した(PHP-FPMなど)
- OSやレンタルサーバーを使っている場合、提供元が修正を反映しているか確認した(バージョン番号が古いままのこともあります)
- CMS本体・モジュールが、最新のセキュリティ更新になっている
- 10月17日以降のアクセスログやファイルの変更に、不審な点がない(AWSが確認した最初の試行が10月17日のため)
- レンタルサーバーやクラウドを使っている場合、提供元の対応状況を確認した
7. まとめ
今回のPHP2Shellからわかったのは、セキュリティは「どのCMSを選ぶか」だけでは決まらないということです。
- 脆弱性は、実行環境・CMS本体・モジュールのどこにでも潜んでいる
- 公開から悪用までの時間は短く、「すぐ更新できる体制」がそのまま守りの強さになる
- CMSの違いよりも、棚卸し・更新・多層防御といった運用の質が結果を左右する
そのうえで、セキュリティチームによる一元的な対応、Drupal Steward、Composerによる管理といった「守りの仕組み」を備えたDrupalは、守り続ける運用を支える土台として優れています。CMSの運用は「作って終わり」ではなく、「守り続ける」ことが大切です。
私たちは、Drupalを中心に、サイト公開後の保守やセキュリティ更新、PHPのバージョンアップ対応まで一貫してご支援しています。「自社サイトのPHPバージョンがわからない」「更新作業が特定の人に頼りきりになっている」「古い環境の移行を考えたい」といったお悩みも、お気軽にご相談ください。
参考:Unit 42 - Threat Brief: CVE-2026-109618, CVE-2026-109619
Rapid7 - CVE-2026-109618 and CVE-2026-109619