
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 é uma vulnerabilidade de Injeção SQL (SQLi) não autenticada que afeta o plugin WP Ticket (Customer Support Ticket System & Helpdesk) para WordPress até a versão 6.0.4, inclusive. A falha ocorre porque o plugin pega o parâmetro de busca s do WordPress e o concatena diretamente em uma cláusula SQL LIKE dentro de uma subconsulta UNION sem usar $wpdb->prepare() ou escape adequado. Como resultado, um atacante remoto pode manipular consultas ao banco de dados e extrair informações sensíveis sem autenticação.
| Propriedade | Valor |
|---|---|
| Produto | WP Ticket (Customer Support Ticket System & Helpdesk) |
| Versões Afetadas | ≤ 6.0.4 |
| Versão Corrigida | 6.0.5 |
| Componente Afetado | Busca no Front-end (parâmetro s) |
O plugin registra o filtro posts_request do WordPress por meio de wp_ticket_com_posts_request(). Durante uma busca front-end não autenticada, ele eventualmente chama emd_author_search_results(), que lê o parâmetro de busca:
$query->query_vars['s']
Nesse estágio, o WordPress já removeu as magic quotes usando wp_unslash(). Em vez de parametrizar com segurança a instrução SQL, o plugin concatena a entrada bruta do usuário em uma cláusula SQL LIKE dentro de uma subconsulta UNION.
Conceitualmente:
User searches website
│
▼
Search parameter "s" received
│
▼
Plugin concatenates value into SQL query
│
▼
No $wpdb->prepare()
│
▼
Database executes modified query
A vulnerabilidade existe porque a entrada não confiável é incorporada ao SQL usando concatenação de strings em vez de consultas parametrizadas.
O núcleo da vulnerabilidade está em como o plugin constrói sua consulta SQL principal:
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
Um visitante normal realiza uma busca no site:
GET /?s=printer
O plugin incorpora o valor do parâmetro s em uma consulta SQL que busca informações relacionadas a tickets.
Como o plugin concatena o valor da busca diretamente na instrução SQL em vez de usar consultas parametrizadas, uma solicitação de busca especialmente elaborada pode alterar a lógica SQL pretendida. Um atacante não autenticado pode explorar esse comportamento para recuperar informações sensíveis do banco de dados do WordPress, como nomes de usuário ou outros dados armazenados. O resultado exato depende da configuração da aplicação e das permissões do banco de dados. Agora, um atacante pode manipular o parâmetro s para injetar seu próprio SQL. Por exemplo, ele poderia inserir:
' UNION SELECT user_login, user_pass FROM wp_users -- -
Isso faria a consulta final ficar assim:
SELECT * FROM wp_posts WHERE post_title LIKE '%' UNION SELECT user_login, user_pass FROM wp_users -- -%'
A exploração bem-sucedida pode permitir que um atacante:
| Métrica | Pontuação |
|---|---|
| CVSS v3.1 (Wordfence CNA) | 7.5 (Alta) |
O NVD ainda não publicou sua própria avaliação CVSS.
Nota: O fornecedor não publicou a implementação vulnerável completa. O exemplo a seguir ilustra o padrão de código vulnerável.
$search = $query->query_vars['s'];
$sql = "
SELECT *
FROM tickets
WHERE title LIKE '%" . $search . "%'
";
$wpdb->get_results($sql);
A instrução SQL é construída concatenando a entrada controlada pelo usuário diretamente na string da consulta. Como a entrada não é parametrizada nem escapada, ela pode alterar a estrutura da instrução SQL.
$search = $query->query_vars['s'];
$sql = $wpdb->prepare(
"SELECT *
FROM tickets
WHERE title LIKE %s",
'%' . $search . '%'
);
$wpdb->get_results($sql);
Usar $wpdb->prepare() separa a sintaxe SQL da entrada do usuário. O banco de dados trata o valor da busca como dados, e não como SQL executável, impedindo que atacantes modifiquem a estrutura da consulta. A correção oficial no WP Ticket 6.0.5 substitui a construção vulnerável da consulta por uma implementação devidamente parametrizada.