
RouterOS (Mikrotik) seadmete kaugallavõtmise võimalus seab ohtu sadu tuhandeid võrguseadmeid. Haavatavus on seotud Winboxi protokolli DNS-i vahemälu mürgitamisega ja võimaldab seadmele laadida vananenud (vaikeseade taastamise parooliga) või muudetud püsivara.

Haavatavuse üksikasjad
RouterOS terminal toetab DNS-i lahendamise käsku.

See päring töödeldakse binaarfailiga nimega resolver. Resolver on üks paljusid binaarfailide seas, mis on seotud RouterOSi Winboxi protokolliga. Suures plaanis võivad Winboxi pordile saadetud 'sõnumid' suunata erinevatesse binaarfailidesse RouterOSis vastavalt massiivi numbriskeemile.
RouterOSis on vaikimisi DNS-serveri funktsioon keelatud.

Kuid isegi DNS-serveri funktsiooni keelamisel hoiab ruuter oma DNS-i vahemälu.

Kui teeme päringu, kasutades winbox_dns_request, näiteks example.com, salvestab ruuter tulemuse.

Kuna saame määrata DNS-serveri, mille kaudu päring peaks kulgema, on vale aadresse sisestada lihtne. Näiteks saab seadistada DNS-serveri rakenduse , et vastaks alati A registreerimise kaudu, mis sisaldab IP-aadressi 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()Nüüd, kui otsida Winboxis example.com, siis võib näha, et ruuteri DNS-vahemälu on saastatud.

Tõepoolest, example.com'i saastamine ei ole väga kasulik, kuna ruuter ei kasuta seda tegelikult. Siiski vajab ruuter ühendust upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com ja download.mikrotik.com. Ja tänu veel ühele veale on võimalus saastada neid kõiki korraga.
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()Ruuter küsib ühte lubatust, kuid me anname tagasi viis. Ruuter salvestab kõik need vastused valesti.

On ilmne, et see rünnak on samuti kasulik, kui ruuter tegutseb DNS-serverina, kuna see võimaldab rünnata ruuteri kliente.
See rünnak võimaldab ära kasutada ka tõsisemat haavatavust: teostada ruuterite operatsioonisüsteemi versiooni allahindlust või taandamist. Ründaja rekonstrueerib värskenduste serveri loogika, sealhulgas muudatuste logi, ning sundib RouterOS-i vananenud (haavatava) versiooni aktsepteerimiseks. Siin peitub oht selles, et versiooni „uuendamisel“ lähtestatakse administraatori parool vaikeväärtusele – kurjategija pääseb süsteemi sisse tühja parooliga!

Rünnak on täiesti toimiv, vaatamata sellele, et rakendab veel mitu vektorit, sealhulgas , kuid see on juba ülemäärane tehnika ja selle rakendamine ebaseaduslikel eesmärkidel on seadusvastane.
Kaitse
Winboxi lihtne keelamine aitab end nende rünnakute eest kaitsta. Kuigi Winboxi kaudu haldamine on mugav, tuleks kasutada SSH-protokolli.
Allikas: habr.com
