[Перевод] Да какого, блин, хрена, D-Link⁈

Как уже писал в апдейте к посту про баг в HNAP DIR-890L, его нашли в начале года, в DIR-645, и выпустили патч. Сейчас D-Link выпустил патч и для DIR-890L.Патчи для DIR-645 и DIR-890L одинаковые, поэтому я буду писать только про DIR-890L.Хоть в предыдущем посте я рассматривал только выполнение команд, патч указывает на несколько дыр в безопасности, которые появились из-за использования strstr для валидации HNAP-заголовка SOAPAction:

Использование неутентифицированных пользовательских данных в вызове system Использование неутентифицированных пользовательских данных в вызове sprintf Неаутентифицированные пользователи могут выполнять привилегированные HNAP-запросы (такие, как смена пароля администратора) Видите, D-Link признала все это в информации об уязвимости, и они ясно представляли все векторы атаки.Итак, убрали ли они переполнение стека sprintf? imagesprintf (cmd_buf, «sh %s%s.sh > /dev/console»,»/var/run», SOAPAction);

Нет.

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

Конечно нет!

Используют ли они strcmp вместо strstr для валидации заголовка SOAPAction? imageif (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.

© Habrahabr.ru