История одной НЕ уязвимости

в 14:02, , рубрики: bug bounty, bugbounty, bugs, security, wi-fi, информационная безопасность, Сетевое оборудование, Тестирование IT-систем

Некоторое время назад мне предоставилась возможность поэксперементировать с настройками одного заурядного роутера. Дело в том, что первое апреля обязывало меня разыграть своих товарищей с университета. В университеть была Wi-Fi сеть. Мною было решено поднять на своем роутере поддельную есть (задать имя, пароль и установить MAC-адрес одной из легитимных точек доступа), на ноутбуке запустить вой DNS, web сервер. Каждый случайно подключившийся к моей сети и попытавшийся на зайти на какой либо сайт должен был перенапрявляться на мою страничку с первоапрельской картинкой. Но история не об этом. Когда я ковырялся в настройках роутера я нашел интересный баг, о нем я сегодня и расскажу.

image


На этапе настройки роутер был подключен к интернету. Но устройства, подключенные к Wi-Fi почему-то его не получали. Я полез разбираться. В панели роутера была вкладка с возможностью воспользоваться утилитой ping, поэтому telnet можно не включать (надеюсь все читатели понимают, чем опасен telnet, открытый наружу?). Выглядела форма вот так:

История одной НЕ уязвимости - 2

Реализована эта фича следующим образом. Программа роутера получает от пользователя строку, содержащую адрес, затем подставляет в строку вызова команды ping:

ping -c <число пакетов> <хост>

На сколько хорошо проверяет роутер строку, содержащую адрес? Именно этот вопрос возник у меня в голове. Тогда я подставил амперсанд и команду ls. Получил вот это:
История одной НЕ уязвимости - 3

Для тех, кто не в танке:
В UNIX системах мы можем заставить bash выполнять команду в фоновом режиме, подставив после нее амперсанд. При этом, мы можем подставить после амперсанда команду, и она выполнится одновременно с первой. Чем я и воспользовался в данном случае. Подставив «8.8.8.8 & ls», я получил «ping -c 3 8.8.8.8 & ls». Роутер выполнил одновременно команду ping и ls. Затем вывел результат.

Будь этот баг допущен в любом другом месте, он стал бы очень серьезной угрозой. Ведь такая уязвимость помогла бы злоумышленнику получить полный контроль над устройством. Подобные уязвимости классифицируются как CWE-78 (OS Command Injection)

Мне не сиделось на месте, и я поспешил написать производителю о найденном баге. Я подробно описал модель роутера, версию прошивки и сценарий воспроизведения бага. На что получил интересный ответ:
image

Перевод (дословно)
Не могли бы вы проверить версию аппаратного обеспечения на нижней этикетке продукта?
У нас нет Rev. Px. Вы знаете источник или место покупки этого устройства?

Как оказалось, они не учли, что я пишу из России. Данная модель роутера распространялась только в нашей стране. Переписка закончилась тем, что мне выслали новую прошивку, в которой устранены все недостатки предыдущей и добавлено много фич, но почему то она не оказалась в публичном доступе.
История одной НЕ уязвимости - 5

Автор: DVoropaev

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js