Серия критических уязвимостей в гипервизоре Xen

22.06.2017 07:25

В гипервизоре Xen выявлено 10 уязвимостей, из которых пять (XSA-224, XSA-222, XSA-219, XSA-218, XSA-217) потенциально позволяют выйти за пределы текущего гостевого окружения, две (XSA-225, XSA-223) дают возможность инициировать крах гипервизора из гостевой системы, а три уязвимости (XSA-221, XSA-220, XSA-216) могут привести к утечке содержимого памяти из адресного пространства других окружений или хост-системы.

Исправления пока доступны в виде патчей. CVE-идентификаторы пока не присвоены. Некоторые провайдеры публичных облачных систем были уведомлены о проблеме две недели назад и уже устранили уязвимость. Всем пользователям Xen и провайдерам, не включённым в список упреждающей отправки уведомлений, рекомендуется срочно установить обновление. Для эксплуатации наиболее опасных уязвимостей атакующий должен иметь доступ к выполнению кода в гостевой системе с правами ядра.

Особенности некоторых проблем:

  • XSA-224 - владелец гостевой системы в режиме паравиртуализации (PV) может получить доступ на запись в таблицу страниц памяти, связанных с его окружением. В итоге атакующий может получить доступ к системной памяти и поднять свои привилегии до уровня хост-системы. Проблеме подвержены только конфигурации на базе архитектуры x86, в которых используются гостевые системы в режиме PV. HVM-системы уязвимы только в случае использования узявимых PV-бэкендов, в которых используется вызов calls grant_map() с флагами GNTMAP_device_map и GNTMAP_host_map;
  • XSA-222 - из гостевого окружения можно получить доступ к памяти, не принадлежащей данному окружению из-за ошибки в организации повторного использования таблиц маппинга P2M (Physical-to-Machine), что потенциально может быть использовано для повышения своих привилегий (контроль за хост-системой) или привести к утечке данных от других окружений. Проблеме подвержены конфигурации Xen на базе архитектур x86 и ARM, но на x86 атака возможна только против окружений в режиме полной виртуализации (HVM). Для защиты можно указать в настройках HVM "hap_1gb=0 hap_2mb=0";
  • XSA-219 - при наличии одновременного контроля за двумя гостевыми системами, атакующий может получить доступ к хост-системе. Проблеме подвержены только системы x86. Для успешной атаки необходим доступ к окружениям HVM с поддержкой Shadow Mode Paging (в настройках "hap=0"). HVM-окружения в режиме Hardware Assisted Paging (HAP, в настройках "hap=1") проблеме не подвержены. Для атаки необходим одновременный доступ к PV-окружению и HVM-окружению, но теоретически не исключается возможность совершения атаки, при контроле за одним гостевым окружением в режиме полной вирутализации (HVM).
  • XSA-218 - состояние гонки, позволяющее в короткие моменты времени из подконтрольного злоумышленнику бэкенда прочитать или записать содержимое памяти чужого фронтэнда. В зависимости от ситуации уязвимость может использоваться для организации утечки конфеденциальных данных или повышения своих привилегий на стороне фронтэнда. Кроме того, отмечается ещё одна проблема, позволяющая непривилегированной гостевой системе из-за состояния гонки дважды очистить запись maptrack, что теоретически не исключает развитие атаки для выполнения кода на стороне хост-системы.
  • XSA-217 - при наличии контроля за двумя гостевыми системами можно получить доступ ко всей системной памяти, что может использоваться для повышения своих привилегий и организации утечки данных из хост-системы или других гостевых систем. Проблеме подвержены только системы x86 при наличии у атакующего контроля за двумя гостевыми системами в режиме PV и HVM (контроля за двумя PV или за двумя HVM недостаточно, для атаки необходим одновременный доступ и к PV и к HVM).
  • XSA-216 - утечка отрывков содержимого стека бэкенда через Linux-драйверы xen-blkback, blkback и blktap, используемые для доступа к блочным устройствам. Уязвимость позволяет непривилегированному гостевому окружению получить доступ к отрывкам конфиденциальной информации из хост-системы или другого гостевого окружения (речь про отрывки данных, оставленные бэкендом в полях добавочного заполнения (padding), неочищенные после прошлого запроса).