В этой статье я расскажу о нескольких критических уязвимостях продукта Seagate Central Storage NAS.
Общая информация
Возможность удаленного использования: да
Требуется аутентификация: НЕТ
URL поставщика:
Технические детали
После получения последней версии прошивки устройства со
Содержимое обновления прошивки ZIP файл
С помощью
Функция субъекта вызывается внутри функции mv_backend_launch, которая также находится внутри
После отслеживания ссылок на функции я смог обнаружить функцию check_device_name, которая передавала необработанный пользовательский ввод в функцию mv_backend_launch с $name параметром.
В данном случае мы имеем функцию с уязвимостью удаленного выполнения кода. Но проблема заключалась в том, что эта функция работает только в том случае, если для состояния устройства установлено значение “start” или требуется доступ админа к приложению на уровне администратора. Поэтому нам нужно либо найти способ изменить состояние устройства без аутентификации, либо обойти аутентификацию и повысить привилегии. Из-за этой проблемы я вернулся к анализу исходного кода и нашел еще лучший вектор атаки. Анализируя механику состояния устройства, я заметил, что когда устройство находится в состоянии «пуск», оно позволяет регистрировать новых пользователей, чтобы выполнить первоначальную настройку устройства. Наблюдая, как выполняется операция изменения состояния, я нашел
Таким образом, просто изменив состояние устройства на “start” , мы можем добавить нового пользователя-администратора на устройство. Пользователи внутри устройства создаются как системные пользователи Linux, поэтому все они имеют SSH-доступ к устройству.
Модуль Metasploit
До этого момента мы определили несколько уязвимостей. Для кода эксплойта я предпочитаю использовать второй способ, добавив нового администратора для установки SSH-соединения. Потому, что запуск подключений оболочки «reverse/bind» с помощью двоичных файлов busybox является сложным с точки зрения совместимости полезной нагрузки Metasploit. Также по умолчанию порты устройств закрыты, за исключением общих служб, таких как HTTP, HTTPS, SSH, FTP… Поскольку SSH включен по умолчанию и его невозможно отключить с помощью интерфейса администратора, написание эксплойта вторым способом является очевидным выбором.
После сообщения об этой уязвимости в Seagate мы были очень разочарованы ответом. Сначала они утверждали, что «этот продукт был разработан и предназначен для личного домашнего использования в личной сети», таким образом, не имеет реальной поверхности атаки. Но затем мы доказали иное, предоставив число эксплуатируемых устройств, открытых для Интернета, с использованием таких служб, как
Источник:
Общая информация
Возможность удаленного использования: да
Требуется аутентификация: НЕТ
URL поставщика:
Ссылка скрыта от гостей
Дата обнаружения: 19 декабря 2019 г.
Ссылка скрыта от гостей
Технические детали
После получения последней версии прошивки устройства со
Ссылка скрыта от гостей
я начал анализировать ZIP-файл прошивки. Внутри ZIP-файла был еще один сжатый двоичный файл с именем Seagate-HS-update-201509160008F.img, просто изменив расширение файла на «tar.gz» я смог извлечь файловую систему
Ссылка скрыта от гостей
которая содержала исходный код приложения управления, сценарии запуска и двоичные файлы busy-box для устройства NAS на базе ARM.Содержимое обновления прошивки ZIP файл
С помощью
sudo unsquashfs -f -d /media/seagate /tmp/file.squashfs
команды я смонтировал файловую систему и начал анализировать содержимое. После краткой разведки я нашел исходный код PHP для интерфейса управления устройством и сразу же приступил к этапу анализа исходного кода. Во время анализа я заметил, что приложение было разработано с использованием платформы CodeIgniter. Учитывая размер управляющего приложения, я сразу начал отслеживать наиболее уязвимые функции PHP. Я использовал find . -name "*.php" | xargs grep "<function-name>"
команду для последующего списка функций и получил несколько интересных входных векторов.- exec
- shell_exec
- system
- passthru
- pcntl_exec
- popen
- proc_open
- eval
- preg_replace (with /e modifier)
- create_function
- file_get_contents
- file_put_contents
- readfile
- include
- require
- require_once
- include_once
./cirrus/application/helpers/mv_backend_helper.php
файла.Функция субъекта вызывается внутри функции mv_backend_launch, которая также находится внутри
./cirrus/application/helpers/mv_backend_helper.php
файла.
Код:
function mv_backend_launch($cmd, $noLog = false)
{
$desc = array(
0 => array("pipe","r"),
1 => array("pipe","w"),
2 => array("pipe","w")
);
$cwd = './';
$process = proc_open($cmd,$desc,$pipes,$cwd);
if(is_resource($process))
{
fclose($pipes[0]);
$data =stream_get_contents($pipes[1]);
fclose($pipes[1]);
$errors=stream_get_contents($pipes[2]);
if(strlen(trim($errors))>0)
mv_log_errors($cmd,$errors);
fclose($pipes[2]);
proc_close($process);
if ( ! $noLog ) {
syslog(LOG_INFO, "CMD: '$cmd', RESPONSE: '$data'");
}
return $data;
}
}
Код:
public function check_device_name()
{
$info = $this->get_start_info();
$isStart = $info && array_key_exists('state', $info) && $info['state'] == 'start';
if ( ! $isStart ) {
mv_is_admin();
}
$name = $this->input->post("name");
$result = mv_backend_launch("check_netbios_name.sh $name");
echo header('Content-type: text/xml');
echo $result;
}
set_start_info
функцию внутри application/core/MV_BaseController.php
файл. Эта функция устанавливает состояние устройства с помощью пост-запроса JSON и угадайте, что? нет никакого контроля
Код:
public function reset_start_info()
{
self::save_object_to_file(null, self::START_FILE);
$uri = $_SERVER['REQUEST_URI'];
$idx = strpos($uri, 'index.php');
if ( $idx !== false ) {
$uri = substr($uri, 0, $idx);
}
$uri .= 'index.php/SCSS';
header('Content-type: text/plain');
header("Location: ".$uri, TRUE, 302);
exit();
Модуль Metasploit
До этого момента мы определили несколько уязвимостей. Для кода эксплойта я предпочитаю использовать второй способ, добавив нового администратора для установки SSH-соединения. Потому, что запуск подключений оболочки «reverse/bind» с помощью двоичных файлов busybox является сложным с точки зрения совместимости полезной нагрузки Metasploit. Также по умолчанию порты устройств закрыты, за исключением общих служб, таких как HTTP, HTTPS, SSH, FTP… Поскольку SSH включен по умолчанию и его невозможно отключить с помощью интерфейса администратора, написание эксплойта вторым способом является очевидным выбором.
После сообщения об этой уязвимости в Seagate мы были очень разочарованы ответом. Сначала они утверждали, что «этот продукт был разработан и предназначен для личного домашнего использования в личной сети», таким образом, не имеет реальной поверхности атаки. Но затем мы доказали иное, предоставив число эксплуатируемых устройств, открытых для Интернета, с использованием таких служб, как
Ссылка скрыта от гостей
и
Ссылка скрыта от гостей
. Но, похоже, им просто все равно ¯ \ _ (ツ) _ / ¯Источник:
Ссылка скрыта от гостей