WordPressプラグインのサプライチェーン攻撃から考える、日々のセキュリティ運用

WordPressプラグインのサプライチェーン攻撃から考える、日々のセキュリティ運用

WordPressサイトの安全性を保つうえで、WordPress本体だけでなく、プラグインの更新はとても重要です。 しかし近年、単に「更新していれば安全」とは言い切れない事例も出てきています。

その一つが、2026年4月に報告されたWordPressプラグインのサプライチェーン攻撃です。

何が起きたのか

今回の事例では、もともと正規に公開されていた複数のWordPressプラグインが、第三者に買収された後、不正なコードを含む状態に変更されていたと報告されています。

対象となったのは、Essential Plugin系の30件以上のプラグインです。 これらのプラグインは以前からWordPress.orgで公開され、多くのサイトで利用されていたものですが、事業・プラグイン群が売却された後、新しい所有者によって不正な処理が仕込まれたとされています。Anchor Hostの記事では、30件以上のプラグインが影響を受け、31件がWordPress.orgによりクローズされたと報告されています。(Anchor Hosting)

この不正なコードは、すぐに目立つ被害を出したわけではありません。 2025年8月にバックドアが仕込まれ、その後しばらく潜伏し、2026年4月5日〜6日ごろに悪用されたとされています。つまり、問題が表面化するまで約8カ月かかっていたことになります。

どのような被害があったのか

報告によると、不正なコードは外部サーバーと通信し、WordPressサイト内の重要ファイルである wp-config.php に不審なPHPコードを追加していました。 このコードにより、検索エンジン向けにスパムページや不正なリンク、リダイレクトなどを表示する仕組みが作られていたとされています。

ここで厄介なのは、サイト管理者が普通にブラウザで見ても異常に気づきにくい点です。 不正な表示はGooglebotなど検索エンジン向けに出され、一般の閲覧者や管理者には見えにくい形だったと説明されています。

つまり、見た目にはサイトが普通に動いていても、裏側では検索エンジン向けにスパムコンテンツを返していた可能性があります。

WordPress.org側の対応

問題発覚後、WordPress.orgのプラグインチームによって、対象プラグインは閉鎖され、2026年4月8日に強制アップデートが行われました。 この更新では、プラグイン内の外部通信や不正処理の一部が無効化されています。

ただし、この強制アップデートだけでは、すでに wp-config.php に書き込まれた不正コードまでは削除されなかったと指摘されています。

ここが重要です。

プラグインを更新しただけで、すでにサイト内へ書き込まれた改ざんコードまで完全に消えるとは限りません。 更新は「これ以上悪さをしにくくする」ためには有効ですが、すでに受けた改ざんの確認・復旧は別途必要になる場合があります。


この事例から分かること

1. 有名なプラグインでも、将来ずっと安全とは限らない

今回のポイントは、最初から怪しい野良プラグインを入れていたわけではない、という点です。

もともとはWordPress.orgで公開され、長く使われていた正規のプラグインでした。 しかし、プラグインの所有者や開発体制が変わった後に、不正なコードが追加されたと報告されています。

つまり、プラグインのリスクは「インストール時点」だけで決まるものではありません。

  • 開発者が変わる
  • 会社や事業が売却される
  • 更新内容が急に不自然になる
  • 以前と違う開発元名になる
  • 長期間放置された後、突然更新される

こうした変化があると、以前は安全だったプラグインでも、リスクが変わる可能性があります。

サイト管理者・保守担当者としては、「昔から入っているから大丈夫」ではなく、今も信頼できる状態かを見る必要があります。


2. 自動更新は有効だが、万能ではない

WordPressのプラグイン自動更新は、セキュリティ上とても有効です。 脆弱性が修正されたとき、手動対応を待たずに更新できるため、古い脆弱性を放置するリスクを減らせます。

特に、小規模サイトやサイト管理者・保守担当者が常時確認できないサイトでは、自動更新によって守られるケースも多くあります。

しかし今回のようなサプライチェーン攻撃では、話が少し違います。

自動更新は、WordPress.orgなどの正規の更新経路から配布される更新を反映する仕組みです。 そのため、もし正規の更新経路から配布されたプラグイン自体に悪意あるコードが含まれていた場合、自動更新によってそのコードも取り込んでしまう可能性があります。

これは、自動更新そのものが悪いという話ではありません。 むしろ、脆弱性対策として自動更新は今後も重要です。

ただし、自動更新はあくまで「配布された更新を早く適用する仕組み」です。 更新元そのものが悪用された場合や、プラグインの所有者が変わった後に不正なコードが追加された場合、その更新が安全かどうかを自動更新だけで判断することはできません。

つまり、自動更新には次の両面があります。

自動更新のメリット

  • 脆弱性修正を早く反映できる
  • 更新忘れを防げる
  • 小規模サイトでも保守が回りやすい
  • 古い脆弱性の放置を減らせる

自動更新だけでは防げないこと

  • 正規の更新経路に悪意あるコードが混入するケース
  • プラグインの買収・譲渡後にリスクが変化するケース
  • 更新後にサイト内部へ書き込まれた不正コードの発見
  • 不審な管理者ユーザーやファイル改ざんの確認

したがって、結論は「自動更新をやめる」ではありません。

重要なのは、自動更新は続けたうえで、それだけに頼らない運用を行うことです。

自動更新は、WordPressを安全に保つための重要な仕組みです。 しかし、自動更新は「更新後の状態が安全であること」までは保証してくれません。

だからこそ、WordPressの保守では、自動更新を前提にしながら、不要なプラグインを減らし、管理者権限を整理し、バックアップと復旧手段を確保することが重要です。


3. 使っていないプラグインは削除する

今回の事例を踏まえると、使っていないプラグインは、無効化したまま残すのではなく、できるだけ削除することが重要です。

プラグインは、サイトに機能を追加する便利な仕組みです。 しかし同時に、外部で作られたコードを自分のサイト内で動かす仕組みでもあります。

使っていないプラグインが残っていると、次のような問題があります。

  • 管理対象が増える
  • 更新状況を確認しなければならない
  • 将来、誤って有効化される可能性がある
  • 開発元や所有者が変わっても気づきにくい
  • 脆弱性や不正更新の影響を受ける可能性が残る

「今は無効化しているから大丈夫」とは限りません。 サーバー上にファイルが残っている以上、確認すべき対象として残り続けます。

不要なプラグインを削除することは、単なる整理整頓ではありません。 サイトの攻撃面を減らす、基本的なセキュリティ対策です。

特に、次のようなプラグインは定期的に見直す必要があります。

  • 何に使っているか分からないプラグイン
  • 無効化されたまま長期間残っているプラグイン
  • 同じような機能のプラグインが複数入っている状態
  • 昔の制作会社が入れたまま用途不明になっているプラグイン
  • 更新が長期間止まっているプラグイン
  • 作者名や開発元が変わっているプラグイン

プラグインは「多いほど便利」ではなく、「必要なものだけを把握して使う」ことが重要です。


4. 管理者ユーザーも棚卸しする

WordPressのセキュリティでは、プラグインだけでなく、管理者ユーザーの確認も重要です。

管理者権限を持つユーザーは、プラグインの追加・削除、テーマ編集、ユーザー作成、設定変更など、多くの操作ができます。 そのため、不要な管理者アカウントが残っていると、不正ログインされたときの被害が大きくなります。

確認すべきなのは、次のようなユーザーです。

  • 退職者のアカウント
  • 以前の制作会社・保守会社のアカウント
  • 誰が使っているか分からない管理者アカウント
  • 共用の管理者アカウント
  • メールアドレスが古い、または受信できないアカウント
  • 必要以上に強い権限を持っているユーザー

管理者は必要最小限にするのが基本です。 記事の投稿だけを行う人であれば、管理者権限ではなく、編集者や投稿者などの権限で足りる場合もあります。

今回のような攻撃では、ファイル改ざんだけでなく、不審な管理者アカウントが作成される可能性もあります。 そのため、セキュリティ確認では、プラグイン一覧だけでなく、ユーザー一覧も確認する必要があります。


5. WAFだけに頼らない

WAFは、Webサイトへの不審なアクセスを防ぐための重要な仕組みです。 SQLインジェクション、クロスサイトスクリプティング、不審なURLへのアクセス、総当たりログインなどを防ぐのに役立ちます。

しかし、WAFだけで今回のような問題を完全に防ぐことは困難です。

今回の問題は、外部から怪しいリクエストが飛んできたというより、正規のプラグイン更新の中に不正なコードが入り込んだという性質のものです。

