IVPAY paymentsに認証不要のSQLi脆弱性、修正版なし
WordPressの決済プラグインIVPAY paymentsに、ログイン不要でデータベースの中身を読み取られる脆弱性が見つかりました。修正版が確認できないため、使っているサイトは無効化を先に検討してください。
急ぎ度: 至急
CVSS v3は9.3のcriticalで、認証なしにネットワークから攻撃でき、初期設定のままでも該当するうえ、修正版が確認できていません。
関係があるか
WordPressにIVPAY paymentsプラグインを入れ、決済の受け付けに使っているサイトが対象です。インストールしただけでAPIキーを設定していないサイトは、初期設定のままで該当します。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| IVPAY payments(WordPressプラグイン、スラッグはivendpay-payments) | 1.0.0から1.0.8まで | 修正版は確認されていません(WPScanはNo known fixと記載) |
確かめ方
- 1WordPress管理画面のプラグイン一覧で、IVPAY paymentsが入っているか、有効になっているかを見ます。入っていて版が1.0.8以下なら対象です。
- 2サーバーにWP-CLIがあれば、
wp plugin get ivendpay-payments --field=versionで版を確認できます。 - 3複数のサイトを預かっている場合は、各サイトのwp-content/pluginsにivendpay-paymentsのフォルダーがないかを横断して調べます。無効化したまま残っているプラグインも洗い出してください。
何が起きたか
IVPAY paymentsには、ログインしていない相手が外部から要求を送るだけで、サイトのデータベースにある情報を読み取れる脆弱性があります。決済サイトのデータベースには、注文や顧客に関する情報が入っていることが多く、WordPress本体の利用者情報も同じデータベースにあります。
原因は2つあります。1つは、決済の通知(コールバック)で受け取るpayment_idの値が、SQL文に使われる前に無害化されていないことです(CWE-89)。もう1つは、APIキーが空のときも認証に成功したものとして扱われることで、しかも空は初期設定です。設定を変えていなければ、認証が実質働いていません。
CVSS v3は9.3です。ベクターでは機密性への影響が高、完全性が低、可用性は影響なしとされており、被害の中心はデータの読み取りです。
攻撃の流れ
-
1
窓口に到達
インターネット側から、プラグインが決済通知を受ける窓口に要求が届きます。
-
2
認証を通過
APIキーが空の初期設定だと、認証済みとして扱われます。
-
3
値がSQLに混入
payment_idの値が無害化されないまま、SQL文の一部として使われます。
-
4
DBを読み取り
データベースにある任意のデータが外部に読み出されます。
どう悪用されるか
認証は要らず、ネットワーク越しに攻撃できます。利用者の操作も要りません。サイトの管理者や顧客に何かをクリックさせる必要はなく、窓口に要求を送れる相手なら誰でも対象になります。
さらに、APIキーが空という初期設定が認証として通るため、設定を変えていないサイトでは、本来あるはずの認証の壁がありません。
悪用されると、データベースの任意のデータを読み取られます。顧客情報や注文履歴のほか、利用者アカウントの情報や、データベースに保存した設定値が外に出るおそれがあります。ベクターは完全性への影響を低と示しており、書き換えの余地は限られますが、読み取られた情報を足がかりに被害が広がることはあります。
今すぐやること
-
1
プラグインが入っているか確認する
管理しているすべてのWordPressサイトで、IVPAY paymentsの有無と版を調べます。有効かどうかを問わず、1.0.8以下が入っていれば対象として扱います。
wp plugin get ivendpay-payments --field=version -
2
修正版が出るまで無効化し、決済手段を切り替える
決済を止められない事情があっても、認証なしでデータを読まれる状態は放置できません。別の決済手段へ切り替える段取りを組み、プラグインは無効化、可能なら削除します。無効化したまま置くより、削除したほうが確実です。
-
3
侵害の跡と漏えいの範囲を調べる
アクセスログで、決済通知の窓口に届いた不審な要求(payment_idに通常とは違う値が入ったものなど)を探します。見つかった場合や調べきれない場合は、データベースの情報が読まれた前提で、個人情報の扱いを担当部署に相談します。データベースに保存していたAPIキーや外部サービスの認証情報は、入れ替えを検討してください。
-
4
ベンダーの告知を確認する
WordPressのプラグイン配布ページと開発元の告知で、修正版が出ていないかを定期的に見ます。修正版が出たら、更新する前に変更内容を読み、更新後は決済の動作をテスト環境で確認してから本番に戻します。
修正版がないあいだのつなぎ
修正版がない間は、プラグインの無効化または削除が確実なつなぎです。WAFで決済通知の窓口へのアクセスを送信元で絞れるなら補助になりますが、これだけで防げるとは言えないため、無効化と併用してください。
背景
決済プラグインは、決済事業者から届く「支払いが完了した」という通知を受け取り、注文の状態を更新する役目を持ちます。通知の窓口はインターネットから届く必要があるので、認証がほぼ唯一の守りです。IVPAY paymentsでは、その認証に使うAPIキーの初期値が空で、空でも通る仕組みでした。守りの壁が初期設定で外れていたことが、この脆弱性の特徴です。
SQLインジェクションは、外から受け取った値をそのままSQL文に組み込むと起きる、古くからある型の脆弱性です。WPScanの一覧には、認証不要で起きたWordPressプラグインの同種の例が複数並んでいます。今回は、WordPress本体と同じデータベースを読めてしまう点が、サイト全体の情報に影響します。
よくある質問
Q.APIキーを設定済みなら影響はありませんか。
Q.公表日が資料によって違うのはなぜですか。
まだ分かっていないこと
- 修正版の公開予定や、開発元の対応方針は示されていません。
この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
影響パッケージ
| パッケージ | 影響を受ける版 → 修正版 | |
|---|---|---|
| CVE の記録IVPAY payments |
1.0.0 〜 1.0.8→ 記載なし |
記載なし |
この記録には修正版の版が載っていません。修正版の有無と版は、本文か参照URLのベンダーの勧告で確かめてください。
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
The IVPAY payments WordPress plugin through 1.0.8 does not sanitise a value from its payment callback before using it in a SQL statement, and treats an empty API key, which is its own default, as valid authentication, allowing unauthenticated attackers to read arbitrary data from the database.
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory
参照URL
- web contact@wpscan.com
- web nvd.nist.gov
- web wpscan.com
- web github.com