Уязвимост в RouterOS застрашава стотици хиляди устройства

Уязвимост в RouterOS застрашава стотици хиляди устройства

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

Уязвимост в RouterOS застрашава стотици хиляди устройства

Детайли за уязвимостта

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

Уязвимост в RouterOS застрашава стотици хиляди устройства

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

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

Уязвимост в RouterOS застрашава стотици хиляди устройства

Но дори и с деактивирана функция на сървъра, маршрутизаторът поддържа собствен DNS кеш.

Уязвимост в RouterOS застрашава стотици хиляди устройства

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

Уязвимост в 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()

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

Уязвимост в 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()

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

Уязвимост в RouterOS застрашава стотици хиляди устройства

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

Също така, тази атака позволява да се експлоатира по-сериозна уязвимост: да се извърши понижаване или бекстортиране на версията на RouterOS. Атакуващият възстановява логиката на сървъра за обновления, включително changelog и кара RouterOS да възприеме остарялата (уязвима) версия като актуална. Опасността тук е, че при 'обновление' на версията паролата на администратора се сбросва на 'по подразбиране' — злоумышленикът може да влезе в системата с празна парола!

Възпроизведи видео

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

Защита

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

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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster