The OpenNET Project / Index page

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

Уязвимость в специфичном для CPU AMD коде KVM, позволяющая выполнить код вне гостевой системы

30.06.2021 23:05

Исследователи из команды Google Project Zero выявили уязвимость (CVE-2021-29657) в поставляемом в составе ядра Linux гипервизоре KVM, позволяющую обойти изоляцию гостевой системы и выполнить свой код на стороне хост-окружения. Проблема присутствует в коде, используемом на системах с процессорами AMD (модуль kvm-amd.ko) и не проявляется для процессоров Intel.

Исследователями подготовлен рабочий прототип эксплоита, позволяющий из гостевого окружения запустить root shell в хост-окружении на системе с процессором AMD Epyc 7351P и ядром Linux 5.10. Отмечается, что это первая брешь класса "guest-to-host" в самом гипервизоре KVM, не связанная с ошибками в компонентах, выполняемых в пространстве пользователя, таких как QEMU. Исправление было принято в ядро в конце марта. Проблема проявляется начиная с ядра Linux 5.10-rc1 и заканчивая v5.12-rc6, т.е. охватывает только ядра 5.10 и 5.11 (большинства стабильных веток дистрибутивов проблема не коснулась).

Проблема присутствует в механизме nested_svm_vmrun, реализованном с использованием расширения AMD SVM (Secure Virtual Machine) и позволяющем организовать вложенный запуск гостевых систем. Для корректной реализации данной функциональности гипервизор должен перехватывать все инструкции SVM, выполняемые в гостевых системах, эмулировать их поведение и синхронизировать состояние с оборудованием, что является достаточно сложной задачей. Проанализировав предложенную в KVM реализацию, исследователи нашли логическую ошибку, позволяющую влиять на содержимое MSR-регистров (Model-Specific Register) хоста из гостевой системы, что можно использовать для запуска кода на уровне хоста.

