Aller au contenu

CVE-2026-6490 : Injection SQL dans QueryMine SMS

Le projet PHP QueryMine SMS est affecté par une vulnérabilité critique, identifiée sous le nom de CVE-2026-6490. Cette faille permet à un attaquant distant non authentifié d’exécuter une injection SQL et d’effectuer des modifications de données non autorisées. La vulnérabilité réside dans le point de terminaison admin/deletecourse.php, qui omet de vérifier l’authentification ou de nettoyer les entrées utilisateur avant d’exécuter des opérations en base de données.

L’architecture de l’application repose sur un backend PHP simple destiné à la gestion de SMS. Mon analyse du fichier admin/deletecourse.php révèle un défaut d’implémentation majeur dans la logique centrale.

Le point de terminaison administratif ne comporte aucune validation de session. L’application ne vérifie ni la présence ni la validité d’un cookie de session ou des permissions de rôle d’administrateur. Par conséquent, toute requête adressée à ce fichier est traitée par le serveur sans considération de l’état d’authentification de l’initiateur.

La vulnérabilité provient du traitement du paramètre GET id :

$get_course_id = $_GET['id'];
DELETE FROM course WHERE course_id='$get_course_id'

Le script récupère l’identifiant id directement depuis le paramètre de l’URL et le concatène dans la chaîne de requête SQL. Aucune sanitation, aucun filtrage, et aucune utilisation de requêtes préparées ne sont en place. Ce schéma permet à un attaquant d’injecter des commandes SQL arbitraires. Bien que l’implémentation actuelle facilite une suppression non autorisée simple, l’impact potentiel s’étend à une manipulation complète de la base de données, y compris l’exfiltration de données ou la création de comptes administratifs illégitimes.

Le processus d’exploitation est élémentaire. Un attaquant a seulement besoin d’un accès réseau au serveur web cible.

  1. Identifier l’URL cible hébergeant le système QueryMine SMS.
  2. Construire une requête GET malveillante ciblant admin/deletecourse.php.
  3. Ajouter l’identifiant du cours visé au paramètre id.
  4. Observer la réponse du serveur ; une exploitation réussie entraîne une redirection, bien que l’opération en base de données soit complétée immédiatement.

Exemple de requête de suppression : GET /admin/deletecourse.php?id=59 HTTP/1.1

Les équipes de sécurité doivent se concentrer sur les journaux d’accès web pour identifier les comportements anormaux liés à cette vulnérabilité.

title: QueryMine SMS SQL Injection and Unauthorized Access
status: experimental
description: Détecte l'exploitation de la CVE-2026-6490 via la suppression non autorisée de cours.
logsource:
category: web
detection:
selection:
uri|endswith: /admin/deletecourse.php
params|contains: id=
condition: selection

Le fournisseur n’a pas fourni de correctif officiel pour ce projet en version continue (rolling release). Les organisations déployant QueryMine SMS doivent prendre des mesures immédiates pour sécuriser l’implémentation :

  1. Mettre en œuvre l’authentification : ajouter une vérification de session obligatoire à tous les fichiers situés dans le répertoire admin/.
  2. Utiliser des requêtes préparées : remplacer la concaténation SQL brute par des requêtes préparées via PDO ou MySQLi pour prévenir l’injection.
  3. Restreindre l’accès : restreindre l’accès au répertoire admin/ via des configurations au niveau serveur (par exemple, fichiers .htaccess ou blocs de localisation Nginx) aux segments réseau autorisés ou aux IP VPN uniquement.