Aller au contenu

CVE-2026-37338 : Injection SQL dans SourceCodester Simple Music Cloud Community System

La vulnérabilité est une injection SQL (SQLi) classique située dans le paramètre id du fichier view_user.php. L’application ne verwendet pas de requêtes préparées (Prepared Statements) ou de mécanisme d’assainissement équivalent, interpolant directement la valeur fournie par l’utilisateur dans la requête SQL.

L’architecture de l’application permet l’exploitation via la technique UNION, permettant à un attaquant d’ajouter les résultats de tables arbitraires à la sortie de la requête originale.

Le vecteur d’attaque est purement distant et ne nécessite aucune authentification.

  1. Identification de la cible : l’attaquant identifie le point de terminaison vulnérable : /music/view_user.php.
  2. Test du paramètre : l’utilisation d’un guillemet simple ou de logique booléenne sur le paramètre id révèle une anomalie dans la réponse, confirmant le point d’injection.
  3. Énumération du schéma : en utilisant la technique UNION SELECT, l’attaquant détermine le nombre de colonnes retournées par la requête originale.
  4. Exfiltration de données : le payload suivant est utilisé pour récupérer le nom de la base de données actuelle : /music/view_user.php?id=0 union select 1,2,3,4,5,6,database(),8,9,10,11,12--+
  5. Élévation de privilèges : une fois la structure de la base connue, l’attaquant peut cibler la table users pour extraire les identifiants administratifs.

D’un point de vue forensic, une tentative d’exploitation laisse des traces spécifiques dans les journaux du serveur web.

Analyser les journaux d’accès (Apache/Nginx) pour les motifs suivants :

  • Requêtes vers /music/view_user.php contenant des mots-clés SQL tels que UNION, SELECT, INFORMATION_SCHEMA ou DATABASE().
  • Un volume inhabituel de requêtes vers le même point de terminaison avec des variations de la valeur id (fuzzing).
  • Web Shells : Rechercher la création de fichiers .php inattendus à la racine du serveur web, car l’injection SQL est souvent utilisée pour obtenir un premier accès et uploader un shell via INTO OUTFILE.
  • Logs de Base de Données : Si activés, examiner le journal général des requêtes (general query log) de MySQL pour des requêtes suspectes ciblant les tables système.

Implémenter la requête suivante pour détecter les tentatives d’exploitation :

index=web_logs uri="/music/view_user.php" (id="*union*" OR id="*select*" OR id="*database*")

Créer une règle d’alerte sur la présence de mots-clés SQL dans l’URI du composant cible.

  1. Implémenter des requêtes préparées : remplacer toutes les requêtes SQL dynamiques par des requêtes préparées (via mysqli ou PDO en PHP) pour découpler la logique de la requête des données.
  2. Validation des entrées : appliquer un typage strict au paramètre id. Puisqu’il doit s’agir d’un entier, forcer le type : $id = (int)$_GET['id'];.
  3. Principe du moindre privilège : s’assurer que l’utilisateur de la base de données associé à l’application web possède Apples minimum de permissions nécessaires. Désactiver les privilèges FILE pour empêcher l’usage de LOAD_FILE() ou INTO OUTFILE.
  4. Déploiement d’un WAF : mettre en place un Web Application Firewall (WAF) pour bloquer les motifs courants d’injection SQL.

Burp Suite

Utilisé pour intercepter et manipuler le paramètre id afin d’affiner le payload SQL.

sqlmap

Outil automatisé pour détecter et exploiter les failles d’injection SQL.

NVD

Entrée officielle du NIST pour la vulnérabilité.