Уязвимостта на Backport в RouterOS излага на риск стотици хиляди устройства

Уязвимостта на Backport в RouterOS излага на риск стотици хиляди устройства

Възможността за дистанционно понижаване на устройства, базирани на RouterOS (Mikrotik), излага на риск стотици хиляди мрежови устройства. Уязвимостта е свързана с отравяне на DNS кеша на протокола Winbox и ви позволява да заредите остарял (с нулиране на паролата по подразбиране) или модифициран фърмуер на устройството.

Уязвимостта на Backport в RouterOS излага на риск стотици хиляди устройства

Подробности за уязвимостта

Терминалът на RouterOS поддържа командата resolve за DNS търсене.

Уязвимостта на Backport в RouterOS излага на риск стотици хиляди устройства

Тази заявка се обработва от двоичен файл, наречен преобразувател. Resolver е един от многото двоични файлове, които се свързват с протокола Winbox на RouterOS. На високо ниво „съобщенията“, изпратени до порта на Winbox, могат да бъдат насочени към различни двоични файлове в RouterOS въз основа на схема за номериране, базирана на масив.

По подразбиране RouterOS има деактивирана функция за DNS сървър.

Уязвимостта на Backport в RouterOS излага на риск стотици хиляди устройства

Въпреки това, дори когато сървърната функция е деактивирана, рутерът поддържа свой собствен DNS кеш.

Уязвимостта на Backport в RouterOS излага на риск стотици хиляди устройства

Когато направим заявка, използвайки winbox_dns_request, например example.com, рутерът ще кешира резултата.

Уязвимостта на Backport в RouterOS излага на риск стотици хиляди устройства

Тъй като можем да посочим DNS сървъра, през който да премине заявката, въвеждането на грешни адреси е тривиално. Например, можете да конфигурирате внедряване на DNS сървър от Филип Клаусвинаги да отговаря със запис A, съдържащ 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()

Сега, ако търсите example.com с помощта на Winbox, можете да видите, че DNS кешът на рутера е отровен.

Уязвимостта на Backport в RouterOS излага на риск стотици хиляди устройства

Разбира се, отравянето на example.com не е много полезно, тъй като рутерът всъщност няма да го използва. Рутерът обаче трябва да има достъп до upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com и download.mikrotik.com. И благодарение на друга грешка е възможно да ги отровите всички наведнъж.

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

Рутерът иска едно разрешение и ние му връщаме пет. Рутерът не кешира правилно всички тези отговори.

Уязвимостта на Backport в RouterOS излага на риск стотици хиляди устройства

Очевидно тази атака е полезна и ако рутерът действа като DNS сървър, тъй като позволява клиентите на рутера да бъдат атакувани.

Тази атака също така ви позволява да използвате по-сериозна уязвимост: да понижите или пренесете версията на RouterOS. Нападателят пресъздава логиката на сървъра за актуализиране, включително регистъра на промените, и принуждава RouterOS да възприема остарялата (уязвима) версия като текуща. Опасността тук се крие във факта, че когато версията е „актуализирана“, паролата на администратора се нулира до стойността по подразбиране - атакуващият може да влезе в системата с празна парола!


Атаката е доста работеща, въпреки факта, че автор внедрява още няколко вектора, включително тези, свързани с вграждане на задна врата във фърмуера, но това вече е излишна техника и използването й за нелегитимни цели е незаконно.

защита

Простото деактивиране на Winbox ви позволява да се предпазите от тези атаки. Въпреки удобството на администриране чрез Winbox, по-добре е да използвате SSH протокола.

Източник: www.habr.com

Добавяне на нов коментар