【ITニュース解説】What the WordPress 4.7.0 to 7.1.1 file inclusion bug teaches about patch windows
2026年10月03日に「Dev.to」が公開したITニュース「What the WordPress 4.7.0 to 7.1.1 file inclusion bug teaches about patch windows」について初心者にもわかりやすく解説しています。
ITニュース概要
WordPressの脆弱性(CVE-2026-87902)が修正されたが、パッチ公開後数時間で攻撃が始まった。これは、テーマ名操作によりPHPファイルを不正に読み込ませるもので、悪用されるとコード実行の危険がある。この事例は、迅速なアップデートとセキュリティ対策が極めて重要であることを示唆している。
ITニュース解説
WordPressのセキュリティに関する重要な事例を解説する。これは、システムエンジニアを目指す皆さんにとって、実際のシステム運用におけるセキュリティの厳しさや、迅速な対応の重要性を学ぶ良い機会となるだろう。
2026年9月22日、WordPressはバージョン7.1.2を緊急でリリースした。このアップデートの目的は、「CVE-2026-87902」という識別番号が付けられた深刻な脆弱性に対処するためである。この脆弱性は「リモートファイルインクルージョン」と呼ばれる種類のもので、ウェブサイトの運営に大きな危険を及ぼす可能性がある。この事件で特に注目すべきは、修正プログラム(パッチ)が公開されてからわずか数時間のうちに、この脆弱性を悪用しようとする攻撃が確認された点だ。そして、この修正は、WordPress 4.7というかなり古いバージョンから、現在メンテナンスされているすべてのバージョンに遡って適用された。これは、多くのウェブサイトがこの脆弱性の影響を受ける可能性があったことを示している。
具体的に、この脆弱性は何だったのか。公式のアドバイザリによると、この問題はWordPressの「get_page_template()」という関数内のページテンプレートの解決ロジックに存在した。ページテンプレートとは、WordPressサイトで特定のページを表示する際に使用されるデザインや構造を定義したファイルのことだ。この脆弱性を悪用すると、認証されていない、つまりログインしていない攻撃者でも、この関数を操作して、ウェブサイトのアクティブなテーマディレクトリ(現在使われているデザインのファイルを格納している場所)の外にある、サーバー内の読み取り可能なPHPファイルを意図的に読み込ませることができた。これが「ファイルインクルージョン」という脆弱性だ。通常、ウェブサイトは決められた範囲のファイルしか読み込まないが、この脆弱性はそのルールを破らせてしまう。
ただし、この脆弱性を単なるファイルインクルージョンからさらに深刻な「コード実行」にまで発展させるには、いくつかの特定の条件が必要だった。一つ目の条件は、現在使用されている親テーマまたは子テーマの中に、「page-」という名前で始まるトップレベルのディレクトリが存在することだ。WordPressのテーマには、特定のページ表示のために「page-〇〇.php」のような名前のテンプレートファイルが使われることがあり、その関連でこのようなディレクトリが存在することがある。二つ目の条件は、ウェブサービスアカウント(通常、ウェブサーバーがファイルを読み書きする権限を持つアカウント)が読み取れるPHPファイルがサーバー上に存在することである。実際に観測された攻撃の例では、「pearcmd.php」というファイルが悪用された。このファイルは、多くのLinuxディストリビューションに付属するPEARパッケージマネージャーの一部として提供されていることが多い。もし、このファイルがウェブサーバーからアクセス可能な場所にあり、さらにPHPの設定で「register_argc_argv」というオプションが有効になっている場合、攻撃者はこのファイルインクルージョンを悪用して、サーバーの一時ディレクトリに悪意のあるファイルを書き込み、最終的には攻撃者自身が作成したコードを実行させることが可能になった。これらの条件は、常に全てのWordPressサイトで満たされるわけではないため、全てのサイトが普遍的に悪用されるわけではない。しかし、実際にセキュリティ企業が運営するハニーポットネットワークでは、この脆弱性を狙った68件もの攻撃試行が記録されており、攻撃は確実に発生していたことがわかる。攻撃者はまず無害なコアファイルを試して偵察を行い、その後でPEARのインストールパスに標的を絞って攻撃を開始するという、典型的な偵察から悪用への流れが見られた。
この一件で最も教訓的なのは、「パッチウィンドウが実質的にゼロであった」という事実だ。パッチが公開されたまさにその日に、最初の攻撃が記録された。なぜこれほど速いのか。それは、自動化されたスキャナーの存在が大きい。これらのスキャナーは、個々の組織の内部構造や状況を理解する必要はない。ただ、攻撃対象となるウェブサイトのリストと、脆弱性を試すためのリクエストのテンプレートがあればよい。WordPressは世界中で非常に多くのサイトで利用されており、その多くが利用しているWordPressのバージョンを外部から判別できるため、自動スキャナーにとって格好の標的となる。この事実は、WordPressを運営している人々にとって非常に直接的な意味を持つ。つまり、「この脆弱性が実際に悪用されるかどうか」を考えることはもはや無意味だ。なぜなら、すでに悪用されている証拠が多数存在しているからだ。本当に重要なのは、「自分のサイトが、脆弱性のあるバージョンから、修正された最新バージョン(7.1.2、あるいはバックポートされた4.7.37などのバージョン)へどれだけ迅速に移行できるか」という一点に尽きる。
しかし、一刻も早くアップグレードしたいと思っても、マネージドホスティングを利用していたり、ファイル権限が厳しく設定されていたり、あるいは大規模なサイトでステージング環境(本番環境に影響を与えずにテストするための環境)での確認が必要だったりすると、ワンクリックでの簡単なアップグレードは難しくなる場合がある。そこで、アップグレードが完了するまでの間に、一時的にサイトの危険度を下げるための「緩和策」がいくつか提案された。一つは、ウェブアプリケーションファイアウォール(WAF)というセキュリティ機器やソフトウェアを使って、サイトへのリクエストの中から、この脆弱性を悪用しようとする「パス横断攻撃」のパターンをブロックすることだ。特に「pagename」というパラメータに注目し、不正なパターンを検出する。ただし、観測された攻撃では様々なエンコーディング(文字の表現形式)が使われていたため、一つのルールだけでは全ての攻撃を防ぎきれない可能性があった。もう一つは、PHPの設定ファイルで「register_argc_argv」というオプションを無効にすることだ。これにより、PEARベースの攻撃チェーンは阻止できる。しかし、これはあくまで攻撃の一部を止めるだけであり、根本的なファイルインクルージョンという脆弱性自体は残ってしまう点に注意が必要だ。さらに、サーバー上の「/tmp」や「/var/tmp」といった一時ファイルを保存するディレクトリを定期的にチェックし、見慣れないPHPファイル(例えば「wp-pear-rce-flag.php」や「poc87902.php」、あるいは「luci_」や「zeta_」といったランダムな名前のファイル)がないかを確認することも推奨された。これらは攻撃者が作成した悪意のあるファイルである可能性が高いからだ。最後に、現在使用しているテーマを監査し、「page-」というパターンで始まるディレクトリがないかを確認することも重要だ。WordPressの公式テーマであるTwenty TwelveやTwenty Fourteenなどが、この脆弱性の前提条件を満たしていたテーマの例として挙げられている。
今回のケースは、日頃のシステムメンテナンスのあり方にも大きな示唆を与えている。多くのWordPressサイトでは、セキュリティリリースを含む自動的なバックグラウンドアップデートが有効になっている。これにより、影響を受けるサイトの数は減らされている。しかし、依然として問題となるのは、古いバージョンに固定されていたり、プラグインによって自動アップデートが無効化されていたり、ホスティングサービスのPHPランタイムが何年も更新されていないような「取り残された」サイトだ。システムを守る側の立場、つまり「ディフェンダー」にとって、今回の件から三つの恒久的な変更を検討する価値がある。まず、もし互換性の問題など、明確に文書化された理由がない限り、WordPressのマイナーアップデートとセキュリティアップデートの自動更新を常に有効にしておくべきだ。次に、インストールされているテーマのリストをきちんと管理し、どのテーマが「page-」ディレクトリの前提条件を満たすかを把握しておくことが重要だ。そして最後に、一時ディレクトリの監視を、今回のようなセキュリティレポートが出た時にだけ行う一時的なチェックではなく、インシデント対応プロセスの一部として継続的に実施する体制を整える必要がある。
今回の脆弱性自体は、ウェブサイトの全てのページが表示される際に、その裏側でテンプレートを解決するためのコードが動いているという事実を再認識させた。つまり、多くの人が見るウェブサイトの「顔」を構成するコードは、常に攻撃対象になり得るということだ。そして、今回の事象から得られる最も大きな教訓は、脆弱性が公に開示されてから、実際にそれが悪用されるまでの「時間的な間隔」が、ますます短くなっているという厳然たる事実だ。セキュリティパッチが公開された瞬間に、攻撃者が動き出すというこの現実を理解し、迅速な対応を常に心がける必要がある。