Skip to content

プラグインのファイルは変わらないまま管理画面が狙われた

WordPressのプラグインは、更新のたびに配布元のファイルが差し替わる。だから「更新していないなら中身は変わっていないはず」と考えるのは自然で、実際その通りであることがほとんどだ。ところが今月、その前提の外側から入られた事例が報告された。プラグインのファイルは一行も書き換わっていないのに、管理画面を開いた管理者のブラウザで攻撃用のコードが動いていた、という話である。

対象になったのはBdThemesというElementor向けアドオンの開発元で、Element PackやPrime Slider、Ultimate Post Kitなど七つの製品が影響を受けた。WordPress.orgの公式ディレクトリでは、調査のあいだこれらの配布が一時停止されている。

更新していないサイトで何が起きていたか

報告によると、これらのプラグインにはBiggoptiという内部の部品が入っていて、開発元のサーバーから宣伝用のバナー情報をJSONで取得し、WordPressの管理画面に表示していた。攻撃者はそのJSONが置かれていたDigitalOcean Spacesのバケットに書き込める状態を手に入れ、正規のバナーデータを細工したものに差し替えた。

プラグイン本体は公式ディレクトリに置かれたまま、一文字も変わっていない。変わったのは、プラグインが管理画面を開くたびに取りに行く先の中身だけだ。セキュリティ企業のWordfenceがファイアウォール側でこの攻撃を検知したのが8月7日、公式ディレクトリでの配布停止が8月8日。汚染されたデータに残っていた日付をたどると、6月下旬には動き始めていた可能性があるとされている。

囲い忘れた一箇所が入口になった

差し替えられたデータが、それだけで害になるわけではない。効いてしまったのは、受け取った値の扱いに抜けがあったからだ。BiggoptiはJSONに含まれるdisplay_idという値を、エスケープしないままHTMLのid属性に埋め込んでいた。つまり外から届いた文字列が、そのままHTMLの一部として書き出される状態になっていた。

これはクロスサイトスクリプティング、いわゆるXSSの典型で、危険度はCVSSで5.4、中程度と評価されている。単体の欠陥としては目を引く数字ではない。ただ、値の供給元が攻撃者の手に渡った時点で、その中程度の欠陥が管理者のブラウザで任意のコードを走らせる経路に変わった。

調査で指摘されているのは、すぐ隣にある別の属性はきちんとエスケープされていた、という点だ。意図的な仕込みではなく、3月に入った変更のときの見落としとみられている。5月に追加された無害化の処理も、この属性までは届いていなかった。

ログイン中の管理者の権限がそのまま使われる

埋め込まれたコードは、アニメーションの開始をきっかけにするイベントハンドラを使い、管理画面が描画された直後に動く。そこから外部のサーバーへ追加のスクリプトを取りに行き、開いている管理者のセッションとnonceを借りる形で、REST API経由で新しい管理者アカウントを作る。

続いて、無害そうな名前の偽プラグインを追加し、その中にウェブシェルを置く。さらにMust-Useプラグインの領域へ居座り用の部品を仕込み、特定のURLパラメータを付けるだけでログインなしに管理者として入れる裏口を用意していた。もうひとつの部品はデータベースへの問い合わせに介入し、作成された管理者アカウントを利用者一覧から隠したうえ、人数の表示までつじつまを合わせていたという。

作られるアカウントの名前や連絡先は、サイトのホスト名から機械的に導ける形になっていた。攻撃する側は被害サイトの一覧を持ち歩かなくても、あとから同じ資格情報を計算し直せる。裏を返せば、調べる側にとっては何を探せばよいかがはっきりしているということでもある。

手元のサイトで確かめられること

この件が厄介なのは、ファイルの比較やプラグインのバージョン確認では手がかりが出てこないところだ。見るべきなのは結果として残ったもののほうで、具体的には管理者アカウントの一覧、プラグインディレクトリとMust-Useプラグインの中身、そしてオプションを保存しているテーブルになる。心当たりのない管理者が増えていないかは、専用のツールがなくても管理画面から確認できる。

より広く見れば、管理画面に外部から取ってきた内容を表示する部品は珍しくない。宣伝バナー、開発元からのお知らせ、キャンペーンの案内など、有償版の販売を持つ製品ほど組み込まれている。今回はその仕組みそのものが悪いというより、外から届いた値を自分のHTMLに置くときの手当てが一箇所抜けていたことが決め手になった。作る側の視点では、遠くから来た文字列は例外なく汚れているものとして扱う、という基本の話に戻る。

制作を請け負う立場だと、納品後のサイトは触る機会が減り、更新の通知が出ていなければ問題なしと見なしがちだ。今回のように配布物が無傷のまま影響が出る攻撃があると分かった以上、管理者の一覧をときどき眺めるくらいの軽い確認は、手間の割に効き目がありそうに思える。

[1994-2002]
ITベンチャーの幹部として、8年間で数名の企業を500名以上の企業に成長させることに貢献。95年より独学でwebデザインを学ぶ。

[2002-2023]
米国法人のwebデザイン会社のCEOを務め数々の賞を受賞。

[2023〜]
AI事業開始に伴い、つくば市を拠点として株式会社RESONIXを起業。