Pull to refresh

Чего нам стоит репутация или пользовательский фикс для CVE-2018-18472 от NAS WD

Reading time5 min
Views17K

О нашумевшей истории с стиранием данных с NAS от Western Digital можно почитать в посте @ZlodeiBaal: Western Digital стер данные с большинства пользовательских NAS

Здесь же будет об исправлении уязвимости, которой, как оказалось, 7 лет (2014), пусть Western Digital 3 дня назад отписались следующим параграфом:

"Серия My Book Live была представлена на рынок в 2010-м, и эти устройства получили последнее обновление прошивки в 2015-м году.

The My Book Live series was introduced to the market in 2010 and these devices received their final firmware update in 2015. [1]

17 часов назад пользователь dracenmarx опубликовал следующие инструкции для исправления ошибки с удаленным выполнением кода (RCE):

  • Заходим по SSH и редактируем файл (например с nano):

  • /var/www/Admin/webapp/includes/languageConfiguration.php

  • Первое изменение, находим:

exec("sudo bash -c '(echo \"language {$changes["language"]}\">/etc/language.conf)'", $output, $retVal);
  • Заменяем на:

if (!preg_match('/^[a-z]{2}_[A-Z]{2}$/', $changes["language"], $dummy)) return 'BAD_REQUEST';
exec("sudo bash -c '(echo '\"'\"".escapeshellarg("language {$changes["language"]}")."\"'\"'>/etc/language.conf)'", $output, $retVal);
  • Второе изменение, находим:

exec("sudo bash -c '(echo \"language {$lang["language"]}\">/etc/language.conf)'", $output, $retVal);

Заменяем на:

if (!preg_match('/^[a-z]{2}_[A-Z]{2}$/', $lang["language"], $dummy)) return 'BAD_REQUEST';
exec("sudo bash -c '(echo '\"'\"".escapeshellarg("language {$lang["language"]}")."\"'\"'>/etc/language.conf)'", $output, $retVal);

Больше, по его словам, он похожих ошибок не нашел.

Ну что ж, элементарно забыли не знали, что надо экранировать параметры, которые будем выполнять прямиком в системе, да ещё из под sudo c sudoers. А может знали, но верили​, что в переменных-то точно не будет ереси! Это я уж не буду ехидничать, что можно было вместо полноценного exec с внешними данными в командной строке, записать данные по STDOUT.

Всё бы было ничего, но dracenmarx под своим сообщением пишет, что уязвимость была известна с 2018-го года, так ведь? https://cve.circl.lu/cve/CVE-2018-18472 (оригинальный блог-пост от WizCase)

Western Digital WD My Book Live (все версии) имеет баг с удаленным выполением команд под рутом через метасимволы шелла в параметре language через /api/1.0/rest/language_configuration. Может быть вызвано любым, кто знает адрес устройства.

Да, некрасиво, но пользователи — сами себе злые буратины. Устройство не на гарантии? — Выкидывайте. Сами WizCase приводят такой PoC:

curl -kX GET -d ‘bim=param`whoami`’ https:///panel/rest/configuration

Так что WD знали о уязвимости в 2018-ом, что есть очень, очень большая дыра в безопасности, которая сотрёт все данные и ничего не сделали. А теперь, когда её эксплуатируют, делают вид, что удивлены. - dracenmarx, 26 июня.

Всё бы хорошо, если не дальнейшее копание самого dracenmarx:

Пока искал информацию по CVE-2018-18472, обнаружил, что эксплоит был уже известен в марте 2014-го! (WDMyCloud Command Injection CSRF) Получается, эксплоит на иньекцию команд от рута был в онлайне пока MyBookLive ещё поддерживались и WD ничего не сделали?! - dracenmarx, 26 июня

Давайте посмотрим на этот код. Опубликован 20-го марта 2014г. Выполнен как модуль для Metasploit. Описание модуля и код:

Name: WDMyCloud NAS Command Injection CSRF

Description: This module exploits a command injection vulnerability in the web interface of the WDMyCloud NAS device, via CSRF. It will submit the CSRF request to RHOST, as well as wdmycloud and wdmycloud.local.

DisclosureDate: 0 day, yo

То есть элементарно отсылаем запрос на 3 адреса, двое из них известны и статичны, и в теории должны в локальной сети идти прямиком на NAS, а третий адрес можно задать самому.

params = "format=xml&rest_method=PUT&language=" + Rex::Text.uri_encode("`#{payload.encoded}`")
...
<html>
<body>
<h1>Redirecting... Please Wait</h1>
<div style='display:none'>
<img src='http://wdmycloud.local/api/1.0/rest/language_configuration?#{params}' />
<img src='http://wdmycloud/api/1.0/rest/language_configuration?#{params}' />
<img src='http://#{datastore['RHOST']}/api/1.0/rest/language_configuration?#{params}' />
</div>

Как видим, всё то же самое. Параметр language и вжух! 2014г.

Примечательно, что два других пользователя создали себе форки этого кода. 11 июня 2014-го и 29-го августа 2015-го. Утверждать, что о нём никто не знал... ну PR и не на такое способны :)

Получается, "неофициально", но вполне находимо (→ https://gist.github.com/phikshun) эксплоит был публично доступен 7 лет, самое позднее, когда WD получили официальный пинок репорт - 2018-ый. Но когда код пишется на тяп-ляп (или матерную форму сего выражения, иначе бы уязвимости не было), а задача поддержки — не ведение базы данных и введение причастных лиц в курс дела, то и получаем отписки типа:

The vulnerability report CVE-2018-18472 affects My Book Live devices originally introduced to the market between 2010 and 2012. These products have been discontinued since 2014 and are no longer covered under our device software support lifecycle. We encourage users who wish to continue operating these legacy products to configure their firewall to prevent remote access to these devices, and to take measures to ensure that only trusted devices on the local network have access to the device.

Western Digital takes the security of our customers’ data seriously, and we provide security updates for our products to address issues from both external reports and regular security audits. Additionally, we welcome the opportunity to work with members of the security research community through responsible disclosure to help protect our users. [...]

- с блога WizCase

Только обычные пользователи — не B2B, и вой и вонь поднять могут. И тогда вдруг репутационный ущерб появляется на сводках и диаграммах мудрых MBA, и неожиданно выделяется и время и деньги на безопасность и IT.

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

Пока гром не грянет — мужик не перекрестится.

А потерпевшим можно только позавидовать, видно стирались просто файлы и TestDisk/PhotoRec вполне восстанавливает утраченное. Будь я злодеем — прошелся бы с dd, а будь хипстерским злодеем — openssl с публичным ключиком. Но не будем о плохом, его и так хватает:

I got a quote for data recovery and it was $2,000 to $5,000. Unbelievable. - mkennedy

Another affected user here in Canada. I had no idea there was an issue until I read the email from WD this afternoon. I checked the drive and sure enough, only the default folders were there. I unplugged the drive and here we are. I’m a hobby photographer, approximately 80,000 photos gone. I’m on the support chat waitlist, it’s been 11 seconds remaining for the past 20 minutes so I’m not holding my breath. - damack604

Обновление, 2 июля

Через СМИ Western Digital сообщает о ещё одной уязвимости, где не проверялась авторизация при входе на одну из страниц: https://nvd.nist.gov/vuln/detail/CVE-2021-35941

Tags:
Hubs:
Total votes 36: ↑36 and ↓0+36
Comments87

Articles