WooCommerce向けPDF請求書プラグインに脆弱性、修正版あり
WordPressのプラグイン「PDF Invoice for WooCommerce + Drag and Drop Template Builder」に、認証なしでサーバー上のコードを実行されかねない脆弱性が見つかりました。WooCommerceで店を運営している組織は、プラグインの版を確認し、修正版へ更新してください。
急ぎ度: 至急
CVSS v3は9.8で、認証不要のままネットワーク越しに、初期設定のまま到達でき、修正版も出ているためです。
関係があるか
WooCommerceでネットショップを運営し、このプラグインで請求書PDFを発行している組織が対象です。注文を匿名で受け付けている店ほど、外部から到達されやすい構成です。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| PDF Invoice for WooCommerce + Drag and Drop Template Builder(WordPressプラグイン) | 7.1.1以前のすべての版 | 7.2.0以降とみられます。配布ページに7.2.0が掲載されています。最新の修正版はベンダーの告知で確認してください |
確かめ方
- 1WordPressの管理画面で「プラグイン」の一覧を開き、該当プラグインの版が7.1.1以前でないかを見ます。
- 2サーバーにWP-CLIがあれば、下のコマンドで版を確認できます。複数のサイトを預かっている場合は、サイトごとに実行してください。
- 3ステージング環境や、使われていない古いサイトにも同じプラグインが残っていないか、あわせて確認します。
何が起きたか
このプラグインには、注文時に入力されたメモが請求書の生成中にそのままサーバーの処理へ渡り、認証なしでサーバー上のコードを実行されかねない脆弱性があります。7.1.1以前のすべての版が対象で、CVSS v3は9.8です。
仕組みはPHPオブジェクトインジェクション(CWE-502)です。購入者が入力する注文メモ(customer_note)が、無害化されないまま請求書のHTMLに埋め込まれます。その内容がHTML解析ライブラリで元の形に戻り、PDF生成ライブラリのmPDFを経て、検証なしのunserialize()に渡ります。
この経路は、銀行振込や小切手のような支払い方法で注文が保留状態になり、プラグインが請求書を自動生成する流れで動きます。特別な設定を足さなくても、初期設定のまま到達できます。
攻撃の流れ
-
1
注文を送る
ログインしていない攻撃者が、公開されている注文受付に細工したメモ入りの注文を送ります。
-
2
請求書が生成される
注文が保留状態になると、プラグインが請求書の生成を自動で始めます。
-
3
入力が復元される
メモの内容がHTMLの処理とPDF生成を通るうちに、元のデータの形に戻ります。
-
4
コードが動く
検証されないまま復元処理に渡され、サーバー上で攻撃者のコードが動く恐れがあります。
どう悪用されるか
悪用に認証は要りません。インターネットから店の注文受付に届けば足り、利用者や管理者の操作も要りません。CVSSのベクターでも、ネットワーク経由、低い複雑さ、権限不要、操作不要とされています。
攻撃の入口は、匿名で注文を作れる店で、銀行振込や小切手の支払い方法が有効になっていることです。注文が保留状態になると請求書の生成が始まるためで、初期設定の店はこの条件を満たします。
成功すると、WordPressが動くサーバー上でコードを実行されます。機密性・完全性・可用性のすべてに高い影響が出ます。顧客情報や注文データの閲覧、サイトの改ざん、管理者アカウントの追加、サーバー内の別のシステムへの足がかり作りまでが想定されます。
今すぐやること
-
1
プラグインの版を確認する
管理画面かWP-CLIで、7.1.1以前でないかを見ます。スラッグはプラグインの配布URLにあるpdf-for-woocommerceです。環境によって異なる場合は、一覧から該当のものを探してください。
wp plugin get pdf-for-woocommerce --field=version -
2
修正版に更新する
更新前にファイルとデータベースのバックアップを取り、修正版に更新します。更新後に、テスト注文で請求書PDFが正しく出るかを確認してください。最新の修正版と変更内容は、ベンダーの告知で確認します。
-
3
今のうちに侵害の跡を調べる
公表の直後でも、更新前の期間に注文を受け付けていたなら、念のために調べます。見るのは、注文メモに不自然な長い文字列がある保留中の注文、見覚えのない管理者アカウント、更新日時が不自然なPHPファイル、チェックアウトへの異常なアクセスの多さです。不審な点があれば、パスワードや認証情報の入れ替えも検討します。
-
4
使っていないなら削除する
請求書PDFを使っていないのにプラグインだけ入っている場合は、無効化にとどめず削除します。古いステージング環境も同様です。
すぐ更新できないとき
すぐに更新できないときは、プラグインをいったん無効化します。請求書PDFの自動発行は止まりますが、脆弱なコードが呼ばれる経路を閉じられます。銀行振込と小切手の支払い方法を一時的に外せば、説明されている経路は減らせます。ただし、ほかの経路がないとは言い切れないため、あくまでつなぎにとどめ、無効化か更新を優先してください。
背景
このプラグインは、WooCommerceの注文を元に請求書や納品書のPDFを自動で作ります。ドラッグ&ドロップでテンプレートを作れる点が売りで、PDFの生成にはmPDFというPHPのライブラリを使っています。請求書は注文のたびに自動で作られるため、購入者が入力した文字列が、管理者の操作なしにサーバー側の処理へ流れ込みます。今回の脆弱性は、この自動処理の流れに乗っています。
PHPのunserialize()に外部の入力が届く問題は、PHPオブジェクトインジェクションとして広く知られています。入力がシリアライズ済みのデータとして解釈され、サーバー側のクラスの動きを通じて、意図しない処理が走るためです。今回は購入者の入力欄からこの処理まで検証がなく、ログイン不要の注文経路で到達できる点が、被害の大きさにつながっています。
よくある質問
Q.プラグインを入れているだけで、請求書PDFは使っていません。対象になりますか。
この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
影響パッケージ
| 種類 | パッケージ | 影響を受ける版 | 修正版 |
|---|---|---|---|
| addonsorg | PDF Invoice for WooCommerce + Drag and Drop Template Builder |
7.1.1 以前 |
— |
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
The PDF Invoice for WooCommerce + Drag and Drop Template Builder plugin for WordPress is vulnerable to PHP Object Injection in all versions up to, and including, 7.1.1 via the 'customer_note' parameter parameter. This is due to insufficient sanitization of the customer_note checkout field, which is inlined verbatim into invoice HTML, entity-decoded back into a live tag by simplehtmldom, reassembled into raw bytes by mPDF, and passed to unserialize() in _getObjAttr without validation. This makes it possible for unauthenticated attackers to execute code on the server. An unauthenticated attacker can trigger the vulnerable code path on a default install by placing an anonymous WooCommerce checkout via the public Store API (POST /wc/store/v1/checkout) using a Direct Bank Transfer or cheque payment method, which automatically transitions the order to 'on-hold' status and fires the plugin's invoice-generation hook.
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory