Prime Mover に重大な欠陥、修正版の情報は未公表
WordPress 用バックアップ・移行プラグイン Prime Mover の 2.2.1 以下に、認証なしで細工したデータを仕込める重大な脆弱性が見つかりました。仕込まれたデータは、管理者がエクスポートや復元を実行したときに処理され、サイトの乗っ取りなどにつながるおそれがあります。利用中のサイトは版を確認し、修正版が出るまでエクスポートと復元を控えてください。
急ぎ度: 早めに
CVSSは9.8の重大で、ログイン不要で仕込めますが、発動には管理者のエクスポートか復元の操作が必要で、実際の悪用の確認も公表されていないためです。
関係があるか
WordPressサイトにPrime Mover-Backup and Migrationプラグインを入れている組織が対象です。コメント送信の窓口が外部に開いているサイトは、攻撃データを仕込まれる入り口が開いた状態になります。
| 製品 | 影響を受ける版 | 直った版 |
|---|---|---|
| Prime Mover-Backup and Migration(WordPress プラグイン) | 2.2.1以下のすべての版 | 公表されていません |
確かめ方
- 1WordPressの管理画面で「プラグイン」「インストール済みプラグイン」を開き、Prime Mover-Backup and Migrationの有無と版を確認します。
- 2複数のサイトを管理している場合やWordPressのマルチサイト環境では、サイトごとに有効化の状況を確認します。
- 3WP-CLIを使える環境では、
wp plugin get prime-mover --field=versionで版を確認できます。 - 4コメント(承認待ちを含む)に、意味の読み取れない長い英数字の文字列だけが書かれたものがないか、管理画面で確認します。
何が起きたか
Prime Moverは、WordPressサイトのバックアップや別サーバーへの移行に使うプラグインです。2.2.1以下の版には、外から送られたデータを安全かどうか確かめないまま「プログラム内で扱えるオブジェクト」に戻してしまう弱点があります。PHPオブジェクトインジェクションと呼ばれる種類の問題です。
この弱点は二段階で働きます。まず、ログインしていない第三者が、通常のコメント投稿の仕組みを使って、細工したデータをサイトのデータベースに保存します。その後、管理者が通常どおりPrime Moverのエクスポートや復元を行うと、保存されていたデータがプラグインに読み込まれ、問題の処理が走ります。つまり、管理者の普段の作業が引き金になります。
技術的には、移行時の置換処理(recursiveUnserializeReplace())が、保存済みの値をデコードして unserialize() に渡しており、読み込めるクラスを制限していません。さらに、プラグインに同梱されているFreemiusライブラリの中に、読み込まれたオブジェクトを悪用できる部品(FS_Clone_Manager から FS_Option_Manager を経て update_option() に至る経路)があります。そのため、ほかのプラグインやテーマが入っていなくても、この弱点単体で成立するとされています。
悪用された場合の具体的な被害の内容は、公表されていません。評価上は、機密性・完全性・可用性のいずれにも高い影響があるとされています。
攻撃の流れ
-
1
データを仕込む
ログイン不要の攻撃者が、コメント投稿の窓口から細工したデータをデータベースに保存します。
-
2
そのまま待機
保存されたデータは、誰かが処理するまでコメントの内容として残ります。
-
3
管理者が操作
管理者がPrime Moverのエクスポートや復元を実行します。
-
4
危険な読み込み
プラグインが保存済みのデータを制限なしでオブジェクトに戻します。
-
5
同梱部品が動く
同梱のFreemiusライブラリ内の部品がつながり、WordPressの設定値を書き込む処理に到達します。
どう悪用されるか
攻撃の前提は、サイトにコメント送信の窓口(wp-comments-post.php)が到達できる状態であることです。攻撃者にアカウントは要りません。ただし、実際に危険な処理が動くのは、管理者がPrime Moverのエクスポートか復元を実行したときです。CVSSの評価では利用者の操作は不要とされていますが、実際の発動には管理者の操作が必要です。この点は、リスクを見積もるときに押さえておく必要があります。
悪用に成功した場合の被害は、公表されていません。評価はCVSS 9.8で、情報の漏えい、改ざん、サービス停止のすべてが高いとされています。同梱ライブラリの経路は設定値の書き込みに到達するため、サイトの動作を変えられる可能性があると考えて対処するのが安全です。
実際の攻撃で悪用されたかどうかは、現時点で明らかになっていません。悪用の確認を示す公的なリストへの掲載や、悪用される見込みを示す指標も確認できていません。
今すぐやること
-
1
利用の有無と版を確認する
管理画面のプラグイン一覧でPrime Moverの版を確認します。2.2.1以下なら対象です。複数サイトを運用している場合は、すべてのサイトを洗い出します。
wp plugin get prime-mover --field=version -
2
エクスポートと復元を止める
対象の版を使っている間は、Prime Moverのエクスポート、復元、移行の操作を実行しないよう、管理者に周知します。引き金になるのは、この管理者の操作です。
-
3
修正版の公開を確認して適用する
修正版の版番号は公表されていません。WordPress.orgのプラグインページと開発元の告知を確認し、修正版が出たら、事前にバックアップを取ったうえで更新します。
-
4
不審なコメントを点検する
承認待ちを含むコメントに、意味の読み取れない長い文字列だけのものがないか確認します。見つけた場合は、削除する前にデータベースのバックアップを取り、内容を記録します。
-
5
必要がなければプラグインを停止する
日常的に使っていない場合は、修正版が出るまで無効化することを検討します。無効化しても、すでに保存されたコメントはデータベースに残るため、点検は別に行います。
すぐ更新できないとき
修正版が使えない間は、次の対応でリスクを下げられます。
- Prime Moverのエクスポートと復元を実行しない。
- 使っていなければプラグインを無効化する。
- コメント機能が不要なサイトでは、コメントを受け付けない設定にする。承認制にしても、投稿されたデータが保存されること自体は通常防げない点に注意してください。
- 不審なコメントが見つかった場合は、バックアップを取ったうえで削除する。
これらは暫定策で、修正版の適用に代わるものではありません。
背景
バックアップや移行のプラグインは、データベース全体とファイルを読み書きするため、管理者の強い権限で動きます。そのため、こうしたプラグインの弱点は、サイト全体への影響につながりやすい性質があります。今回の問題では、危険な処理が走る場面が、管理者の通常の運用(エクスポートや復元)と重なっている点が特徴です。
外から来たデータを検証せずにオブジェクトへ戻す処理は、PHPで作られたソフトウェアで繰り返し問題になってきた弱点の型です。単体では無害に見えても、同じ環境にある別の部品とつながると深刻な被害になる場合があります。今回は、その部品がプラグイン自身の同梱ライブラリにあるため、ほかの追加要素に頼らず成立するとされています。Freemiusは多くのWordPressプラグインが課金やライセンス管理に使う開発キットとして知られていますが、今回の経路が他のプラグインにも関係するかどうかは、公表されていません。
よくある質問
Q.管理者がエクスポートや復元をしなければ、問題は起きませんか。
Q.すでに攻撃を受けたかどうかは分かりますか。
Q.実際の攻撃は確認されていますか。
まだ分かっていないこと
- 修正版の有無と版番号が公表されていません。WordPress.orgのプラグインページと開発元の告知で確認する必要があります。
- 実際の攻撃で悪用されたかどうかや、悪用された場合の具体的な被害は、現時点で明らかになっていません。
- 同じFreemiusライブラリを同梱する他のプラグインに影響があるかどうかは、公表されていません。
この記事は、取得元の公開情報をもとに生成 AI で作成しています。誤りを含むことがあります。対応を決める前に、下の原文と参照先を確認してください。
影響パッケージ
| 種類 | パッケージ | 影響を受ける版 | 直った版 |
|---|---|---|---|
| codexonics | Prime Mover – Backup and Migration |
2.2.1 以前 |
— |
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
The Prime Mover – Backup and Migration plugin for WordPress is vulnerable to PHP Object Injection in all versions up to, and including, 2.2.1 via deserialization of untrusted input in the migration search-and-replace routine (recursiveUnserializeReplace()). An unauthenticated attacker can store a crafted, base64-encoded serialized object in wp_comments.comment_content through the standard comment-submission endpoint (wp-comments-post.php). When an administrator subsequently performs a routine Prime Mover export or restore, the plugin base64-decodes that stored value and passes it to unserialize() with no allowed_classes restriction. A Property-Oriented Programming (POP) chain is present in the plugin's own bundled Freemius library (FS_Clone_Manager::__set → FS_Option_Manager::set_option → store() → update_option()), so no additional plugin or theme is required — the plugin ships the gadget itself.
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory
参照URL
- web security@wordfence.com
- web security@wordfence.com
- web security@wordfence.com
- web security@wordfence.com
- web security@wordfence.com
- web security@wordfence.com
- web security@wordfence.com
- web nvd.nist.gov
- web github.com