
CVE-2026-9848 is an Unauthenticated SQL Injection (SQLi) vulnerability affecting the WP Ticket (Customer Support Ticket System & Helpdesk) plugin for WordPress up to and including version 6.0.4.
CVE-2026-9848 は、WordPress 用プラグイン WP Ticket (Customer Support Ticket System & Helpdesk) のバージョン 6.0.4 以前に影響する未認証SQLインジェクション(SQLi)脆弱性です。この欠陥は、プラグインがWordPressの検索パラメータ s を取得し、それを $wpdb->prepare() や適切なエスケープ処理を使わずにUNIONサブクエリ内のSQL LIKE句へ直接連結することに起因します。その結果、リモートの攻撃者は認証なしでデータベースクエリを操作し、機密情報を抽出できる可能性があります。
| プロパティ | 値 |
|---|---|
| 製品 | WP Ticket (Customer Support Ticket System & Helpdesk) |
| 影響を受けるバージョン | ≤ 6.0.4 |
| 修正バージョン | 6.0.5 |
| 影響を受けるコンポーネント | フロントエンド検索 (s パラメータ) |
このプラグインは、wp_ticket_com_posts_request() を通じてWordPressのposts_requestフィルターにフックします。未認証のフロントエンド検索中に、最終的にemd_author_search_results() が呼び出され、そこで検索パラメータを読み取ります:
$query->query_vars['s']
この段階で、WordPressはwp_unslash() を使ってマジッククォートをすでに削除しています。プラグインはSQL文を安全にパラメータ化せず、生のユーザー入力をUNIONサブクエリ内のSQL LIKE句に直接連結します。
概念的には:
User searches website
│
▼
Search parameter "s" received
│
▼
Plugin concatenates value into SQL query
│
▼
No $wpdb->prepare()
│
▼
Database executes modified query
この脆弱性は、信頼できない入力がパラメータ化されたクエリではなく文字列連結によってSQLに組み込まれるために存在します。
脆弱性の核心は、プラグインがメインのSQLクエリを構築する方法にあります:
sql
SELECT * FROM wp_posts
WHERE post_title LIKE '%[attacker's input]%'
UNION [attacker's injected SQL]
Attacker
│
▼
Submits a crafted search request
│
▼
WordPress passes the "s" parameter
│
▼
WP Ticket builds SQL query using concatenation
│
▼
Database executes injected SQL
│
▼
Sensitive database information may be disclosed
通常の訪問者がウェブサイトで検索を行います:
GET /?s=printer
プラグインは、チケット関連情報を検索するSQLクエリにsパラメータの値を組み込みます。
プラグインはパラメータ化されたクエリを使用せずに検索値をSQL文に直接連結するため、特別に細工された検索リクエストによって意図されたSQLロジックを変更できます。未認証の攻撃者は、この動作を悪用して、WordPressデータベースからユーザー名やその他の保存データなどの機密情報を取得できる可能性があります。正確な結果は、アプリケーションの構成とデータベースの権限に依存します。 ここで、攻撃者はsパラメータを操作して独自のSQLを注入できます。たとえば、次のように入力する可能性があります:
' UNION SELECT user_login, user_pass FROM wp_users -- -
これにより、最終クエリは次のようになります:
SELECT * FROM wp_posts WHERE post_title LIKE '%' UNION SELECT user_login, user_pass FROM wp_users -- -%'
悪用に成功すると、攻撃者は以下を行える可能性があります:
| メトリクス | スコア |
|---|---|
| CVSS v3.1 (Wordfence CNA) | 7.5 (高) |
NVDは独自のCVSS評価をまだ公開していません。
注記:ベンダーは完全な脆弱な実装を公開していません。以下は脆弱なコーディングパターンの例です。
$search = $query->query_vars['s'];
$sql = "
SELECT *
FROM tickets
WHERE title LIKE '%" . $search . "%'
";
$wpdb->get_results($sql);
SQL文は、ユーザーが制御する入力をクエリ文字列に直接連結して構築されます。入力がパラメータ化もエスケープもされていないため、SQL文の構造を変更される可能性があります。
$search = $query->query_vars['s'];
$sql = $wpdb->prepare(
"SELECT *
FROM tickets
WHERE title LIKE %s",
'%' . $search . '%'
);
$wpdb->get_results($sql);
$wpdb->prepare() を使用すると、SQL構文とユーザー入力を分離できます。データベースは検索値を実行可能なSQLとしてではなくデータとして扱うため、攻撃者がクエリ構造を変更することを防ぎます。WP Ticket 6.0.5 の公式修正では、脆弱なクエリ構築が適切にパラメータ化された実装に置き換えられています。