La vulnérabilité de backport dans RouterOS compromet des centaines de milliers d'appareils



La possibilité de rétrograder à distance des périphériques basés sur RouterOS (Mikrotik) met en danger des centaines de milliers de périphériques réseau. La vulnérabilité est associée à l'empoisonnement du cache DNS du protocole Winbox et vous permet de télécharger un firmware obsolète (avec réinitialisation du mot de passe "par défaut") ou modifié sur l'appareil.



Détails de vulnérabilité


Le terminal RouterOS prend en charge une commande de résolution pour les recherches DNS.

image

Cette demande est traitée par un résolveur binaire nommé. Le résolveur est l'un des nombreux fichiers binaires connectés au protocole RouterOS Winbox. À un niveau élevé, les «messages» envoyés au port Winbox peuvent être acheminés vers divers fichiers binaires dans RouterOS sur la base d'un schéma de numérotation basé sur un tableau.

Par défaut, RouterOS a la fonctionnalité de serveur DNS désactivée.

image

Cependant, même avec la fonction serveur désactivée, le routeur conserve son propre cache DNS.

image

Lorsque nous faisons une demande en utilisant winbox_dns_request, par exemple, example.com, le routeur mettra en cache le résultat.

image

Étant donné que nous pouvons spécifier le serveur DNS par lequel la demande doit passer, saisir les mauvaises adresses est trivial. Par exemple, vous pouvez configurer l'implémentation du serveur DNS de Philip Klaus pour toujours répondre avec un enregistrement A contenant l'adresse IP 192.168.88.250.

def dns_response(data): request = DNSRecord.parse(data) reply = DNSRecord(DNSHeader( id=request.header.id, qr=1, aa=1, ra=1), q=request.q) qname = request.q.qname qn = str(qname) reply.add_answer(RR(qn,ttl=30,rdata=A("192.168.88.250"))) print("---- Reply:\n", reply) return reply.pack() 

Maintenant, si vous recherchez example.com à l'aide de Winbox, vous pouvez voir que le cache DNS du routeur a été empoisonné.

image

Bien sûr, empoisonner example.com n'est pas très utile car le routeur ne l'utilisera pas réellement. Cependant, le routeur doit avoir accès à upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com et download.mikrotik.com. Et grâce à une autre erreur, il est possible de les empoisonner tous en même temps.

 def dns_response(data): request = DNSRecord.parse(data) reply = DNSRecord(DNSHeader( id=request.header.id, qr=1, aa=1, ra=1), q=request.q) qname = request.q.qname qn = str(qname) reply.add_answer(RR(qn,ttl=30,rdata=A("192.168.88.250"))) reply.add_answer(RR("upgrade.mikrotik.com",ttl=604800, rdata=A("192.168.88.250"))) reply.add_answer(RR("cloud.mikrotik.com",ttl=604800, rdata=A("192.168.88.250"))) reply.add_answer(RR("cloud2.mikrotik.com",ttl=604800, rdata=A("192.168.88.250"))) reply.add_answer(RR("download.mikrotik.com",ttl=604800, rdata=A("192.168.88.250"))) print("---- Reply:\n", reply) return reply.pack() 

Le routeur demande une autorisation et nous vous en fournissons cinq. Le routeur met en cache toutes ces réponses de manière incorrecte.

image

Évidemment, cette attaque est également utile si le routeur agit comme un serveur DNS, car elle permet d'attaquer les clients du routeur.

Cette attaque permet également d'exploiter une vulnérabilité plus grave: rétrograder ou rétroporter la version RouterOS. L'attaquant recrée la logique du serveur de mise à jour, y compris le journal des modifications, et force RouterOS à accepter la version obsolète (vulnérable) comme actuelle. Le danger réside ici dans le fait que lors de la "mise à jour" de la version, le mot de passe administrateur est réinitialisé à la valeur par défaut - un attaquant peut se connecter au système avec un mot de passe vide!


L'attaque fonctionne assez bien, malgré le fait que l' auteur implémente plusieurs autres vecteurs, y compris ceux liés à l' incorporation d'une porte dérobée dans le firmware , mais c'est déjà une technique redondante et il est illégal de l'utiliser à des fins illégitimes.

La protection


La simple désactivation de Winbox protège contre ces attaques. Malgré la commodité de l'administration via Winbox, il est préférable d'utiliser le protocole SSH.

Source: https://habr.com/ru/post/fr473676/


All Articles