
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 è una vulnerabilità di SQL Injection (SQLi) non autenticata che interessa il plugin WP Ticket (Customer Support Ticket System & Helpdesk) per WordPress fino alla versione 6.0.4 inclusa. Il difetto si verifica perché il plugin prende il parametro di ricerca s di WordPress e lo concatena direttamente in una clausola SQL LIKE all'interno di una sottoquery UNION senza usare $wpdb->prepare() o un escaping adeguato. Di conseguenza, un attaccante remoto può manipolare le query del database ed estrarre informazioni sensibili senza autenticazione.
| Proprietà | Valore |
|---|---|
| Prodotto | WP Ticket (Customer Support Ticket System & Helpdesk) |
| Versioni interessate | ≤ 6.0.4 |
| Versione corretta | 6.0.5 |
| Componente interessato | Ricerca front-end (parametro s) |
Il plugin aggancia il filtro posts_request di WordPress tramite wp_ticket_com_posts_request(). Durante una ricerca front-end non autenticata, chiama infine emd_author_search_results(), che legge il parametro di ricerca:
$query->query_vars['s']
In questa fase, WordPress ha già rimosso le magic quotes usando wp_unslash(). Invece di parametrizzare in modo sicuro l'istruzione SQL, il plugin concatena l'input utente grezzo in una clausola SQL LIKE all'interno di una sottoquery UNION.
Concettualmente:
User searches website
│
▼
Search parameter "s" received
│
▼
Plugin concatenates value into SQL query
│
▼
No $wpdb->prepare()
│
▼
Database executes modified query
La vulnerabilità esiste perché l'input non attendibile viene incorporato in SQL tramite concatenazione di stringhe invece che tramite query parametrizzate.
Il nucleo della vulnerabilità è il modo in cui il plugin costruisce la sua query SQL principale:
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 visitatore normale effettua una ricerca sul sito web:
GET /?s=printer
Il plugin incorpora il valore del parametro s in una query SQL che cerca informazioni relative ai ticket.
Poiché il plugin concatena il valore di ricerca direttamente nell'istruzione SQL invece di usare query parametrizzate, una richiesta di ricerca appositamente predisposta può alterare la logica SQL prevista. Un attaccante non autenticato può sfruttare questo comportamento per recuperare informazioni sensibili dal database di WordPress, come nomi utente o altri dati memorizzati. Il risultato esatto dipende dalla configurazione dell'applicazione e dai permessi del database.
Ora, un attaccante può manipolare il parametro s per iniettare la propria SQL. Ad esempio, potrebbe inserire:
' UNION SELECT user_login, user_pass FROM wp_users -- -
Questo farebbe apparire la query finale in questo modo:
SELECT * FROM wp_posts WHERE post_title LIKE '%' UNION SELECT user_login, user_pass FROM wp_users -- -%'
Uno sfruttamento riuscito può consentire a un attaccante di:
| Metrica | Punteggio |
|---|---|
| CVSS v3.1 (Wordfence CNA) | 7.5 (Alta) |
NVD non ha ancora pubblicato la propria valutazione CVSS.
Nota: il fornitore non ha pubblicato l'implementazione vulnerabile completa. Quanto segue illustra il pattern di codice vulnerabile.
$search = $query->query_vars['s'];
$sql = "
SELECT *
FROM tickets
WHERE title LIKE '%" . $search . "%'
";
$wpdb->get_results($sql);
L'istruzione SQL viene costruita concatenando l'input controllato dall'utente direttamente nella stringa di query. Poiché l'input non è parametrizzato né sottoposto a escaping, può alterare la struttura dell'istruzione SQL.
$search = $query->query_vars['s'];
$sql = $wpdb->prepare(
"SELECT *
FROM tickets
WHERE title LIKE %s",
'%' . $search . '%'
);
$wpdb->get_results($sql);
L'uso di $wpdb->prepare() separa la sintassi SQL dall'input utente. Il database tratta il valore di ricerca come dati piuttosto che come SQL eseguibile, impedendo agli attaccanti di modificare la struttura della query. La correzione ufficiale in WP Ticket 6.0.5 sostituisce la costruzione vulnerabile della query con un'implementazione adeguatamente parametrizzata.