
A RouterOS (Mikrotik) alapú eszközök távoli visszaminősítésének lehetősége számos hálózati eszközt veszélyeztet. A sebezhetőség a Winbox protokoll DNS gyorsítótárának manipulálásával kapcsolatos, és lehetővé teszi elavult (az alapértelmezett jelszó visszaállításával) vagy módosított firmware betöltését az eszközre.

A sebezhetőség részletei
A RouterOS terminál támogatja a feloldási parancsot a DNS keresésére.

Ez a kérés egy resolver nevű bináris fájl által kerül feldolgozásra. A Resolver egyike a számos, a RouterOS Winbox protokollhoz csatlakoztatott bináris fájloknak. Magas szinten a Winbox portjára küldött "üzenetek" a számozási séma alapján különböző bináris fájlokhoz irányíthatók RouterOS-en belül.
Alapértelmezés szerint a RouterOS DNS-szolgáltatási funkciója ki van kapcsolva.

Azonban még ki kapcsolt DNS-szolgáltatás mellett is, a router saját DNS gyorsítótárat fenntart.

Amikor kérdést teszünk fel a winbox_dns_request segítségével, például example.com, a router gyorsítja a választ.

Mivel megadhatjuk a DNS-szolgáltatót, amelyen a kérésnek át kell mennie, roppant egyszerű hamis címeket beállítani. Például beállítható egy DNS-szolgáltatás a , amely mindig A rekorddal válaszol, ami a 192.168.88.250 IP címet tartalmazza.
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("---- Válasz:n", reply)
return reply.pack()Most, ha Winbox segítségével megkeressük az example.com-ot, látható, hogy a router DNS gyorsítótára meg van mérgezve.

Természetesen az example.com megmérgezése nem túl hasznos, mivel a router ennek ténylegesen nem fogja használni. Mindazonáltal a routernek szüksége van az upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com és download.mikrotik.com elérésére. És egy újabb hiba révén lehetőség van az összes egyidejű megmérgezésére.
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("---- Válasz:n", reply)
return reply.pack()A router requests one permission, and we provide five in return. The router incorrectly caches all these responses.

It is clear that this attack is also useful if the router acts as a DNS server, as it allows the attacker to target the router's clients.
This attack also enables the exploitation of a more serious vulnerability: downgrading or backporting the RouterOS version. The attacker recreates the update server's logic, including the changelog, and tricks RouterOS into thinking an outdated (vulnerable) version is current. The danger here is that during the version 'upgrade', the administrator password is reset to 'default' – the attacker can gain access with an empty password!

The attack is quite effective, even though implements several other vectors, including , but that is already an excessive technique, and using it for illegitimate purposes is illegal.
Védelem
Simply disabling Winbox provides protection against these attacks. Despite the convenience of administration through Winbox, it is better to use the SSH protocol.
Forrás: habr.com
