
Vulnérabilité de vérification du serveur de mise à jour du firmware sur Buffalo LS210D Version 1.78-0.03
Christopher J. Pace et Ryan Miller
Le Buffalo LS210D est un serveur de stockage en réseau (NAS) conçu et commercialisé pour les petites entreprises et les particuliers. Le LS210D intègre la possibilité de télécharger et d'installer à distance une mise à jour du firmware. Le LS210D est vulnérable à une attaque « Adversaire au milieu », ou AitM, dans cette fonctionnalité. Un attaquant contrôlant la connexion en amont d'une victime pourra soit fournir un nom DNS incorrect pour le serveur de mise à jour, soit rediriger le trafic du serveur de mise à jour vers un serveur malveillant. Cela peut conduire à l'exécution de commandes en tant qu'utilisateur root, ou à l'installation directe de logiciels malveillants.
Le fichier /etc/init.d/update_notifications.sh est appelé depuis le script côté serveur de mise à jour du firmware à /www/buffalo/www/dynamic/system/update/BufUpdate.pm. À l'intérieur de update_notifications.sh se trouve la ligne suivante :

L'ouverture de ce fichier xml révèle que le fichier XML lui-même pointe également vers une connexion HTTP uniquement :

De plus, ce fichier zip n'est pas non plus chiffré. Des recherches antérieures sur ce modèle nous ont orientés vers le téléchargement d'un utilitaire manuel de mise à jour du firmware, qui incluait un fichier zip protégé par mot de passe. Le fichier linkstation_series_1.75-0.01.zip ne contient pas ces protections. Dans l'archive se trouve le fichier hddrootfs.buffalo.updated, qui contient l'archive hddrootfs.buffalo, laquelle contient le système de fichiers racine du LS120D. Un attaquant peut directement visualiser et modifier ce fichier zip pour y inclure son propre logiciel malveillant ou lire des fichiers sensibles.

Une fois qu'un attaquant a effectué une attaque AitM, le routeur proposera volontiers d'installer le firmware mis à jour. Voici un exemple d'une telle attaque, avec l'écran de droite montrant les modifications nécessaires à fw_info2.xml, à savoir l'ajout de 0x0000001D à la balise productId, et l'incrémentation de la balise de type de version vers une version supérieure à celle du firmware de la victime (1.78-0.04 dans ce cas).

