Клиенты облачной платформы Microsoft Azure, использующие Linux в виртуальных машинах, столкнулись с критической уязвимостью (CVE-2021-38647), позволяющей удалённо выполнить код с правами root. Уязвимость получила кодовое имя OMIGOD и примечательна тем, что проблема присутствует в приложении OMI Agent, которое без лишней огласки устанавливается в Linux-окружения.
OMI Agent активируется при использовании таких сервисов, как Azure Automation, Azure Automatic Update, Azure Operations Management Suite, Azure Log Analytics, Azure Configuration Management и Azure Diagnostics. Например, атаке подвержены Linux-окружения в Azure для которых включён мониторинг. Агент является частью открытого пакета OMI (Open Management Infrastructure Agent) с реализацией стека DMTF CIM/WBEM для управления IT-инфраструктурой.
OMI Agent устанавливается в системе под пользователем omsagent и создаёт настройки в /etc/sudoers для запуска серии скриптов с правами root. В процессе работы создаются слушающие сетевые сокеты на сетевых портах 5985, 5986 и 1270. Сканирование в сервисе Shodan показывает наличие в сети более 15 тысяч уязвимых Linux-окружений. В настоящее время в открытом доступе уже размещён рабочий прототип эксплоита, позволяющий выполнить свой код с правами root на подобных системах.
Метод эксплуатации тривиален — достаточно отправить к агенту XML-запрос, удалив заголовок, отвечающий за аутентификацию. OMI использует аутентификацию при получении управляющих сообщений, проверяя, что клиент имеет право на отправку той или иной команды. Суть уязвимости в том, что при удалении в сообщении заголовка «Authentication», отвечающего за аутентификацию, сервер считает прохождение проверки успешной, принимает управляющее сообщение и допускает выполнение команд с правами root. Для выполнения произвольных команд в системе достаточно использовать в сообщении штатную команду ExecuteShellCommand_INPUT. Например, для запуска утилиты «id» достаточно отправить запрос:
curl -H "Content-Type: application/soap+xml;charset=UTF-8" -k --data-binary "@http_body.txt" https://10.0.0.5:5986/wsman
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing">
...
<s:Body>
<p:ExecuteShellCommand_INPUT xmlns:p="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/SCX_OperatingSystem">
<p:command>id</p:command>
<p:timeout>0</p:timeout>
</p:ExecuteShellCommand_INPUT>
</s:Body>
</s:Envelope>
Компания Microsoft уже выпустила обновление OMI 1.6.8.1 с устранением уязвимости, но оно ещё не доведено до пользователей Microsoft Azure (в новых окружениях пока устанавливается старая версия OMI). Автообновление агента не поддерживается, поэтому пользователям необходимо выполнить обновление пакета вручную, используя команды «dpkg -l omi» в Debian/Ubuntu или «rpm -qa omi» в Fedora/RHEL. В качестве обходного пути защиты рекомендуется блокировать доступ к сетевым портам 5985, 5986 и 1270.