
mundësia për të ulur në distancë pajisjet e bazuara në RouterOS (Mikrotik) vë në rrezik qindra mijëra pajisje rrjetësore. Vulnerabiliteti është i lidhur me shkarkimin e DNS-cache të protokollit Winbox dhe lejon ngarkimin e një firmware-i të vjetruar (me rivendosjen e fjalëkalimit "si në fillim") ose të modifikuar në pajisje.

detajet e vulberabilitetit
Terminali RouterOS mbështet komandën e zgjidhjes për të kërkuar DNS.

Kërkesa trajtohet nga një skedar binar i quajtur resolver. Resolver është një nga shumë skedarë binarë që lidhen me protokollin Winbox nga RouterOS. Në një nivel të lartë, "mesazhet" e dërguara në portin Winbox mund të drejtohen në skedarë të ndryshëm binarë në RouterOS të bazuara në një skemë numërimi të bazuar në array.
Në mënyrë të paracaktuar, funksioni i serverit DNS është i çaktivizuar në RouterOS.

Mirëpo, edhe me funksionin e serverit të çaktivizuar, routeri mbështet një cache të vetin DNS.

Kur bëjmë një kërkesë duke përdorur winbox_dns_request, për shembull, example.com, routeri do të ruajë rezultatin.

Duke qenë se mund të指定 DNS-serverin përmes të cilit duhet të kalojë kërkesa, është triviale të futësh adresa të gabuara. Për shembull, mund të konfigurosh realizimin e serverit DNS nga , në mënyrë që të përgjigjet gjithmonë me një запис A që përmban adresën IP 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("---- Përgjigje:n", reply)
return reply.pack()Tani, nëse kërkon example.com me Winbox, mund të shohësh se cache DNS i routerit është i helmuar.

Sigurisht, helmimi i example.com nuk është shumë i dobishëm, pasi routeri në realitet nuk do ta përdorë atë. Megjithatë, routeri ka nevojë të bëjë kërkesa për upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com dhe download.mikrotik.com. Dhe falë një gabimi tjetër, ka mundësinë të helmojë të gjitha ato njëherësh.
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("---- Përgjigje:n", reply)
return reply.pack()Ruter kërkon një lejim të vetëm, ndërsa ne ofrojmë pesë në kthim. Ruter nuk e ruan saktë të gjitha këto përgjigje.

Është e qartë se ky sulm është gjithashtu i dobishëm nëse ruterit i është caktuar roli i serverit DNS, pasi lejon sulmin e klientëve të ruterit.
Po ashtu, ky sulm lejon shfrytëzimin e një dobësie më serioze: realizimin e një downgrade ose backport të versionit të RouterOS. Sulmuesi riprodhon logjikën e serverit të azhurnimeve, duke përfshirë changelog, dhe e bën RouterOS ta perceptojë një version të vjetruar (të dobët) si të zakonshëm. Rreziku këtu qëndron në faktin se gjatë "azhurnimit" versioni i fjalëkalimit të administratorit kthehet në vlerën "standard" — një sulmues mund të hyjë në sistem me një fjalëkalim bosh!

Sulmi është plotësisht funksional, megjithëse realizon disa vektorë të tjera, të lidhura gjithashtu me , por kjo është një teknikë e tepërt dhe përdorimi i saj për qëllime të paligjshme është një krim.
Mbrojtja
Thjesht çaktivizimi i Winbox-it siguron mbrojtje nga këto sulme. Megjithëse administrimi përmes Winbox është i përshtatshëm, është më mirë të përdoret protokolli SSH.
Burimi: habr.com
