
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 es una vulnerabilidad de inyección SQL (SQLi) no autenticada que afecta al plugin WP Ticket (Customer Support Ticket System & Helpdesk) para WordPress hasta la versión 6.0.4 inclusive. El fallo se produce porque el plugin toma el parámetro de búsqueda s de WordPress y lo concatena directamente en una cláusula SQL LIKE dentro de una subconsulta UNION sin usar $wpdb->prepare() ni un escape adecuado. Como resultado, un atacante remoto puede manipular las consultas a la base de datos y extraer información sensible sin autenticación.
| Propiedad | Valor |
|---|---|
| Producto | WP Ticket (Customer Support Ticket System & Helpdesk) |
| Versiones afectadas | ≤ 6.0.4 |
| Versión corregida | 6.0.5 |
| Componente afectado | Búsqueda en el front-end (parámetro s) |
El plugin engancha el filtro posts_request de WordPress a través de wp_ticket_com_posts_request(). Durante una búsqueda no autenticada en el front-end, finalmente llama a emd_author_search_results(), que lee el parámetro de búsqueda:
$query->query_vars['s']
En esta etapa, WordPress ya ha eliminado las magic quotes mediante wp_unslash(). En lugar de parametrizar de forma segura la sentencia SQL, el plugin concatena la entrada bruta del usuario en una cláusula SQL LIKE dentro de una subconsulta UNION.
Conceptualmente:
User searches website
│
▼
Search parameter "s" received
│
▼
Plugin concatenates value into SQL query
│
▼
No $wpdb->prepare()
│
▼
Database executes modified query
La vulnerabilidad existe porque la entrada no confiable se incorpora al SQL mediante concatenación de cadenas en lugar de consultas parametrizadas.
El núcleo de la vulnerabilidad está en cómo el plugin construye su 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
Un visitante normal realiza una búsqueda en el sitio web:
GET /?s=printer
El plugin incorpora el valor del parámetro s en una consulta SQL que busca información relacionada con los tickets.
Debido a que el plugin concatena el valor de búsqueda directamente en la sentencia SQL en lugar de usar consultas parametrizadas, una solicitud de búsqueda especialmente diseñada puede alterar la lógica SQL prevista. Un atacante no autenticado puede aprovechar este comportamiento para recuperar información sensible de la base de datos de WordPress, como nombres de usuario u otros datos almacenados. El resultado exacto depende de la configuración de la aplicación y de los permisos de la base de datos. Ahora, un atacante puede manipular el parámetro s para inyectar su propio SQL. Por ejemplo, podría introducir:
' UNION SELECT user_login, user_pass FROM wp_users -- -
Esto haría que la consulta final tuviera este aspecto:
SELECT * FROM wp_posts WHERE post_title LIKE '%' UNION SELECT user_login, user_pass FROM wp_users -- -%'
Una explotación exitosa puede permitir a un atacante:
| Métrica | Puntuación |
|---|---|
| CVSS v3.1 (Wordfence CNA) | 7.5 (Alta) |
NVD aún no ha publicado su propia evaluación CVSS.
Nota: El proveedor no ha publicado la implementación vulnerable completa. Lo siguiente ilustra el patrón de codificación vulnerable.
$search = $query->query_vars['s'];
$sql = "
SELECT *
FROM tickets
WHERE title LIKE '%" . $search . "%'
";
$wpdb->get_results($sql);
La sentencia SQL se construye concatenando entrada controlada por el usuario directamente en la cadena de consulta. Dado que la entrada no está parametrizada ni escapada, puede alterar la estructura de la sentencia SQL.
$search = $query->query_vars['s'];
$sql = $wpdb->prepare(
"SELECT *
FROM tickets
WHERE title LIKE %s",
'%' . $search . '%'
);
$wpdb->get_results($sql);
El uso de $wpdb->prepare() separa la sintaxis SQL de la entrada del usuario. La base de datos trata el valor de búsqueda como datos en lugar de SQL ejecutable, lo que impide que los atacantes modifiquen la estructura de la consulta. La corrección oficial en WP Ticket 6.0.5 reemplaza la construcción vulnerable de la consulta por una implementación correctamente parametrizada.