WordPressテーマの脆弱性を確認・解消する|既知の脆弱性を悪用した侵害を防ぐ

当ページは検証・整備中のドラフトです。
内容は実環境での検証や追加調査により変更される予定です。
参照:ページ公開・更新ポリシー

WordPressでは、本体やプラグインだけでなくテーマにも脆弱性が発見される。

テーマは外観を決めるだけのファイルではなく、PHPやJavaScriptなどのプログラムを含む。テーマによっては独自の機能も備えており、脆弱性が存在すれば攻撃に悪用されるおそれがある。

テーマを更新する目的

テーマの更新には、主に次の内容が含まれる。

  • 脆弱性の修正
  • 不具合の修正
  • 機能の追加や変更
  • WordPress本体への対応
  • PHPなど実行環境への対応

ここでは脆弱性の確認と解消に絞り、セキュリティ修正が提供されている場合は修正版への更新を優先する。

更新通知の意味するもの

WordPressの管理画面では、新しいテーマバージョンが提供されると更新通知が表示される。

ただし、通知が示すのは基本的に新しいバージョンが存在することであり、安全性を判定した結果ではない。

更新通知がなくても、最新版に未修正の脆弱性が存在したり、開発やサポートが終了していたりすることはある。反対に、長期間更新されていないという理由だけで、脆弱なテーマとも判断できない。

また、WordPress公式ディレクトリ以外から導入したテーマでは、開発元や販売元が独自の更新経路を用意していることもある。

更新通知だけに頼らず、脆弱性情報や開発状況まで含めて状態を確認する必要がある。

テーマの状態を判断する情報

テーマの状態は、一つの情報ではなく複数の要素から判断する。

確認項目確認する内容
現在のバージョンインストールしているバージョン
最新バージョン更新可能なバージョンがあるか
既知の脆弱性現在のバージョンが影響を受けるか
修正版脆弱性を解消したバージョンがあるか
WordPressとの互換性現在のWordPressへ対応しているか
開発状況更新履歴やサポート終了の告知など
入手元・更新経路どこから入手し、どの方法で更新するか
使用状態使用中か未使用か
親子関係親テーマ・子テーマとして利用しているか

特に「最新版であること」と「既知の脆弱性がないこと」は別の状態である。最新版でも未修正の脆弱性が存在する可能性があるため、両者を分けて確認する。

使用していないテーマも管理対象

テーマを無効化しても、通常はファイルがサーバ上に残る。

脆弱性の種類によっては、無効化されたテーマのファイルが攻撃対象となるため、無効化だけでは脆弱性への対処にならない

今後使用しないテーマは削除し、サーバ上に残すテーマを必要なものに絞る。

参考:WordPressの不要テーマ・プラグインを削除する

予備のWordPress標準テーマは1つ残す

ただし、未使用テーマをすべて削除するのがベストでもない。

WordPressのSite Healthは、不要なテーマの削除を推奨する一方、現在のテーマに問題が発生した場合のフォールバックとして、WordPress標準テーマを利用可能な状態にしておくことも推奨している。

そのため、WordPress標準テーマを予備として1つ残す

予備テーマのサポートが終了した場合や現在のWordPressとの互換性に問題が生じた場合は、その時点の新しい標準テーマへ入れ替えればよい。複数世代を蓄積せず、予備は1つに保つ。

親テーマと子テーマ

子テーマを使用している場合は、親テーマも管理対象となる。

子テーマは親テーマの機能やファイルを利用するため、親テーマに脆弱性が見つかれば、子テーマを使用しているサイトも影響を確認する必要がある。

また、親テーマを直接編集していると、更新によって変更内容が上書きされることがある。テーマ本体と独自のカスタマイズを分離しておけば、修正版を適用しやすい。

子テーマの作成やカスタマイズ方法は別のテーマとなるため、ここでは扱わない。

テーマの開発状況

テーマが継続して保守されているかも確認したい。

主な判断材料は、開発元によるサポート終了の告知、更新履歴、最終更新時期、現行WordPressへの対応状況、配布・販売状況などである。

開発元がサポート終了を明示していれば、継続利用を見直す明確な材料となる。

