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

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

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

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

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

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

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

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

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

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

Сега, ако чрез Winbox потърсите example.com, ще можете да видите, че 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. Атакуващият възпроизвежда логиката на сервера за обновления, включително changelog, и кара RouterOS да възприеме остарялата (уязвима) версия като актуална. Опасността тук е, че при "актуализиране" на версията паролата на администратора се сбрасыра до "по подразбиране" — злоуместен субект може да влезе в системата със зададена парола!

Пуснете видеото

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

Защита

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

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

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