WAFは入口対策として有効ですが、サイト内部に入ってしまった不正コードや、正規ファイルに見える改ざんをすべて検知できるわけではありません。

そのため、WAFは「入れているから安心」ではなく、次のような対策と組み合わせて考える必要があります。

  • プラグインの棚卸し
  • 不要プラグインの削除
  • 管理者ユーザーの棚卸し
  • 更新履歴の確認
  • バックアップ
  • 復元テスト
  • 不審なファイル変更の確認
  • セキュリティ通知の確認

WAFは大事ですが、WAFだけでWordPress保守の代わりにはなりません。


6. バックアップは「復元できるか」まで確認する

バックアップは、WordPress保守の最後の砦です。

ただし、バックアップは「取っている」だけでは不十分です。 実際に復元できるか、どの時点に戻せるかが重要です。

今回のようなケースでは、不正コードが数カ月間潜伏していた可能性があります。 その場合、直近のバックアップに戻しても、すでに改ざん後の状態に戻ってしまうかもしれません。

そのため、バックアップでは次の点が重要になります。

  • ファイルとデータベースの両方を保存しているか
  • 複数世代のバックアップがあるか
  • サーバー外にも保存しているか
  • 復元手順が分かるか
  • テスト環境で復元確認をしたことがあるか
  • どの時点のバックアップに戻すべきか判断できるか

特に、長期間気づきにくい改ざんに備えるには、数日分だけでなく、週次・月次など少し長めの世代を残しておくことが重要です。

バックアップは、障害や攻撃が起きたときにサイトを元に戻すためのものです。 「バックアップがあるはず」ではなく、「必要なときに戻せる状態になっているか」まで確認しておく必要があります。


サイト管理者・保守担当者が見るべきポイント

今回のような事例を踏まえると、サイト管理者・保守担当者は、単に「更新ボタンを押す人」ではなく、サイトの状態を定期的に確認する役割も持つべきです。

専門的なコード解析まではできなくても、次のような確認は十分に意味があります。

月1回程度確認したいこと

  • 不要なプラグインが残っていないか
  • 無効化されたままのプラグインがないか
  • 更新が長期間止まっているプラグインがないか
  • プラグインの作者名・開発元が変わっていないか
  • 管理者ユーザーに不要な人がいないか
  • バックアップが正常に取れているか
  • セキュリティプラグインやサーバーから警告が出ていないか

更新時に確認したいこと

  • 更新前にバックアップがあるか
  • 更新後にサイト表示が崩れていないか
  • フォーム送信ができるか
  • 管理画面に入れるか
  • 重要ページが正常に表示されるか
  • 不審なユーザーが増えていないか

異常時に確認したいこと

  • 最近更新したプラグインは何か
  • 最近追加された管理者ユーザーはないか
  • wp-config.php など重要ファイルが不自然に大きくなっていないか
  • 検索結果に不審なページタイトルが出ていないか
  • Google Search Consoleに不審なURLが出ていないか
  • サーバーのエラーログ・アクセスログに異常がないか

まとめ

今回のサプライチェーン攻撃は、WordPress運用において重要な教訓を示しています。

プラグインは、単なる便利機能ではなく、サイト内で動く外部コードです。 たとえ以前は信頼できたプラグインでも、開発者や所有者が変われば、リスクも変わる可能性があります。

そのため、WordPressのセキュリティ運用では、次の考え方が重要です。

  • 使っていないプラグインは削除する
  • 自動更新は有効だが、万能ではないと理解する
  • 更新後の表示・フォーム・管理画面など、サイト全体の状態を確認する
  • 管理者ユーザーを定期的に棚卸しする
  • WAFだけに頼らない
  • バックアップを取り、復元できることを確認する
  • セキュリティ通知やSearch Consoleの異常を見落とさない

今回のような事例を踏まえると、WordPressサイトの管理や保守に関わる人は、プラグインを更新するだけでなく、不要なプラグインや管理者ユーザー、バックアップの状態まで定期的に確認しておくことが重要です。

WordPressのセキュリティ対策は、何か一つの機能を入れれば終わりではありません。 自動更新、プラグインの棚卸し、権限管理、WAF、バックアップ、復元確認を組み合わせて、継続的にサイトの状態を見直すことが大切です。

このブログの人気の投稿

デザインは売上に影響するのか?

小規模サイトの表示速度改善メモ:第1回 WordPressを毎回動かさないためのキャッシュの考え方