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.
Detalls de la vulnerabilitat
El terminal RouterOS admet l'ordre de resolució per a les cerques de DNS.
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.
Tanmateix, fins i tot amb la funció de servidor desactivada, l'encaminador manté la seva pròpia memòria cau DNS.
Quan fem una sol·licitud utilitzant winbox_dns_request com example.com, l'encaminador guardarà a la memòria cau el resultat.
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
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.
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.
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ò
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