WordPress に重大な脆弱性。7.1.2 への更新と、被害の確かめ方
どんな危険があるのか、何をすればいいのかを、このサイトで更新と点検をした手順と一緒にまとめます。
9 月 22 日に、WordPress 7.1.2 が公開されました。ログインしていない攻撃者が、テーマの外にある PHP ファイルを読み込ませられる脆弱性(CVE-2026-87902)の修正です。WordPress 公式の深刻度は、いちばん高い Critical です。4.7 から 7.1.1 までが対象で、直前に出た 7.1.1 も含まれます。
このサイトも WordPress で動いているので、私も 9 月 24 日に 7.1.2 へ更新しました。あわせて被害がないかも点検したので、公式の発表を読んで分かったことと、実際にやった手順をまとめておきます。
何が起きる脆弱性なのか
WordPress は固定ページを表示するとき、テーマの中から「page-ページ名.php」のようなテンプレートを探して読み込みます。今回の穴は、この探し方にありました。
URL のページ名に細工をすると、テーマのフォルダの外を指すファイル名を作れてしまいます。その結果、サーバーにある PHP ファイルを、攻撃者が選んで読み込ませられるんです。条件がそろうと、攻撃者のコードを実行される(RCE)おそれがあります。
7.1.2 では、読み込む前に「そのファイルが本当にテーマの中にあるか」を確かめる処理が加わりました。
どんなサイトが危ないのか
公式のアドバイザリによると、コードの実行まで進むのは、次の 2 つがそろったときです。
- 使っているテーマの直下に、名前が「page-」で始まるフォルダがある。Twenty Twelve、Twenty Fourteen のほか、Neve・Hestia・Sydney などが当てはまります
- 足がかりになる PHP ファイルがサーバーにある。代表例は PEAR の pearcmd.php と、PHP の設定 register_argc_argv = On の組み合わせです。Docker 公式の PHP イメージや、PHP 8.5 未満の cPanel の既定構成が当てはまります
両方がそろうと、ログインなしでサイトを乗っ取られるおそれがあります。たとえば、次のようなことが起こりえます。
- 知らない管理者ユーザーを作られる
- ページを書き換えられ、スパムや詐欺サイトへの誘導を埋め込まれる
- データベースのパスワードを読まれ、会員情報や問い合わせの内容を持ち出される
- 同じサーバーに置いているほかのサイトにも被害が広がる
このサイトは、2 つの条件のどちらにも当てはまりませんでした。それでも、知った日のうちに更新しています。自分の環境が条件に当てはまるかを正確に判断するのは、けっこう難しいんです。テーマを替えたり、サーバーの設定が変わったりすれば、条件はすぐに変わります。
まずは、今のバージョンを確かめて更新する
管理画面の「ダッシュボード」→「更新」で、今のバージョンが分かります。修正版は、系列ごとに出ています。
| 使っている系列 | 修正版 |
|---|---|
| 7.1 | 7.1.2 |
| 7.0 | 7.0.6 |
| 6.9 | 6.9.9 |
| 6.8 | 6.8.10 |
| 6.7 以前(4.7 まで) | 各系列の最新版(例:6.7.9、6.5.12、4.7.37) |
| 4.6 以前 | 修正版なし。新しい版への移行が必要です |
テーマやプラグインを最新にしても、今回の穴はふさがりません。WordPress 本体の更新が必要です。更新の前には、ファイルとデータベースのバックアップを取っておきます。終わったら、トップページや問い合わせフォームなど、よく使うページが表示されるかを確かめてください。
ここで、ひとつ反省があります。このサイトは 7.1 のまま止まっていて、7.1.1 も入っていませんでした。改ざん対策として、本体のファイルを Web サーバーからは書き換えられないようにしていたんです。その設定が、WordPress の自動更新まで止めていました。
自動更新をオフにしていた、権限の関係で更新に失敗していた、ということはほかのサイトでも起こりえます。「自動更新にしてあるはず」と思っているサイトほど、今のバージョンを一度見てみてください。
更新したら、被害がないかも確かめる
更新で穴はふさがりますが、それまでに入られていないかは別の話です。このサイトでは、次のところを見ました。
- ユーザー一覧に、知らない管理者がいないか
- 投稿や固定ページに、覚えのないものが増えていないか
- WordPress 本体のファイルが、公式のファイルと一致するか
- 画像などを置く wp-content/uploads に、PHP ファイルが紛れていないか
- サイトの URL や、ユーザー登録の設定が変わっていないか
結果は、どれも問題なしでした。アクセスログにも、この脆弱性を狙ったらしいアクセスは見当たりません。ログイン画面への総当たりは相変わらず来ていますが、どれも入口で止まっています。
気をつけたいのは、攻撃の中身がアクセスログに残らない送り方もあることです。ログがきれいでも、ユーザーやファイルの点検とセットで判断してください。見覚えのない変更が見つかったら、作業を重ねる前に、ホスティング会社や保守をお願いしている人に相談するのが安全です。
修正の中身と点検の手順は Zenn にまとめます
修正前後のコード、条件に当てはまるかを調べるコマンド、git で管理しているサイトでの更新手順は、後日 Zenn の記事にまとめる予定です。
WordPress でサイトを運営している人は、まず今のバージョンを確かめてみてください。