La vulnérabilité de backport dans RouterOS met en danger des centaines de milliers d’appareils

La vulnérabilité de backport dans RouterOS met en danger des centaines de milliers d’appareils

La possibilité de rétrograder à distance des appareils 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 permet de charger un firmware obsolète (avec une réinitialisation du mot de passe par défaut) ou modifié sur l'appareil.

La vulnérabilité de backport dans RouterOS met en danger des centaines de milliers d’appareils

Détails de la vulnérabilité

Le terminal RouterOS prend en charge la commande solve pour la recherche DNS.

La vulnérabilité de backport dans RouterOS met en danger des centaines de milliers d’appareils

Cette requête est gérée par un binaire appelé résolveur. Resolver est l'un des nombreux binaires qui se connectent au protocole Winbox de RouterOS. À un niveau élevé, les « messages » envoyés au port Winbox peuvent être acheminés vers divers 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.

La vulnérabilité de backport dans RouterOS met en danger des centaines de milliers d’appareils

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

La vulnérabilité de backport dans RouterOS met en danger des centaines de milliers d’appareils

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

La vulnérabilité de backport dans RouterOS met en danger des centaines de milliers d’appareils

Puisque nous pouvons spécifier le serveur DNS par lequel la requête doit passer, saisir des adresses incorrectes est trivial. Par exemple, vous pouvez configurer une implémentation de serveur DNS à partir de Philippe Klausde 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 est empoisonné.

La vulnérabilité de backport dans RouterOS met en danger des centaines de milliers d’appareils

Bien sûr, empoisonner example.com n'est pas très utile puisque le routeur ne l'utilisera pas réellement. Cependant, le routeur doit accéder à 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 d’un coup.

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 en accordons cinq en retour. Le routeur ne met pas correctement en cache toutes ces réponses.

La vulnérabilité de backport dans RouterOS met en danger des centaines de milliers d’appareils

Évidemment, cette attaque est également utile si le routeur fait office de 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 de RouterOS. L'attaquant recrée la logique du serveur de mise à jour, y compris le journal des modifications, et force RouterOS à percevoir la version obsolète (vulnérable) comme actuelle. Le danger ici réside dans le fait que lorsque la version est « mise à jour », 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 plutôt bien, malgré le fait que auteur implémente plusieurs autres vecteurs, y compris ceux liés à intégrer une porte dérobée dans le firmware, mais il s’agit déjà d’une technique redondante et son utilisation à des fins illégitimes est illégale.

Protection

Désactiver simplement Winbox vous permet de vous protéger de ces attaques. Malgré la commodité de l'administration via Winbox, il est préférable d'utiliser le protocole SSH.

Source: habr.com

Ajouter un commentaire