Vulnerabilidade de backport no RouterOS coloca centenas de milhares de dispositivos em risco

Vulnerabilidade de backport no RouterOS coloca centenas de milhares de dispositivos em risco

A capacidade de fazer downgrade remotamente de dispositivos baseados em RouterOS (Mikrotik) coloca em risco centenas de milhares de dispositivos de rede. A vulnerabilidade está associada ao envenenamento do cache DNS do protocolo Winbox e permite carregar firmware desatualizado (com uma redefinição de senha padrão) ou modificado no dispositivo.

Vulnerabilidade de backport no RouterOS coloca centenas de milhares de dispositivos em risco

Detalhes da vulnerabilidade

O terminal RouterOS suporta o comando resolve para pesquisa de DNS.

Vulnerabilidade de backport no RouterOS coloca centenas de milhares de dispositivos em risco

Esta solicitação é tratada por um binário chamado resolvedor. Resolver é um dos muitos binários que se conectam ao protocolo Winbox do RouterOS. Em alto nível, as “mensagens” enviadas para a porta Winbox podem ser roteadas para vários binários no RouterOS com base em um esquema de numeração baseado em array.

Por padrão, o RouterOS tem o recurso de servidor DNS desabilitado.

Vulnerabilidade de backport no RouterOS coloca centenas de milhares de dispositivos em risco

No entanto, mesmo quando a função de servidor está desativada, o roteador mantém seu próprio cache DNS.

Vulnerabilidade de backport no RouterOS coloca centenas de milhares de dispositivos em risco

Quando fazemos uma solicitação usando winbox_dns_request por exemplo example.com, o roteador irá armazenar em cache o resultado.

Vulnerabilidade de backport no RouterOS coloca centenas de milhares de dispositivos em risco

Como podemos especificar o servidor DNS através do qual a solicitação deve passar, inserir endereços incorretos é trivial. Por exemplo, você pode configurar uma implementação de servidor DNS em Filipe Klausresponder sempre com um registro A contendo o endereço 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 você pesquisar example.com usando o Winbox, verá que o cache DNS do roteador está envenenado.

Vulnerabilidade de backport no RouterOS coloca centenas de milhares de dispositivos em risco

É claro que envenenar example.com não é muito útil, pois o roteador não o utilizará de fato. No entanto, o roteador precisa acessar upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com e download.mikrotik.com. E graças a outro erro, é possível envenenar todos de uma 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 roteador solicita uma permissão e nós concedemos cinco de volta. O roteador não armazena em cache todas essas respostas corretamente.

Vulnerabilidade de backport no RouterOS coloca centenas de milhares de dispositivos em risco

Obviamente, este ataque também é útil se o roteador estiver atuando como um servidor DNS, pois permite que os clientes do roteador sejam atacados.

Este ataque também permite explorar uma vulnerabilidade mais séria: fazer downgrade ou backport da versão do RouterOS. O invasor recria a lógica do servidor de atualização, incluindo o changelog, e força o RouterOS a perceber a versão desatualizada (vulnerável) como atual. O perigo aqui reside no fato de que quando a versão é “atualizada”, a senha do administrador é redefinida para o valor padrão - um invasor pode fazer login no sistema com uma senha vazia!


O ataque está funcionando bastante, apesar do fato de que autor implementa vários outros vetores, incluindo aqueles relacionados a incorporando um backdoor no firmware, mas esta já é uma técnica redundante e a sua utilização para fins ilegítimos é ilegal.

Proteção

Simplesmente desabilitar o Winbox permite que você se proteja contra esses ataques. Apesar da comodidade de administração via Winbox, é melhor utilizar o protocolo SSH.

Fonte: habr.com

Adicionar um comentário