
CVE-2026-9848 est une vulnérabilité d'injection SQL (SQLi) non authentifiée affectant le plugin WP Ticket (Customer Support Ticket System & Helpdesk) pour WordPress jusqu'à la version 6.0.4 incluse.
CVE-2026-9848 est une vulnérabilité d'injection SQL (SQLi) non authentifiée affectant le plugin WP Ticket (Customer Support Ticket System & Helpdesk) pour WordPress jusqu'à la version 6.0.4 incluse. Le défaut survient parce que le plugin prend le paramètre de recherche WordPress s et le concatène directement dans une clause SQL LIKE à l'intérieur d'une sous-requête UNION sans utiliser $wpdb->prepare() ni un échappement approprié. Par conséquent, un attaquant distant peut manipuler les requêtes de la base de données et extraire des informations sensibles sans authentification.
| Propriété | Valeur |
|---|
| Produit | WP Ticket (Customer Support Ticket System & Helpdesk) |
| Versions affectées | ≤ 6.0.4 |
| Version corrigée | 6.0.5 |
| Composant affecté | Recherche front-end (paramètre s) |
Le plugin accroche le filtre posts_request de WordPress via wp_ticket_com_posts_request(). Lors d'une recherche front-end non authentifiée, il finit par appeler emd_author_search_results(), qui lit le paramètre de recherche :
$query->query_vars['s']
À ce stade, WordPress a déjà supprimé les magic quotes en utilisant wp_unslash(). Au lieu de paramétrer correctement la requête SQL, le plugin concatène l'entrée utilisateur brute dans une clause SQL LIKE au sein d'une sous-requête UNION.
Conceptuellement :
User searches website
│
▼
Search parameter "s" received
│
▼
Plugin concatenates value into SQL query
│
▼
No $wpdb->prepare()
│
▼
Database executes modified query
La vulnérabilité existe parce que l'entrée non fiable est incorporée dans SQL par concaténation de chaînes plutôt que par des requêtes paramétrées.
Le cœur de la vulnérabilité réside dans la manière dont le plugin construit sa requête 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 visiteur normal effectue une recherche sur le site :
GET /?s=printer
Le plugin intègre la valeur du paramètre s dans une requête SQL qui recherche des informations liées aux tickets.
Parce que le plugin concatène directement la valeur de recherche dans l'instruction SQL au lieu d'utiliser des requêtes paramétrées, une requête de recherche spécialement conçue peut modifier la logique SQL prévue. Un attaquant non authentifié peut exploiter ce comportement pour récupérer des informations sensibles de la base de données WordPress, telles que les noms d'utilisateur ou d'autres données stockées. Le résultat exact dépend de la configuration de l'application et des permissions de la base de données. À présent, un attaquant peut manipuler le paramètre s pour injecter son propre SQL. Par exemple, il pourrait saisir :
' UNION SELECT user_login, user_pass FROM wp_users -- -
Cela rendrait la requête finale semblable à ceci :
SELECT * FROM wp_posts WHERE post_title LIKE '%' UNION SELECT user_login, user_pass FROM wp_users -- -%'
L'exploitation réussie peut permettre à un attaquant de :
| Métrique | Score |
|---|---|
| CVSS v3.1 (Wordfence CNA) | 7.5 (Élevé) |
La NVD n'a pas encore publié sa propre évaluation CVSS.
Remarque : L'éditeur n'a pas publié l'implémentation vulnérable complète. Ce qui suit illustre le modèle de codage vulnérable.
$search = $query->query_vars['s'];
$sql = "
SELECT *
FROM tickets
WHERE title LIKE '%" . $search . "%'
";
$wpdb->get_results($sql);
L'instruction SQL est construite en concaténant directement l'entrée contrôlée par l'utilisateur dans la chaîne de requête. Puisque l'entrée n'est ni paramétrée ni échappée, elle peut modifier la structure de l'instruction SQL.
$search = $query->query_vars['s'];
$sql = $wpdb->prepare(
"SELECT *
FROM tickets
WHERE title LIKE %s",
'%' . $search . '%'
);
$wpdb->get_results($sql);
L'utilisation de $wpdb->prepare() sépare la syntaxe SQL de l'entrée utilisateur. La base de données traite la valeur de recherche comme des données plutôt que comme du SQL exécutable, empêchant ainsi les attaquants de modifier la structure de la requête. Le correctif officiel de WP Ticket 6.0.5 remplace la construction de requête vulnérable par une implémentation correctement paramétrée.