
Analyse de la vulnérabilité CVE 2024 3273 : injection de commande dans les appareils D-Link
Le stockage réseau (NAS) de D-Link est un périphérique doté d'un disque dur (ou de plusieurs) connecté à un réseau informatique pour le stockage et le partage de fichiers. Contrairement à un disque dur externe classique, qui se connecte directement à un ordinateur, le NAS se connecte au réseau local, permettant à plusieurs utilisateurs ou appareils d'utiliser et de partager des fichiers simultanément. Les NAS sont utilisés aussi bien dans des environnements domestiques que professionnels.
L'entreprise de recherche en sécurité VulDB Coordination a découvert une vulnérabilité critique (CVE-2024-3273) sur certains NAS D-Link, permettant à des utilisateurs malveillants d'effectuer une injection de commandes à distance, exécutant des commandes malveillantes sur l'appareil de la victime.
Cette vulnérabilité ne concerne que certains appareils D-Link dont la durée de vie est déjà terminée et pour lesquels le fabricant a cessé la prise en charge logicielle et matérielle. Les modèles affectés sont les suivants :
Cette vulnérabilité nécessite également l'exploitation simultanée d'une autre faille. En effet, le NAS devient particulièrement vulnérable en raison d'une porte dérobée causée par des options de connexion programmées en dur. Cette porte dérobée est la vulnérabilité (CVE-2024-3272), où un utilisateur peut contourner l'authentification en utilisant l'utilisateur système messagebus présent par défaut sur tous les appareils concernés.
Cet utilisateur de démon système (system daemon), présent par défaut sur les systèmes Linux, ne peut pas se connecter directement au système, mais une requête HTTP habilement conçue vers un point de terminaison spécifique suffit pour causer des dégâts.
Il est également nécessaire de connaître l'adresse IP de l'appareil ciblé.
La vulnérabilité réside dans la fonction de traitement des requêtes HTTP GET du fichier /cgi-bin/nas_sharing.cgi du NAS. Un utilisateur malveillant peut envoyer une requête GET sur le réseau vers l'appareil de la victime en fournissant le nom d'utilisateur "messagebus" et en laissant le mot de passe vide. L'injection de commandes intervient ici via le paramètre system, en définissant la valeur du paramètre sur la commande souhaitée.
La commande est masquée par un encodage base64 et ajoutée comme valeur du paramètre system. Après décodage, le fragment de commande malveillant est révélé et s'exécute comme une commande shell sur l'appareil ciblé.
🗒️ CVSS Score de base : 7.3 Élevé
La vulnérabilité CVE-2024-3273 est due à CWE-77, c'est-à-dire une injection de commandes. Cela signifie qu'un attaquant peut injecter des commandes malveillantes qui seront ensuite exécutées par le système cible, car la commande saisie n'est pas validée.
Étant donné que le code source des appareils n'est pas public, il faudrait probablement ajouter une fonction de validation dans la méthode traitant les requêtes pour éviter ce problème. Par exemple, une liste de commandes système autorisées pourrait être mise en place pour empêcher l'exécution de toute commande arbitraire.
La vulnérabilité compromet principalement les objectifs de sécurité suivants :
Cette vulnérabilité ne concerne que les appareils en fin de vie. Par conséquent, le fabricant recommande de remplacer les appareils et de ne pas utiliser les appareils vulnérables.
Étant donné que ces appareils ne sont plus pris en charge, ils ne recevront plus de mises à jour de sécurité logicielles, ce qui signifie que la vulnérabilité ne sera pas corrigée. La seule solution est donc de cesser d'utiliser les produits concernés.
Si le remplacement de l'appareil vulnérable n'est pas possible, il convient de le retirer du réseau public et, au pire, de ne l'utiliser que sur un réseau local pour les appareils qui y sont connectés (un pare-feu doit être installé pour bloquer les requêtes externes).
Selon le rapport initial, au moment de la découverte de la vulnérabilité, plus de 92 000 appareils étaient connectés au réseau. Selon une étude ultérieure, ce nombre pourrait être nettement inférieur, de l'ordre de 5 500 appareils. Néanmoins, de nombreux appareils anciens sont encore probablement connectés au réseau et donc vulnérables.
Plusieurs preuves de concept (PoC) d'attaque ont été publiées et la vulnérabilité est probablement encore largement exploitée. À l'heure actuelle, au moins 146 cas de tentative d'exploitation de la vulnérabilité CVE-2024-3273 ont été identifiés.
Extrait d'un exemple de code :
def execute_command(ip, command: str = "id", verbose: bool = True) -> str:
command_hex = ''.join(f'\\\\x{ord(c):02x}' for c in command)
command_final = f"echo -e {command_hex}|sh".replace(' ', '\t')
base64_cmd: str = base64.b64encode(command_final.encode()).decode()
url: str = f"{ip}/cgi-bin/nas_sharing.cgi"
params: dict = {
"user": "messagebus",
"passwd": "",
"cmd": "15",
"system": base64_cmd,
}