一方、最終更新が古いという理由だけで開発終了とは判断できない。終了の告知がなくても、長期間更新されず、現在のWordPressへの対応状況も確認できない場合は、別テーマへの移行を検討する材料としたい。

WordPress標準機能での確認

まずWordPressの管理画面から、インストールしているテーマと更新状況を確認する。

「外観」のテーマ一覧では、使用中・未使用のテーマや更新の有無を把握できる。サイトヘルスからもテーマに関する情報を確認可能である。

ただし、WordPress標準機能は既知の脆弱性データベースと照合して安全性を総合判定するものではない。何がインストールされ、どの状態にあるかを確認する場所と考えると分かりやすい。

脆弱性管理サービスでの確認

既知の脆弱性については、必要に応じてPatchstackやJetpack Protect / WPScanなどの脆弱性情報を利用する方法がある。

これらは、WordPress本体・プラグイン・テーマのバージョンと既知の脆弱性情報を照合し、標準の更新通知だけでは分からない情報を補う手段となる。

外部サービスを追加すれば管理対象も増えるため、必要性を確認した上で利用を判断する。

脆弱性が見つかった場合の対応

既知の脆弱性が見つかったら、現在インストールしているバージョンが影響を受けるか確認する。

対応は修正版の有無で分かれる。

既知の脆弱性を確認
        ↓
現在のバージョンが影響を受ける
        ↓
修正版があるか
     ↓          ↓
    あり        なし
     ↓          ↓
    更新     使用継続を再検討
                 ↓
          テーマ変更・削除など

修正版がある場合

脆弱性を解消したバージョンが提供されていれば、更新を優先する。

使用中のテーマでは、更新による表示や機能への影響も考慮する。必要に応じて変更内容やバックアップ、カスタマイズの状態を確認してから適用し思わぬ影響がでるリスクを減らす。

修正版がない場合

修正版が提供されていなければ、脆弱性の内容や悪用条件を確認し、使用継続や別テーマへの移行を検討する。

未使用テーマなら残しておく必要性を確認し、不要であれば削除する。

テーマの自動更新

WordPressでは、テーマごとに自動更新を設定できる。

自動更新には修正版の適用忘れを減らせる利点がある一方、テーマはサイト全体の表示に関係するため、更新による影響も無視できない。サイトの構成や検証方法に応じて、自動更新と手動更新を使い分ける。

なお、自動更新は提供された更新を適用する仕組みであり、脆弱性を発見する仕組みではない。未修正の脆弱性や、開発終了によって修正版が提供されない状態までは解決できない。

テーマの更新手順

使用テーマを確認する

現在使用しているテーマを確認する。予備として残しているWordPress標準テーマについても更新状況を確認する。

更新内容と脆弱性情報を確認する

更新内容を確認し、既知の脆弱性がある場合は、現在のバージョンへの影響と修正版を確認する。

カスタマイズとバックアップを確認する

使用中テーマへの影響が大きい更新では、直近のバックアップを確認しておく。

テーマを直接編集している場合は、更新によって変更内容が失われないかも確認対象となる。

テーマを更新する

準備ができたら対象テーマを更新する。

更新後の表示と機能を確認する

使用中テーマの更新後は、実際のWebサイトを確認する。

トップページ、投稿・固定ページ、ヘッダー・フッター、メニュー、PC・スマートフォンでの表示など、普段利用する主要部分を中心に異常がないか確かめる。

まとめ

WordPressテーマの脆弱性管理では、使用中のテーマだけでなく、サーバ上に残しているテーマ全体が確認対象となる。

不要なテーマは削除する一方、WordPressがフォールバック用として推奨する標準テーマは1つ残して更新を続ける。子テーマを使用している場合は親テーマも忘れずに確認する。

更新通知だけでは安全性までは判断できないため、既知の脆弱性や開発状況も確認材料に加えたい。修正版があれば更新し、提供されていなければ継続利用やテーマ変更を検討する。

テーマの状態を確認
        ↓
脆弱性・更新情報を確認
        ↓
修正版あり → 更新
修正版なし → 継続利用を再検討
        ↓
不要テーマ → 削除
        ↓
表示・機能を確認