A capacità di downgrade remotely i dispusitivi basatu nantu RouterOS (Mikrotik) mette centinaie di millaie di dispusitivi reta à risicu. A vulnerabilità hè assuciata à l'avvelenamentu di u cache DNS di u protokollu Winbox è vi permette di carricà u firmware obsoletu (cun un resettore di password predeterminatu) o modificatu nantu à u dispusitivu.
Dettagli di vulnerabilità
U terminal RouterOS sustene u cumandamentu di risoluzione per a ricerca DNS.
Questa dumanda hè trattata da un binariu chjamatu resolver. Resolver hè unu di parechji binari chì cunnette à u protocolu Winbox di RouterOS. À un altu livellu, "missaghji" mandati à u portu Winbox pò esse instradati à parechji binari in RouterOS basatu nantu à un schema di numerazione basatu in array.
Per automaticamente, RouterOS hà a funzione di u servitore DNS disattivata.
Tuttavia, ancu quandu a funzione di u servitore hè disattivata, u router mantene a so propria cache DNS.
Quandu facemu una dumanda cù winbox_dns_request per esempiu example.com, u router cacherà u risultatu.
Siccomu pudemu specificà u servitore DNS à traversu quale a dumanda deve andà, inserisce indirizzi sbagliati hè triviale. Per esempiu, pudete cunfigurà una implementazione di u servitore DNS da
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()
Avà se cercate example.com cù Winbox, pudete vede chì a cache DNS di u router hè avvelenata.
Di sicuru, l'avvelenamentu example.com ùn hè micca assai utile postu chì u router ùn l'utilizarà micca. Tuttavia, u router hà bisognu à accede à upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com è download.mikrotik.com. È grazia à un altru sbagliu, hè pussibule avvilenu tutti in una volta.
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()
U router richiede un permessu, è cuncedemu cinque di ritornu. U router ùn cache micca tutte queste risposte currettamente.
Ovviamente, questu attaccu hè ancu utile se u router agisce cum'è un servitore DNS, postu chì permette à i clienti di u router per esse attaccati.
Questu attaccu permette ancu di sfruttà una vulnerabilità più seria: downgrade o backport a versione di RouterOS. L'attaccante ricree a logica di u servitore di l'aghjurnamentu, cumpresu u changelog, è forze RouterOS per perceive a versione antica (vulnerabile) cum'è attuale. U periculu quì si trova in u fattu chì quandu a versione hè "aghjurnata", a password di l'amministratore hè resettata à u valore predeterminatu - un attaccante pò accede à u sistema cù una password viota!
L'attaccu hè abbastanza travagliu, malgradu u fattu chì
prutezzione
Basta disattivà Winbox vi permette di prutezzione di sti attacchi. Malgradu a cunvenzione di l'amministrazione via Winbox, hè megliu aduprà u protocolu SSH.
Source: www.habr.com