Как стать автором
Обновить

Да какого, блин, хрена, D-Link⁈

Время на прочтение 2 мин
Количество просмотров 80K
Автор оригинала: Craig
Как уже писал в апдейте к посту про баг в HNAP DIR-890L, его нашли в начале года, в DIR-645, и выпустили патч. Сейчас D-Link выпустил патч и для DIR-890L.
Патчи для DIR-645 и DIR-890L одинаковые, поэтому я буду писать только про DIR-890L.

Хоть в предыдущем посте я рассматривал только выполнение команд, патч указывает на несколько дыр в безопасности, которые появились из-за использования strstr для валидации HNAP-заголовка SOAPAction:
  • Использование неаутентифицированных пользовательских данных в вызове system
  • Использование неаутентифицированных пользовательских данных в вызове sprintf
  • Неаутентифицированные пользователи могут выполнять привилегированные HNAP-запросы (такие, как смена пароля администратора)

Видите, D-Link признала все это в информации об уязвимости, и они ясно представляли все векторы атаки.
Итак, убрали ли они переполнение стека sprintf?

image
sprintf(cmd_buf, “sh %s%s.sh > /dev/console”, “/var/run”, SOAPAction);

Нет.

Убрали ли они вызов system?
image
system(cmd_buf);

Конечно нет!

Используют ли они strcmp вместо strstr для валидации заголовка SOAPAction?
image
if(strstr(SOAPAction, “http://purenetworks.com/HNAP1/GetDeviceSettings”) != NULL)

Пфф, че заморачиваться-то?

Все их решение этих фундаментальных проблем сводится к использованию функции access для проверки того, что в SOAPAction допустимое, ожидаемое значение, путем проверки существования файла /etc/templates/hnap/.php:
image
Вызов sprintf(), затем сразу access()

Ага, это хотя бы защитит от внедрения произвольных данных в sprintf
и system

Однако, они добавили еще один sprintf до access; их патч для закрытия неаутентифицированного переполнения стека в sprintf добавляет еще одно неаутентифицированное переполнение стека в sprintf.

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

Думаю, никому нет дела до того, что любой неаутентифицированный пользователь может получить информацию о хостах во внутренней сети, просматривать и изменять системные настройки или сбросить роутер на заводские настройки:
$ wget --header="SOAPAction: http://purenetworks.com/HNAP1/GetDeviceSettings/SetFactoryDefault" http://192.168.0.1/HNAP1

Оставайся таким же классным, D-Link.

UPD: D-Link выпустили обновление, закрывающее уязвимости
Теги:
Хабы:
+121
Комментарии 47
Комментарии Комментарии 47

Публикации

Истории

Работа

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн