Говорят, если у тебя в руках молоток, то все вокруг похоже на гвоздь. Инструменты для анализа защищенности прошивок в этом плане ничем не хуже молотка. Однажды мне достался от провайдера роутер D-Link DIR-620, который я начал изучать ради интереса. И чем дальше я углублялся в это, тем страшнее мне становилось за тех, кто пользуется таким оборудованием и не задумывается о его безопасности.

В прошлом году я обнаружил серию уязвимостей в DIR-620 RevG и отправил производителю репорт — информацию ты можешь найти в моем блоге. Некоторые из дыр прошивки — критические, например зашитые в нее админские учетки для веб-панели и Telnet. Эти уязвимости теперь известны как CVE-2018-6213 и CVE-2018-6210.

Но я решил не останавливаться на достигнутом и посмотреть, что еще мне подкинул провайдер вместе с роутером. В результате удалось обнаружить пару новых багов — не менее критичных, чем предыдущие. Постараюсь рассказать не только о самих уязвимостях, но и о том, как я их искал, чтобы ты мог повторить то же с другой моделью роутера. И конечно, моя цель — не только найти слабое место роутера, но и помочь производителям железа сделать свои продукты безопаснее.

WARNING

Сведения об описанных в материале уязвимостях были своевременно предоставлены всем ответственным лицам. Мы публикуем эту информацию в соответствии с общепринятой политикой разглашения уязвимостей. Однако в связи с тем, что большое количество устройств находятся в зоне риска, мы не будем раскрывать полную информацию и найденные учетные записи. Данный материал публикуется исключительно в образовательных целях и для того, чтобы обезопасить пользователей уязвимых устройств.

 

Начинаем исследование

Поскольку D-Link DIR-620 достался мне совершенно случайно, на его месте могла быть любая другая модель, а найденные уязвимости характерны и для других классов устройств — систем DVR, видеорегистраторов и прочих гаджетов. Кстати, проблемы с DVR мы разбирали в предыдущей статье.

Прежде чем начинать исследование, стоит заранее оценить масштабы потенциальных проблем и заглянуть в поисковые системы. К примеру, можно увидеть, что география распространения устройства сконцентрирована преимущественно в России и странах СНГ.

Объект исследования — D-Link DIR-620
Объект исследования — D-Link DIR-620

Чтобы найти устройства с нужной версией прошивки, стоит использовать как можно более точные фингерпринты софта — баннеры и версии сервисов, уникальные строковые комбинации в веб-панелях управления и подобное. Другими словами, любые уникальные характеристики и их совокупность, которые укажут поисковику на нужный софт среди тонны похожих прошивок.

Уязвимости и зашитые учетные записи объекта моего исследования были обнаружены в прошивке версии 1.0.37. В настоящее время существует более свежая прошивка 2.0.22, в которой эти баги отсутствуют. Однако при некорректном обновлении со старой версии прошивки на последнюю некоторые из проблем останутся.

 

Раскрытие чувствительной информации в конфигурационном файле

CVE: CVE-2018-12677
CVSS Base Score: 7.5
Вектор: (AV:L/AC:H/PR:H/UI:N/S:C/C:H/I:H/A:H)

Этот недостаток конфигурации — отличный пример того, как связка из несущественных косяков может привести к уязвимости. Если использовать уязвимость внедрения кода (OS command injection, CVE-2018-6211) из предыдущего материала, то у атакующего появляется возможность читать файлы. А это открывает возможность изучить внутренности запущенной прошивки. Как ты понимаешь, прошивка интересна тем, что содержит в себе все временные файлы и временную информацию, которую ты не найдешь в статике.

Как оказалось, в процессе работы создается конфигурационный файл tmp/config.json, который содержит все учетные данные пользователя в открытом виде. Беглый осмотр этого файла показывает, что там складываются буквально все настройки, которые затем подтягиваются различными сервисами прошивки. Поэтому при получении доступа к запущенной прошивке в первую очередь ищи все временные файлы и директории.

Баг не очень-то серьезный, если учесть, что атакующий должен иметь права привилегированного пользователя. Однако эта возможность хорошо помогает в эксплуатации следующей уязвимости.

 

Раскрытие чувствительной информации для непривилегированного пользователя

CVE: CVE-2018-12419
CVSS Base Score: 7.5
Вектор: (CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N)

Вторую уязвимость я нашел совершенно случайно: открыл веб-страницу аутентификации, посмотрел ее исходный код и увидел избыточную информацию со строками, напоминающими пароли. Вся эта информация напомнила формат представления конфигурационного файла, который я нашел ранее во временной директории.

Как оказалось, уязвимость CVE-2018-12677 раскрывает все пароли пользователей прошивки в конфигурационном файле, та, на которую я наткнулся, подтягивает часть этого файла в переменную JavaScript. И это дает возможность неавторизованному пользователю просматривать фрагмент содержимого файла без доступа в админку. При этом фрагмент содержит чувствительную к разглашению информацию: пароли в открытом виде и параметры конфигурации.

Фрагмент переменной, которая находится на главной веб-странице админской панели роутера
Фрагмент переменной, которая находится на главной веб-странице админской панели роутера
 

«Зашитые» учетные данные для веб-панели управления

CVE: CVE-2018-12676
CVSS Base Score: 10.0
Вектор: (CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H)

И снова вернемся к первой уязвимости, которая раскрывает конфигурационный файл. После его непродолжительного анализа можно найти странную учетную запись, которую пользователь точно не создавал. Проще всего пробежаться по распакованной прошивке (или по ее дампу) каким-нибудь парсером. Например, Firmwalker позволяет проверить содержимое дампа на наличие интересной информации: строк с паролями, сертификатов, конфигурационных файлов и прочего. Однако в моем случае никаких тулз не понадобилось — все учетки бережно складывались в тот же временный файл с конфигом.

Среди списка учеток прячется запись с именем пользователя, которое начинается со слова support. Как выяснилось позже, этот аккаунт предназначен для нужд службы поддержки провайдера. Используя эту учетную запись, атакующий может получить административный доступ к панели управления роутером.

Странная учетная запись в конфигурационном файле
Странная учетная запись в конфигурационном файле
 

Как себя обезопасить

Чтобы исправить описанные уязвимости, владельцу DIR-620 необходимо обновить прошивку до последней версии, на момент написания этой статьи доступна версия 2.0.22. При этом стоит иметь в виду, что после миграции с уязвимой версии прошивки на последнюю конфигурационный файл с зашитым аккаунтом тоже мигрирует в новую прошивку. Именно поэтому я рекомендую выполнить следующие шаги:

  • обновить прошивку до последней версии (2.0.22);
  • сбросить настройки роутера до заводских;
  • запретить любой доступ к веб-панели управления, используя белый список IP-адресов;
  • запретить любой доступ по протоколу Telnet;
  • регулярно менять пароли для учетных записей.

3 комментария

  1. Аватар

    divided

    28.03.2019 в 15:57

    Ну, d-link вообще очень дырявая вещь. А ещё, сколько их у меня не было, все переставали работать через пару месяцев после истечения гарантии. Тупо выкинуть только можно. А было их штук пять (использовал потому что дешёвые). В общем, отказался от них навсегда.

  2. Аватар

    Alex Gee

    30.03.2019 в 12:05

    DIR-620 rev.G — старое устройство, уже снятое с производства. Но как отмечено в статье на последней версии прошивки (2.0.22) уязвимости исправлены. После обновления необходимо сбрасывать конфигурацию к заводским настройкам.

  3. Аватар

    Laglag

    16.08.2019 в 17:11

    Дико такое читать… Дописываем в браузере и все

Оставить мнение