Vulnerabilitatea Backport din RouterOS pune în pericol sute de mii de dispozitive

Vulnerabilitatea Backport din RouterOS pune în pericol sute de mii de dispozitive

Capacitatea de a downgrade de la distanță dispozitivele bazate pe RouterOS (Mikrotik) pune sute de mii de dispozitive de rețea în pericol. Vulnerabilitatea este asociată cu otrăvirea memoriei cache DNS a protocolului Winbox și vă permite să încărcați firmware învechit (cu o resetare implicită a parolei) sau modificat pe dispozitiv.

Vulnerabilitatea Backport din RouterOS pune în pericol sute de mii de dispozitive

Detalii despre vulnerabilitate

Terminalul RouterOS acceptă comanda resolve pentru căutarea DNS.

Vulnerabilitatea Backport din RouterOS pune în pericol sute de mii de dispozitive

Această solicitare este gestionată de un binar numit resolver. Resolver este unul dintre multele binare care se conectează la protocolul Winbox al RouterOS. La un nivel înalt, „mesajele” trimise către portul Winbox pot fi direcționate către diferite binare în RouterOS pe baza unei scheme de numerotare bazată pe matrice.

În mod implicit, RouterOS are caracteristica serverului DNS dezactivată.

Vulnerabilitatea Backport din RouterOS pune în pericol sute de mii de dispozitive

Cu toate acestea, chiar și atunci când funcția serverului este dezactivată, routerul își menține propriul cache DNS.

Vulnerabilitatea Backport din RouterOS pune în pericol sute de mii de dispozitive

Când facem o solicitare folosind winbox_dns_request, de exemplu example.com, routerul va stoca în cache rezultatul.

Vulnerabilitatea Backport din RouterOS pune în pericol sute de mii de dispozitive

Deoarece putem specifica serverul DNS prin care trebuie să treacă cererea, introducerea adreselor incorecte este banală. De exemplu, puteți configura o implementare a unui server DNS de la Philip Klaussă răspundă întotdeauna cu o înregistrare A care conține adresa 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("---- Reply:n", reply)
    return reply.pack()

Acum, dacă căutați example.com folosind Winbox, puteți vedea că memoria cache DNS a routerului este otrăvită.

Vulnerabilitatea Backport din RouterOS pune în pericol sute de mii de dispozitive

Desigur, intoxicația example.com nu este foarte utilă, deoarece routerul nu îl va folosi de fapt. Totuși, routerul trebuie să acceseze upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com și download.mikrotik.com. Și datorită unei alte greșeli, este posibil să le otrăviți pe toate deodată.

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

Routerul solicită o permisiune, iar noi acordăm cinci înapoi. Routerul nu memorează în cache toate aceste răspunsuri corect.

Vulnerabilitatea Backport din RouterOS pune în pericol sute de mii de dispozitive

Evident, acest atac este util și dacă routerul acționează ca un server DNS, deoarece permite ca clienții routerului să fie atacați.

Acest atac vă permite, de asemenea, să exploatați o vulnerabilitate mai gravă: downgrade sau backportare a versiunii RouterOS. Atacatorul recreează logica serverului de actualizare, inclusiv jurnalul de modificări și forțează RouterOS să perceapă versiunea învechită (vulnerabilă) ca actuală. Pericolul aici constă în faptul că, atunci când versiunea este „actualizată”, parola administratorului este resetată la valoarea implicită - un atacator se poate conecta la sistem cu o parolă goală!


Atacul funcționează destul de bine, în ciuda faptului că autor implementează mai mulți vectori, inclusiv cei legați de încorporarea unei uși din spate în firmware, dar aceasta este deja o tehnică redundantă și utilizarea ei în scopuri nelegitime este ilegală.

protecție

Pur și simplu dezactivarea Winbox vă permite să vă protejați de aceste atacuri. În ciuda confortului administrării prin Winbox, este mai bine să utilizați protocolul SSH.

Sursa: www.habr.com

Adauga un comentariu