Серьёзная уязвимость в системе управления конфигурацией Ansible

12.01.2017 09:01

В системе управления конфигурацией Ansible выявлена уязвимость (CVE-2016-9587), позволяющая организовать выполнение команд на стороне управляющего сервера Ansible (Controller) через манипуляции на подчинённых хостах. Например, в случае компрометации одного из клиентских серверов, конфигурация которого настраивается через Ansible, атакующие могут получить доступ к управляющему серверу и через него ко всем остальным управляемым через Ansible хостам сети.

Проблема проявляется во всех выпусках Ansible и устранена в предварительных выпусках 2.1.4 и 2.2.1, которые пока имеют статус кандидатов в релизы. Исправление также доступно в виде патча. Уязвимость связана с особенностью обработки команды lookup, позволяющей организовать выполнение кода на стороне управляющего сервера, вернув в ответ на запрос сервера специально оформленный набор атрибутов (ansible_python_interpreter с кодом и ansible_connection со ссылкой на локальный хост). Ansible пытается фильтровать подобные опасные атрибуты, но исследователи нашли как минимум шесть способов для обхода данной фильтрации.

   PAYLOAD = "touch /tmp/foobarbaz"   LOOKUP = "lookup('pipe', '%s')" % PAYLOAD   INTERPRETER_FACTS = {  'ansible_python_interpreter': '%s; cat > /dev/null; echo {}' % PAYLOAD,  'ansible_connection': 'local',  'ansible_become': False,   }