Backport podatność w RouterOS zagraża setkom tysięcy urządzeń.

Backport podatność w RouterOS zagraża setkom tysięcy urządzeń.

Możliwość zdalnego downgrade'u urządzeń opartych na RouterOS (Mikrotik) zagraża setkom tysięcy urządzeń sieciowych. Wrażliwość jest związana z zatruciem pamięci podręcznej DNS protokołu Winbox i pozwala na załadowanie przestarzałego (z przywróceniem hasła do ustawień fabrycznych) lub zmodyfikowanego firmware'u na urządzenie.

Backport podatność w RouterOS zagraża setkom tysięcy urządzeń.

Szczegóły wrażliwości

Terminal RouterOS obsługuje polecenie rozwiązywania dla wyszukiwania DNS.

Backport podatność w RouterOS zagraża setkom tysięcy urządzeń.

To żądanie jest przetwarzane przez plik binarny o nazwie resolver. Resolver jest jednym z wielu plików binarnych połączonych z protokołem Winbox od RouterOS. Na wysokim poziomie "wiadomości", wysyłane na port Winbox, mogą być kierowane do różnych plików binarnych w RouterOS na podstawie schematu numeracji opartego na tablicy.

Domyślnie w RouterOS funkcja serwera DNS jest wyłączona.

Backport podatność w RouterOS zagraża setkom tysięcy urządzeń.

Jednakże, nawet przy wyłączonej funkcji serwera, router utrzymuje własną pamięć podręczną DNS.

Backport podatność w RouterOS zagraża setkom tysięcy urządzeń.

Kiedy wykonujemy zapytanie, używając winbox_dns_request, na przykład example.com, router będzie przechowywał wynik w pamięci podręcznej.

Backport podatność w RouterOS zagraża setkom tysięcy urządzeń.

Ponieważ możemy wskazać serwer DNS, przez który powinno przejść zapytanie, wprowadzenie nieprawidłowych adresów jest trywialne. Na przykład, można skonfigurować implementację serwera DNS od Filipa Klausa, aby zawsze odpowiadał rekordem A zawierającym adres 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("---- Odpowiedź:n", reply)
    return reply.pack()

Teraz, jeśli za pomocą Winboxa poszukamy example.com, można zobaczyć, że pamięć podręczna DNS routera jest zatruta.

Backport podatność w RouterOS zagraża setkom tysięcy urządzeń.

Oczywiście, zatrucie example.com nie jest zbyt użyteczne, ponieważ router faktycznie nie będzie go używał. Niemniej jednak, router musi komunikować się z upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com i download.mikrotik.com. I dzięki jeszcze jeden błąd istnieje możliwość zatrucia ich wszystkich jednocześnie.

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("---- Odpowiedź:n", reply)
    return reply.pack()

Router żąda jednego uprawnienia, a my zwracamy pięć. Router niewłaściwie buforuje wszystkie te odpowiedzi.

Backport podatność w RouterOS zagraża setkom tysięcy urządzeń.

Oczywiście ta atak jest również przydatny, jeśli router działa jako serwer DNS, ponieważ pozwala atakować klientów routera.

Ten atak pozwala także wykorzystać poważniejszą lukę: przeprowadzić downgrade lub backport wersji RouterOS. Atakujący odtwarza logikę serwera aktualizacji, w tym changelog, i sprawia, że RouterOS postrzega przestarzałą (wrażliwą) wersję jako aktualną. Niebezpieczeństwo polega na tym, że podczas 'aktualizacji' wersji hasło administratora jest resetowane do wartości 'domyślnej' — napastnik może zalogować się na konto z pustym hasłem!

Odtwarzaj wideo

Atak jest całkowicie skuteczny, mimo że autor wdraża jeszcze kilka wektorów, związanych między innymi z wdrożeniem backdoora w oprogramowaniu, ale to już nadmiarowa technika, a jej zastosowanie w nielegalnych celach jest niezgodne z prawem.

Ochrona

Proste wyłączenie Winboxa pozwala chronić się przed tymi atakami. Mimo wygody zarządzania za pomocą Winboxa lepiej skorzystać z protokołu SSH.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster