
PoC of CVE-2025-22510
WordPress プラグイン
コンポーネント名 WC Price History for Omnibus
影響を受けるバージョン <= 2.1.4
コンポーネントスラッグ wc-price-history
コンポーネントリンク https://wordpress.org/plugins/wc-price-history/
脆弱性クラス A3: Injection
脆弱性タイプ PHP オブジェクトインジェクション
ショップマネージャー(Administrator 以上)
WC Price History for Omnibus プラグインバージョン 2.1.4 以下では、WooCommerce ダッシュボードの 'Price History' メニュー(/wp-admin/admin.php?page=wc-price-history)の 'Import debug data' セクションから JSON ファイルをアップロードできます。アップロードされた JSON ファイルは wc_price_history_import_file ペイロードとして送信され、JSON データの 'serialized' キーの値に PHP オブジェクトインジェクションの脆弱性が発生します。この脆弱性により、Shop Manager 権限を持つ攻撃者は PHP オブジェクトを注入できます。
プラグイン自体には既知の POP チェーンはありませんが、対象の WordPress サイト上の他のプラグインやテーマに POP チェーンが存在する場合、攻撃者は任意のファイル削除、機密情報の窃取、コード実行を行う可能性があります。
WC Price History for Omnibus プラグインバージョン 2.1.4 以下がインストールされ、有効化されている WordPress サイトを準備します。
このプラグインを有効化するには、事前に WooCommerce プラグインがインストールされ、有効化されている必要があります。
PHP オブジェクトインジェクションの脆弱性をテストするには、次のクラス PoC_POP_Chain_Object を wp-config.php ファイルの末尾に追加します。
class PoC_POP_Chain_Object {
public $message = "";
public function __destruct() {
echo "<mark>Success PoP Chain</mark>";
echo "<br>";
echo "<mark>msg: ". $this->message ."</mark>";
}
}

次に、以下の JSON データを含むファイルを作成します。
この JSON データでは、
serializedキーに入力されたデータは PHP のシリアライズされたオブジェクト形式であり、先ほどwp-config.phpファイルに追加したPoC_POP_Chain_Objectクラスのインスタンスを作成し、message プロパティに文字列 'Exploit !!' を代入します。
{
"serialized": "O:20:\"PoC_POP_Chain_Object\":1:{s:7:\"message\";s:10:\"Exploit !!\";}"
}
次に、WooCommerce ダッシュボードの 'Price History' メニュー(/wp-admin/admin.php?page=wc-price-history)に移動します。'Import debug data' セクションで、ファイルアップロードフォームから先ほど作成した JSON ファイルを選択し、'Import' ボタンをクリックしてアップロードします。
WooCommerce ダッシュボードの 'Price History' メニュー(/wp-admin/admin.php?page=wc-price-history)の 'Import debug data' セクションから JSON データをアップロードして 'Import' ボタンをクリックすると、
/wp-content/plugins/wc-price-history/app/PriorPrice/Import.php ファイルの Import クラスで定義されている import_file() 関数が実行されます。この関数は、JSON ファイルを含むリクエストペイロード wc_price_history_import_file を取得し、その JSON データからキー serialized のデータを取得して、maybe_unserialize 関数によるデシリアライズを実行します。

したがって、リクエストペイロード wc_price_history_import_file は JSON 形式であり、キー serialized のシリアライズされたデータを検証なしにデシリアライズする過程で、PHP オブジェクトインジェクションの脆弱性が発生します。

アップロードリクエストの結果、レスポンスデータ内で、wp-config.php に追加したクラス PoC_POP_Chain_Object のマジックメソッド __destruct() が実行され、次のメッセージが表示されることを確認できます。
<mark>Success PoP Chain</mark>
<br>
<mark>msg: Exploit !!</mark>
