@hdmoore опубликовал подробную информацию о некоторых уязвимостях в прошивке Supermicro IPMI. После информационного релиза в Metasploit было добавлено несколько модулей для проверки устройств Supermicro на наличие известных уязвимостей.
@hdmoore опубликовал подробную информацию о некоторых уязвимостях в прошивке Supermicro IPMI. После информационного релиза в Metasploit было добавлено несколько модулей для проверки устройств Supermicro на наличие известных уязвимостей.
Модуль |
Поставленная цель |
Данный модуль может быть использован для проверки устройств с помощью статического SSL сертификата, поставляемого со встроенным контролером Supermicro Onboard IPMI. (CVE-2013-3619) | |
Данный модуль может быть использован для просмотра каталогов через компонент url_redirect.cgi и скачивания файлов с правами root. Для этого требуется авторизованный доступ к веб интерфейсу. | |
Данный модуль может быть использован для удаленной проверки устройства на наличие двух уязвимостей удаленного переполнения буфера, которые могут содержать компоненты login.cgi (CVE-2013-3621) and close_window.cgi (CVE-2013-3623). |
Всего лишь спустя день после выхода данного информационного релиза мы были готовы закончить функциональный эксплоит для одного из переполнений, не требующих авторизации (CVE-2013-3623). Этот эксплоит позволял получить права root в устройстве через компонент веб интерфейса close_window.cgi.
Процесс создания этого эксплоита был довольно интересным, так как в нашем распоряжении были только ограниченный удаленный доступ к реальному устройству Supermicro (прошивка SMT_X9_214) и, конечно же, его эмулятор. Несмотря на то, что эмулятор является отличным ресурсом для поиска уязвимостей и подтверждения доказательства вашей концепции, он не гарантирует работоспособность эксплоита на реальном оборудовании. В данном блоге мы хотели бы поделиться с вами некоторыми интересными трюками, которые мы использовали для создания эксплоита. Надеюсь, вам понравится!
Обзор нам в помощь
Первым условием успешного применения экплоита в реальной ситуации является наличие информации об используемых методах защиты памяти (NX, ASLR). Для получения этой информации была использована уязвимость url_redirect.cgi, позволяющая просматривать каталоги. Благодаря тому, что данная уязвимость позволяет получить доступ к любому файлу с правами root даже при условии ограниченного доступа, она отлично подошла для того, чтобы собрать полезную информацию о среде. Основная сложность заключалась в том, чтобы получить доступ к содержимому "/proc/self/maps". Даже когда maps будут в url_redirect.cgi, будет довольно неплохо, если мы сможем определить механизмы защиты памяти, применяемые к cgi процессам. И когда у нас возникли опасения по поводу ASLR для главных исполняемых файлов и библиотек, нам очень помог опыт @hdmoore’а с предыдущим эксплоитом UPnP, за что хочется его отдельно поблагодарить. В итоге кроме всего прочего мы смогли определить исполняемые файлы для стека и кучи:
-00033000 rwxp 00012000 00:00 0 [heap]
bee78000-bee8d000 rwxp bee78000 00:00 0 [stack]
Данная информация была важна в процессе создания эксплоита для переполнения close_window.cgi, ограничения которого на пробелы и неиспользуемые символы могли сделать атаку возврата в библиотеку очень непростой в реализации.
Детали имеют значение
С помощью вышеизложенной информации и qemu была разработана первая версия эксплоита, недостаточно точная для применения в реальных условиях. Безусловно, при взломе программы мелкие детали и состояние взламываемой среды играют очень большую роль, и уязвимости просмотра каталогов (даже при просмотре из-под root’а) было недостаточно для подключения к сессии. Для того чтобы закончить работу над эксплоитом в разумный срок, необходимо было собрать отладочную информацию о процессе с реального устройства.
Имея ограниченный shell-доступ к такому устройству Supermicro, у нас появилась возможность попытаться понять, что же необходимо сделать:
Доступ по SSH осуществляется с помощью SMASH System Management Shell, который, прямо скажем, является далеко не самым полезным средством сбора отладочной информации при анализе среды или взломе. Даже при условии минимальной пользы от командной строки и спецификации SMASH (от DMTF), у нас был доступ к прошивке и файлам ATEN SMASH. К счастью, при их изучении мы нашли кое-что интересное. В то время как следующий код ответственен за обработку команд, переданных через командную строку, близко к разбору символов «|» и «;» можно найти кое-что интересно в процедуре разбора следующего слова:
Особенный интерес вызывает зарезервированное слово «shell». Что ж, проведем небольшой тест:
1.
-> shell test
2. Change shell to test
3. changing shell fails.: No such file or directory
4.
5. ->
Интересно! Выглядит так, будто shell оболочка существует. Немного статического анализа выявило, что оболочка не только существует, но и позволяет нам выполнить случайную команду.):
Время для теста:
Выглядит неплохо, попробуем еще кое-что
И да откроется пред нами root shell! (в версии прошивки SMT_X9_315 доработаны escape символы "shell sh"). Для завершения нашего эксплоита с помощью полученного root shell’а мы создали генерацию дампов ядра в папку /tmp, имеющую достаточно свободного места смонтированную с правами rw.
Для того, чтобы получить дампы ядра мы использовали openssl s_server и законный сертификат веб сервера для создания поддельного HTTP, разрешающего внешние подключения к папке /tmp. После анализа нескольких дампов мы смогли сделать эксплоит рабочим на реальных устройствах.
msf exploit(smt_ipmi_close_window_bof) > show options
Module options (exploit/linux/http/smt_ipmi_close_window_bof):
Name Current Setting Required Description
---- --------------- -------- -----------
Proxies no Use a proxy chain
RHOST yes The target address
RPORT yes The target port
VHOST no HTTP server virtual host
Payload options (cmd/unix/generic):
Name Current Setting Required Description
---- --------------- -------- -----------
CMD echo metasploit > /tmp/metasploit.txt yes The command string to execute
Exploit target:
Id Name
-- ----
0 Supermicro Onboard IPMI (X9SCL/X9SCM) with firmware SMT_X9_214
msf exploit(smt_ipmi_close_window_bof) > rexploit
[*] Reloading module...
*] - Sending exploit...
[*] Exploit completed, but no session was created.
Проверяем результат его работы на реальном устройстве Supermicro:
Определенно, если вы используете материнскую плату Supermicro, вы должны прочитать информацию об уязвимостях и обновлениях в статье уязвимости прошивки Supermicro IPMI и в случае необходимости применить обновления, рекомендуемые вендором.
Хотите сами попробовать то, что я описал в статье? Скачайте бесплатно Metasploit прямо сейчас или обновите свою версию до последней доступной, и если вам есть что сказать или спросить, не стесняйтесь связаться с нами.
Ваш провайдер знает о вас больше, чем ваша девушка? Присоединяйтесь и узнайте, как это остановить!