
Možnost oddaljenega zmanjšanja naprav z operacijskim sistemom RouterOS (Mikrotik) ogroža na tisoče omrežnih naprav. Ranljivost je povezana z zastrupljanjem DNS predpomnilnika protokola Winbox in omogoča nalaganje zastarele (s ponastavitvijo gesla na "privzeto") ali spremenjene programske opreme na napravo.

Podrobnosti ranljivosti
Terminal RouterOS podpira ukaz za razreševanje za iskanje DNS.

Ta zahteva se obdeluje z binarno datoteko z imenom resolver. Resolver je ena izmed mnogih binarnih datotek, ki so povezane s protokolom Winbox v RouterOS. Na visoki ravni se "sporočila", poslana na vrata Winbox, lahko usmerjajo v različne binarne datoteke v RouterOS na podlagi sheme številčenja, ki temelji na polju.
Privzeto je funkcija DNS strežnika v RouterOS onemogočena.

Kljub temu pa tudi pri onemogočeni funkciji strežnika usmerjevalnik podpira svoj predpomnilnik DNS.

Ko izvedemo zahtevo z uporabo winbox_dns_request, na primer, example.com, bo usmerjevalnik shranil rezultat v predpomnilnik.

Ker lahko določimo DNS strežnik, preko katerega naj bi šla zahteva, je vnašanje napačnih naslovov trivialno. Na primer, lahko nastavimo implementacijo DNS strežnika od , da vedno odgovarja z zapisom A, ki vsebuje IP naslov 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("---- Odgovor:n", reply)
return reply.pack()Zdaj, če ga z Winboxom poiščemo example.com, lahko vidimo, da je DNS predpomnilnik usmerjevalnika zastrupljen.

Seveda zastrupitev example.com ni zelo koristna, ker ga usmerjevalnik dejansko ne bo uporabljal. Kljub temu pa se usmerjevalnik mora obrniti na upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com in download.mikrotik.com. In zaradi še ene napake obstaja možnost, da jih zastrupimo vse hkrati.
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("---- Odgovor:n", reply)
return reply.pack()Usmernik zahteva eno dovoljenje, mi pa vrnemo pet. Usmernik napačno predpomni vse te odgovore.

Očitno je, da je ta napad prav tako koristen, če usmernik deluje kot DNS strežnik, saj omogoča napad na stranke usmernika.
Ta napad prav tako izkorišča resnejšo ranljivost: omogoča posodobitev ali povratno prenašanje različice RouterOS. Napadalec ponovno ustvari logiko posodobitvenega strežnika, vključno s spremembami in prisili RouterOS, da obravnava zastarelo (ranljivo) različico kot aktualno. Tukaj je nevarnost v tem, da se pri 'posodabljanju' različice geslo administratorja ponastavi na privzeto vrednost — napadalec lahko vstopi v sistem s praznim geslom!

Napad je sicer delujoč, kljub temu da izvaja še nekaj vektorjev, povezanih tudi z , a to je že odvečna tehnika in njeno uporabo v nezakonitih namenih je prepovedano.
Zaščita
Preprosto izklopitev Winboxa omogoča zaščito pred temi napadi. Kljub udobnosti upravljanja preko Winboxa je bolje uporabiti protokol SSH.
Izvor: habr.com