В частности, выполнение операции VMRUN из гостевой системы второго уровня вложенности (L2, запущенной из другой гостевой системы) приводит ко второму вызову nested_svm_vmrun и повреждению структуры svm->nested.hsave, на которую накладываются данные из vmcb гостевой системы L2. В итоге возникает ситуация, когда на уровне гостевой системы L2 можно освободить память в структуре svm->nested.msrpm, в которой хранится бит MSR, несмотря на то, что он продолжает использоваться, и получить доступ к MSR хост-окружения.

  1. Главная ссылка к новости (https://googleprojectzero.blog...)
  2. OpenNews: Раскрыты подробности двух атак на процессоры Intel, AMD и ARM64
  3. OpenNews: Уязвимости в реализации аппаратно изолированных окружений TrustZone
  4. OpenNews: Уязвимости в гипервизоре Xen, позволяющие выйти за пределы гостевого окружения
  5. OpenNews: Уязвимость в гипервизоре KVM
  6. OpenNews: Уязвимость в vhost-net, позволяющая обойти изоляцию в системах на базе QEMU-KVM
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/55409-kvm
Ключевые слова: kvm, virtual, amd
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (43) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 23:13, 30/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    secure virtual machine, очень сесюре, ага.

     
     
  • 2.4, DildoZilla (?), 23:20, 30/06/2021 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Тут косяк линукса ваще-т, секуре оператион сустемд. Корпорастише, смузисосише, дыр.
     
     
  • 3.5, Alladin (?), 23:23, 30/06/2021 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Косяк линукса, а не работает на интеле:))

     
     
  • 4.18, Я (??), 01:47, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • +6 +/
    ну так получилось что драйвер для амд не работает с интелом. а в драйвере для интела ошибки не допустили.
     
     
  • 5.27, СОВА (?), 08:16, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Вы что новость не читаете? Ошибка в KVM. Пытались задействовать специфичные аппаратные возможности и допустили ошибку. Бывает. Выпустят исправление и починят.
     
     
  • 6.30, Annoynymous (ok), 09:04, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Пытались задействовать специфичные аппаратные возможности

    Как ты затейливо и длинно произносишь слово «драйвер»

     
  • 4.29, Аноним (29), 09:04, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Для Интела другой модуль kvm-intel.ko
     
  • 3.12, макпыф (ok), 23:36, 30/06/2021 [^] [^^] [^^^] [ответить]  
  • +5 +/
    причем тут "сустемд"

    она теперь виновата в багах ядра?

     
     
  • 4.16, Аноним (16), 01:02, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Кто на себя одеяло тянет, тот и виноват.
     
     
  • 5.32, Аноним (32), 09:13, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    твой троллинг слишком толстый
     

  • 1.2, онанимус (?), 23:18, 30/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    дайте, пожалуйста, примеров, зачем может понадобиться вложенный запуск гостевых систем.
    не в принципе возможные теоретические примеры задач, а реально нужные "в продакшоне".
     
     
  • 2.6, Alladin (?), 23:23, 30/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Хочу контейнеры, да аппарат, дашь?
     
     
  • 3.10, And (??), 23:29, 30/06/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Контейнеры - не про виртуализацию.
     
  • 3.26, Evgeny Danilchenko (?), 06:18, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    например для запуска EVE-NG как VM, а внутри запускать VM с Windows Server для всяких AD/Certificate authority при эмулировании больших топологий/сетевых взаимодействий
     
     
  • 4.42, Иван Демидов (?), 13:56, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Вот кроме EVE никаких других применений я не видел. ТО есть вложенная виртуализация это такое очень специфичное что-то.
     
  • 2.7, And (??), 23:26, 30/06/2021 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Модель линуховой инфраструктуры виртуализации поверх венды.

    Когда столкнёшься - поймёшь, так надо.

     
  • 2.14, Rev (?), 00:40, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Запускаем виртуалку для запуска тестов Андроид приложений. Для этого внутри виртуалки запускаем эмулятор Андроида, который на основе QEMU.
     
     
  • 3.28, Lost Inside (?), 08:54, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > виртуалку для запуска тестов Андроид приложений

    Излишне.

     
     
  • 4.36, нах.. (?), 11:38, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Для тебя васяна локалхоста может и излишне.
     
  • 3.47, onanim (?), 21:21, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    есть же нативные эмуляторы под линукс? Genymotion на базе виртуалбокса.
    или это фигня на палке?
     
  • 2.15, Аноним (-), 00:49, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Пытался я както докер запустить на гостевой венде - там вроде нужно было чтобы винда видела рабочий HyperV и надо было включить на хосте kvm-intel.nested=1.
    Но у меня так и не заработало.
     
  • 2.19, t (??), 02:21, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    - в ChromeOS можно запустить виртуалку с linux, внутри которой может оказаться нужным запускать например виртуалку с виндой (или с маком).
    - арендовали KVM VPS, а внутри linux запускаете FreeBSD.
    - на linux хост ставите windows server внутри которого в hyper-v запускаете виртуалки (тестовая лаборатория)

    ага, люди странные. это конечно не продакшен все, но кейсы использования.

     
     
  • 3.24, Аноним (24), 05:50, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Фу какие извращения. Ставится линукс, а уже в нем ставятся хоть ондройд, хоть хромось, хоть BSD. Для того Qemu и придумывали. Этот хромой и ондройд жрут как не в себя уже на старте. Хотя если кому нравится нашпиговать слабосильный комп массой памяти, то это уже клинический случай. И ничего кроме вот таких вот странных примеров использования не остается. Потому что на сервер ставится нечто простое, что рулится из командной строки и жрет около 100 мегабайт оперативной памяти. А там уж дофига виртуалок получится даже на 4 гигах оперативки.
     
     
  • 4.37, нах.. (?), 11:39, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ты явно читаешь наискось.
     
  • 2.22, nebularia (ok), 05:27, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    GNS 3, например. В комплекте преднастроенная виртуалка, в которой должны запускаться виртуальные девайсы. В том числе и с применением виртуализации. Да, это не прям продакшен, но штука нужная.
     
  • 2.31, awoland (ok), 09:12, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    А где там слова про "вложенный запуск гостевых систем" ? Там говориться что из "гостя" можно на "хосте" root-shell получить.
     
     
  • 3.33, tutta (?), 09:25, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Цитата: "Проблема присутствует в механизме nested_svm_vmrun, реализованном с использованием расширения AMD SVM (Secure Virtual Machine) и позволяющем организовать вложенный запуск гостевых систем."

    Не? Не оно?

     
     
  • 4.35, awoland (ok), 10:46, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не оно. Это указание конкретного места (функции) в коде драйвера ядра, которое содержит баг...
    Эксплоит же позволяет "рутить" "хост" из "гостя". Вложенность ВМ для этого не требуется.
    Хотя ваши доводы в контекcте "ненужности" вложенных ВМ в этом плане могут быть резонны. "Нет человека - нет проблемы."
     
  • 3.39, Anonymus (?), 12:41, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >В частности, выполнение операции VMRUN из гостевой системы
    >второго уровня вложенности (L2, запущенной из другой гостевой системы)
    >приводит ко второму вызову nested_svm_vmrun и повреждению структуры svm->nested.hsave
     
  • 2.43, Lex (??), 14:59, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > зачем может понадобиться вложенный запуск гостевых систем

    Эксплуатация обнаруженной дырени чем не повод ?

     
  • 2.44, Инжиниринг (?), 15:12, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Посмотри на ранние версии Junipter vMX/vSRX
     

  • 1.3, антропоморфный buddy (?), 23:19, 30/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    разве в лтс релизах такое не должно отлавливаться, не? я про 5.10
     
     
  • 2.9, And (??), 23:28, 30/06/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Кто, чем, в рамках какого процесса ищет именно такой специфики ошибки в LTS?
     
     
  • 3.11, антропоморфный buddy (?), 23:33, 30/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    ну раз это было исправлено в 5.12, значит фикс должен был перекочевать в 5.10, нет?
     

  • 1.8, InuYasha (??), 23:27, 30/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Ну кто ж такое на ночь публикует? Магазины с поп-корном давно закрыты! (

    PS: я тоже сперва подумал про новую аппаратную проблему, но нет ) пока живём со старыми.

     
  • 1.13, Аноним (13), 00:30, 01/07/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    Дыры линукса не перестают удивлять
     
     
  • 2.40, Аноним (40), 13:12, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Их хотя бы находят и исправляют. Продолжай завидовать молча.
     

  • 1.34, richman1000000 (ok), 09:32, 01/07/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Так я MSR-регистры то всегда выключаю. Так что меня эта уязвимость тоже не коснулась
    MSR это гадость несусветная...
     
     
  • 2.38, Аноним (38), 12:36, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Гадость - не гадость, но как бы без них процессор на низком уровне конфигурировался? В частности, там какой-то регистр служит для переключения CPU в защищённый режим.
     
     
  • 3.48, kmeaw (?), 12:20, 03/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    В защищённый режим процессоры x86 переводятся записью в регистр CR0, который не является MSR-регистром. Но без MSR будет довольно уныло - например, для настройки обработчика системных вызовов, который вызывается инструкцией syscall нужно положить его адрес в MSR-регистр IA32_LSTAR.
     
  • 2.45, n00by (ok), 15:35, 01/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Это не про /dev/cpu/*/msr
     

  • 1.41, Аноним (41), 13:34, 01/07/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Проблема проявляется начиная с ядра Linux 5.10-rc1 и заканчивая v5.12-rc6, т.е. охватывает только ядра 5.10 и 5.11 (большинства стабильных веток дистрибутивов проблема не коснулась).  
    >(большинства стабильных веток дистрибутивов проблема не коснулась)  

    Справделивости ради, стоит отметить, что на той же Ubuntu 21.04 используется ядро 5.11, да и на Manjaro используется ядро 5.10 по дефолту, так что эта уязвимость затрагивает довольно много пользователей

     
  • 1.46, Аноним (46), 15:50, 01/07/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Давно же уже исправлено, даже в убунте. Не исправлено только у тех, кто не обновляется.
     

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



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру