La vulnerabilitat de backport a RouterOS amenaça centenars de milers de dispositius

La vulnerabilitat de backport a RouterOS amenaça centenars de milers de dispositius

La possibilitat de rebaixar de manera remota els dispositius basats en RouterOS (Mikrotik) posa en perill centenars de milers de dispositius de xarxa. La vulnerabilitat està relacionada amb l'enverinament de la memòria cau DNS del protocol Winbox i permet descarregar al dispositiu un firmware obsolet (amb una contrasenya predeterminada restabliment) o modificat.

La vulnerabilitat de backport a RouterOS amenaça centenars de milers de dispositius

Detalls de la vulnerabilitat

El terminal RouterOS admet l'ordre de resolució per a les cerques de DNS.

La vulnerabilitat de backport a RouterOS amenaça centenars de milers de dispositius

Aquesta sol·licitud la gestiona un solucionador binari anomenat. Resolver és un dels molts binaris que estan connectats al protocol Winbox de RouterOS. A un alt nivell, els "missatges" enviats a un port Winbox es poden encaminar a diversos binaris a RouterOS basats en un esquema de numeració basat en matrius.

La funció del servidor DNS està desactivada de manera predeterminada a RouterOS.

La vulnerabilitat de backport a RouterOS amenaça centenars de milers de dispositius

Tanmateix, fins i tot amb la funció de servidor desactivada, l'encaminador manté la seva pròpia memòria cau DNS.

La vulnerabilitat de backport a RouterOS amenaça centenars de milers de dispositius

Quan fem una sol·licitud utilitzant winbox_dns_request com example.com, l'encaminador guardarà a la memòria cau el resultat.

La vulnerabilitat de backport a RouterOS amenaça centenars de milers de dispositius

Com que podem especificar el servidor DNS a través del qual ha de passar la sol·licitud, és trivial introduir adreces incorrectes. Per exemple, podeu configurar la implementació del servidor DNS des de Felip Clausper respondre sempre amb un registre A que contingui l'adreça 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()

Ara, si feu servir Winbox per cercar example.com, podreu veure que la memòria cau DNS de l'encaminador està enverinada.

La vulnerabilitat de backport a RouterOS amenaça centenars de milers de dispositius

Per descomptat, enverinar example.com no és gaire útil, ja que l'encaminador no l'utilitzarà. Tanmateix, l'encaminador ha d'accedir a upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com i download.mikrotik.com. I gràcies a un altre error, és possible enverinar-los tots alhora.

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

L'encaminador sol·licita una subvenció i nosaltres n'atorguem cinc. L'encaminador guarda incorrectament a la memòria cau totes aquestes respostes.

La vulnerabilitat de backport a RouterOS amenaça centenars de milers de dispositius

Evidentment, aquest atac també és útil si l'encaminador està actuant com a servidor DNS, ja que permet atacar els clients de l'encaminador.

A més, aquest atac permet explotar una vulnerabilitat més greu: rebaixar o retroportar la versió de RouterOS. L'atacant recrea la lògica del servidor d'actualització, inclòs el registre de canvis, i obliga a RouterOS a acceptar la versió obsoleta (vulnerable) com a actualitzada. El perill aquí rau en el fet que quan "actualitzeu" la versió, la contrasenya de l'administrador es restableix al valor "predeterminat": un atacant pot iniciar sessió amb una contrasenya en blanc!


L'atac funciona bastant, malgrat això autor implementa diversos vectors més relacionats, entre altres coses, amb incrustar una porta posterior al firmware, però aquesta ja és una tecnologia redundant i el seu ús amb finalitats il·legítimes és il·legal.

protecció

Simplement desactivar Winbox ajuda a protegir-se d'aquests atacs. Malgrat la comoditat de l'administració mitjançant Winbox, és millor utilitzar el protocol SSH.

Font: www.habr.com

Afegeix comentari