本文へ移動
English version →
重大 9.8 急ぎ度: 至急

WooCommerce向けPDF請求書プラグインに脆弱性、修正版あり

WordPressのプラグイン「PDF Invoice for WooCommerce + Drag and Drop Template Builder」に、認証なしでサーバー上のコードを実行されかねない脆弱性が見つかりました。WooCommerceで店を運営している組織は、プラグインの版を確認し、修正版へ更新してください。

CVE-2026-109220 公開 更新 執筆・監修: 佐々木 航 人が監修しながらAIを活用して執筆
記事のイメージ(生成 AI による画像)
画像は生成 AI で作成したイメージです

急ぎ度: 至急

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が掲載されています。最新の修正版はベンダーの告知で確認してください

確かめ方

  1. 1WordPressの管理画面で「プラグイン」の一覧を開き、該当プラグインの版が7.1.1以前でないかを見ます。
  2. 2サーバーにWP-CLIがあれば、下のコマンドで版を確認できます。複数のサイトを預かっている場合は、サイトごとに実行してください。
  3. 3ステージング環境や、使われていない古いサイトにも同じプラグインが残っていないか、あわせて確認します。

何が起きたか

このプラグインには、注文時に入力されたメモが請求書の生成中にそのままサーバーの処理へ渡り、認証なしでサーバー上のコードを実行されかねない脆弱性があります。7.1.1以前のすべての版が対象で、CVSS v3は9.8です。

仕組みはPHPオブジェクトインジェクション(CWE-502)です。購入者が入力する注文メモ(customer_note)が、無害化されないまま請求書のHTMLに埋め込まれます。その内容がHTML解析ライブラリで元の形に戻り、PDF生成ライブラリのmPDFを経て、検証なしのunserialize()に渡ります。

この経路は、銀行振込や小切手のような支払い方法で注文が保留状態になり、プラグインが請求書を自動生成する流れで動きます。特別な設定を足さなくても、初期設定のまま到達できます。

攻撃の流れ

  1. 1

    注文を送る

    ログインしていない攻撃者が、公開されている注文受付に細工したメモ入りの注文を送ります。

  2. 2

    請求書が生成される

    注文が保留状態になると、プラグインが請求書の生成を自動で始めます。

  3. 3

    入力が復元される

    メモの内容がHTMLの処理とPDF生成を通るうちに、元のデータの形に戻ります。

  4. 4

    コードが動く

    検証されないまま復元処理に渡され、サーバー上で攻撃者のコードが動く恐れがあります。

公開されている情報をもとにした流れの例です。

どう悪用されるか

悪用に認証は要りません。インターネットから店の注文受付に届けば足り、利用者や管理者の操作も要りません。CVSSのベクターでも、ネットワーク経由、低い複雑さ、権限不要、操作不要とされています。

攻撃の入口は、匿名で注文を作れる店で、銀行振込や小切手の支払い方法が有効になっていることです。注文が保留状態になると請求書の生成が始まるためで、初期設定の店はこの条件を満たします。

成功すると、WordPressが動くサーバー上でコードを実行されます。機密性・完全性・可用性のすべてに高い影響が出ます。顧客情報や注文データの閲覧、サイトの改ざん、管理者アカウントの追加、サーバー内の別のシステムへの足がかり作りまでが想定されます。

今すぐやること

  1. 1

    プラグインの版を確認する

    管理画面かWP-CLIで、7.1.1以前でないかを見ます。スラッグはプラグインの配布URLにあるpdf-for-woocommerceです。環境によって異なる場合は、一覧から該当のものを探してください。

    wp plugin get pdf-for-woocommerce --field=version
  2. 2

    修正版に更新する

    更新前にファイルとデータベースのバックアップを取り、修正版に更新します。更新後に、テスト注文で請求書PDFが正しく出るかを確認してください。最新の修正版と変更内容は、ベンダーの告知で確認します。

  3. 3

    今のうちに侵害の跡を調べる

    公表の直後でも、更新前の期間に注文を受け付けていたなら、念のために調べます。見るのは、注文メモに不自然な長い文字列がある保留中の注文、見覚えのない管理者アカウント、更新日時が不自然なPHPファイル、チェックアウトへの異常なアクセスの多さです。不審な点があれば、パスワードや認証情報の入れ替えも検討します。

  4. 4

    使っていないなら削除する

    請求書PDFを使っていないのにプラグインだけ入っている場合は、無効化にとどめず削除します。古いステージング環境も同様です。

すぐ更新できないとき

すぐに更新できないときは、プラグインをいったん無効化します。請求書PDFの自動発行は止まりますが、脆弱なコードが呼ばれる経路を閉じられます。銀行振込と小切手の支払い方法を一時的に外せば、説明されている経路は減らせます。ただし、ほかの経路がないとは言い切れないため、あくまでつなぎにとどめ、無効化か更新を優先してください。

背景

このプラグインは、WooCommerceの注文を元に請求書や納品書のPDFを自動で作ります。ドラッグ&ドロップでテンプレートを作れる点が売りで、PDFの生成にはmPDFというPHPのライブラリを使っています。請求書は注文のたびに自動で作られるため、購入者が入力した文字列が、管理者の操作なしにサーバー側の処理へ流れ込みます。今回の脆弱性は、この自動処理の流れに乗っています。

PHPのunserialize()に外部の入力が届く問題は、PHPオブジェクトインジェクションとして広く知られています。入力がシリアライズ済みのデータとして解釈され、サーバー側のクラスの動きを通じて、意図しない処理が走るためです。今回は購入者の入力欄からこの処理まで検証がなく、ログイン不要の注文経路で到達できる点が、被害の大きさにつながっています。

よくある質問

Q.プラグインを入れているだけで、請求書PDFは使っていません。対象になりますか。
A.有効化したままなら、注文が保留状態になるたびにプラグインの処理が動くため、使っていなくても対象と考えてください。無効化しているだけの場合も、古い版のファイルがサーバーに残ります。使わないなら削除するのが確実です。

この記事は、取得元の公開情報をもとに、人が監修しながら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

参照URL

当サイトでは、アクセス解析と広告の効果測定のために Cookie を使います。株式会社Game のサイト共通の設定です。 詳しく