Backport-sårbarhed i RouterOS sætter hundredtusindvis af enheder i fare

Backport-sårbarhed i RouterOS sætter hundredtusindvis af enheder i fare

Muligheden for at nedgradere enheder baseret på RouterOS (Mikrotik) fjerner sikkerheden for hundredtusindvis af netværksenheder. Sårbarheden er relateret til forurening af DNS-cache i Winbox-protokollen og muliggør nedladning af forældet (med nulstilling af koden "som standard") eller modificeret firmware til enheden.

Backport-sårbarhed i RouterOS sætter hundredtusindvis af enheder i fare

Detaljer om sårbarheden

RouterOS-terminalen understøtter en kommando til opløsning af DNS.

Backport-sårbarhed i RouterOS sætter hundredtusindvis af enheder i fare

Denne forespørgsel behandles af en binær fil ved navn resolver. Resolver er en af mange binære filer, der er tilsluttet Winbox-protokollen fra RouterOS. På et højt niveau kan "beskeder", der sendes til Winbox-porten, henvises til forskellige binære filer i RouterOS baseret på en array-baseret nummereringsschema.

Som standard er DNS-serverfunktionen deaktiveret i RouterOS.

Backport-sårbarhed i RouterOS sætter hundredtusindvis af enheder i fare

Selvom serverfunktionen er deaktiveret, understøtter routeren sin egen DNS-cache.

Backport-sårbarhed i RouterOS sætter hundredtusindvis af enheder i fare

Når vi foretager en forespørgsel ved hjælp af winbox_dns_request, for eksempel example.com, vil routeren cache resultatet.

Backport-sårbarhed i RouterOS sætter hundredtusindvis af enheder i fare

Da vi kan angive en DNS-server, som forespørgslen skal gå gennem, er det trivielt at indtaste falske adresser. For eksempel kan man konfigurere en DNS-serverimplementering fra Philipp Klaus, så den altid svarer med en A-post, der indeholder IP-adressen 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()

Nu, hvis man søger example.com via Winbox, kan man se, at routerens DNS-cache er forurenet.

Backport-sårbarhed i RouterOS sætter hundredtusindvis af enheder i fare

Selvfølgelig er forurening af example.com ikke særlig nyttigt, da routeren faktisk ikke vil bruge det. Ikke desto mindre skal routeren lave anmodninger til upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com og download.mikrotik.com. Og takket være en anden fejl er der mulighed for at forene dem alle på én gang.

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()

Routeren anmoder om én tilladelse, og vi giver fem tilbage. Routeren cachen alle disse svar forkert.

Backport-sårbarhed i RouterOS sætter hundredtusindvis af enheder i fare

Det er tydeligt, at denne angreb også er nyttig, hvis routeren fungerer som DNS-server, da det gør det muligt at angrebe routerens kunder.

Denne angreb udnyttes også til at udnytte en mere alvorlig sårbarhed: at gennemføre et downgrade eller backport af RouterOS-versionen. Angriberen genskaber logikken fra opdateringsserveren, inklusive changelog, og får RouterOS til at opfatte en forældet (sårbar) version som aktuel. Faren her ligger i, at ved "opdatering" af versionen nulstilles administratorpassordet til værdi "standard" - angriberen kan logge ind med et tomt password!

Afspil video

Angrebet fungerer fint, selvom forfatter implementerer flere andre vektorer, herunder indsættelse af en backdoor i firmware, men det er allerede en overdreven teknik, og anvendelsen heraf til ulovlige formål er strafbart.

Lag

En simpel deaktivering af Winbox kan beskytte mod disse angreb. På trods af bekvemmeligheden ved administration via Winbox er det bedre at bruge SSH-protokollen.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster