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

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

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

image

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



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

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

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



Для тех, кто в танке


В 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. Вы знаете источник или место покупки этого устройства?
Как оказалось, они не учли, что я пишу из России. Данная модель роутера распространялась только в нашей стране. Переписка закончилась тем, что мне выслали новую прошивку, в которой устранены все недостатки предыдущей и добавлено много фич, но почему-то она не оказалась в публичном доступе.

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 24: ↑20 и ↓4+16
Комментарии9

Публикации