7つのWordPressプラグインが悪用され、プラグインファイルを1つも改変することなく、稼働中のサイトに不正な管理者アカウントとWebシェルが仕掛けられていたことが分かりました。攻撃者はプラグインが管理画面に読み込むプロモーション用データフィードを汚染していました。
Wordfenceは8月7日にこの侵害について通報を受け、翌日に分析結果を公開しました。影響を受けているのはElementorのアドオンベンダーであるBdThemesで、同社のプラグインは公式のWordPress.orgディレクトリを通じて配布されています。該当する7つのプラグインすべてが、審査完了までの間、一時的に非公開とされました。
リポジトリ自体には何の変更もありませんでした。これらのプラグインには、ベンダーのAPIからプロモーション用バナーを取得するBiggoptiというコンポーネントが組み込まれており、攻撃者はその背後にあるオブジェクトストレージバケットへの書き込みアクセス権を取得し、正規のレスポンスを細工したペイロードにすり替えていました。
WordPressのサプライチェーン攻撃についてさらに詳しく: 攻撃者が人気WordPressプラグインを乗っ取りバックドアを展開
バナー通知内のエスケープされていないフィールド
この脆弱性はBdThemes自身によって作り込まれたものでした。Wordfenceが SVNの履歴をたどったところ、3月1日にPrime Sliderに追加されたスクリプトが原因であることが判明しました。このスクリプトは、リモートのJSONレスポンスから取得したフィールドを、エスケープ処理をしないままHTML属性に直接連結していました。
同じコード内の隣接する属性は正しくエスケープされており、Wordfenceはこれを意図的なものではなく単純な見落としとみています。5月に追加されたサニタイザーも、この欠陥のある属性には手が加えられていませんでした。
このスクリプトはwp-adminの全ページ読み込み時に実行されるため、注入されたコードはログイン中の管理者のブラウザ上でひそかに発火します。この脆弱性は深刻度5.4の「中」と評価されており、記録上は未修正となっています。
不正な管理者アカウントと隠された痕跡
このペイロードは、管理者本人のセッショントークンを悪用し、WordPress REST API経由で新たな管理者アカウントを作成した上で、Webシェルを仕込んだ偽のプラグインをインストールしていました。
そのWebシェルは、2つの永続化用モジュールを展開していました。1つは、URLパラメータを通じて認証なしで管理者権限のアクセスを可能にするものです。もう1つはデータベースクエリにフックし、不正なアカウントをユーザー一覧から隠すとともに、ユーザー数の表示を辻褄が合うように調整するものでした。
BdThemes自身のインフラ上でホストされていた第2のペイロードは、被害者のホスト名から管理者の認証情報を導出する仕組みになっており、対応にあたる担当者は何を探すべきかを正確に割り出すことができます。
Wordfenceは、このC2ドメインを、過去2カ月間に発生したAdvanced Responsive Video EmbedderおよびOptinMonsterの侵害事件の背後にいる攻撃者と関連付けており、ベンダー自身のバケット内にペイロードが存在していたことは、上流における深刻な侵害を示していると指摘しています。
両エンドポイントは8月8日までにクリーンな状態に戻っていました。プラグインファイル自体は一度も改変されていなかったため、Wordfenceはサイト運営者に対し、データベースのユーザー一覧、プラグインディレクトリ、そしてoptionsテーブルを点検し、侵害の痕跡がないか確認するよう呼びかけています。
翻訳元: https://www.infosecurity-magazine.com/news/bdthemes-wordpress-poisoned-api/