Нещодавно було оприлюднено інформацію про вразливість , яка наражає на небезпеку хмарні сервери. Ця вразливість дозволяє зловмисникам отримати повний контроль над фізичною машиною , що є кошмарним сценарієм для постачальників хмарної інфраструктури.
Zapscape, зареєстрований під ідентифікатором CVE-2026-64561, є критичною вразливістю в гіпервізорі Linux KVM, яка наражає на ризик, який багато платформ ненавмисно беруть на себе, вмикаючи вкладену віртуалізацію. Ця вразливість дозволяє зловмиснику з правами ядра у віртуальній машині (L1) виконувати код з правами root на хост-системі (L0), порушуючи ізоляцію віртуалізованих середовищ.
Вважаючись загрозою високого рівня, Zapscape не лише полегшує вихід з віртуальної машини, але й відкриває локальний маршрут ескалації привілеїв для користувачів хоста, які мають права на запис на пристрої /dev/kvm.
Хоча такі організації, як Red Hat, оцінили цю вразливість на 7.0 за шкалою CVSS, зосереджуючись на нестабільності та відмові в обслуговуванні, публічне підтвердження концепції (PoC) демонструє набагато руйнівніші можливості: створення довільного файлу безпосередньо в кореневому каталозі хоста.
Хаос у блоці керування пам'яттю
Спосіб роботи Zapscape прихований у блоці керування пам'яттю (MMU) KVM та в тому, як гіпервізор обробляє таблиці сторінок, коли один гостьовий сервер (L1) діє як гіпервізор для іншого підгостьового сервера (L2). Проблема полягає в логічній помилці впорядкування під час обробки помилок сторінок. У шляхах коду ядра перевірка на наявність "застарілого кореневого каталогу" виконувалася перед функцією отримання сторінок, а не після.
Ця неправильна послідовність запускає класичний сценарій «використання після звільнення» . Під час відновлення KVM може видалити кореневий каталог, який він використовує, та позначити його як недійсний. Однак, оскільки перевірка справності вже виконана, система продовжує створювати зіставлення під кореневим каталогом, який більше не є дійсним. Цікаво, що ця проблема сортування існує в коді з 2008 року, але вона стала критичною та небезпечною після випуску ядра Linux 5.9 у липні 2020 року , коли було введено директиву, яку система просто перестала застосовувати.
Вимоги та обмеження
Щоб Zapscape можна було використовувати, середовище має відповідати дуже специфічним вимогам. По-перше, у модулі KVM має бути ввімкнена вкладена віртуалізація, конфігурація, яка дозволяє трирівневу архітектуру (L0, L1 та L2). Зловмисник повинен ініціювати атаку з рівня L1 , що вимагає root-прав на цій віртуальній машині. Звідти зловмисник маніпулює режимами пам'яті, тоді як активність підгостьової системи L2 змушує хост L0 ініціювати отримання сторінки квоти, що призводить до пошкодження пам'яті.
На апаратному рівні умови різняться залежно від виробника. На системах AMD , які використовують вкладені таблиці сторінок ( SVM ), вразливість є більш простою та не вимагає жодних додаткових функцій. І навпаки, на процесорах Intel цей сценарій вимагає , щоб гостьова система L1 мала доступ до чотири- та п'ятирівневих можливостей переміщення сторінок EPT . Це обмежує вектор атаки на Intel новішими архітектурами, зокрема, починаючи з сімейства Ice Lake-SP.
Варто зазначити, що, хоча публічному доказу концепції вдалося потрапити на хост у контрольованих середовищах, дослідники безпеки повідомили, що на деяких перекомпільованих ядрах експлойт просто призводить до збою віртуальної машини зловмисника, діючи як відмова в обслуговуванні, а не повний вихід.
Пом'якшення наслідків, виправлення та стратегії
Остаточне рішення для Zapscape з'явилося в репозиторіях Linux минулого липня разом з патчем, який виправляє порядок перевірки. Це виправлення переносить перевірку застарілого кореневого каталогу на виконання після виділення сторінки MMU, гарантуючи, що гіпервізор не створюватиме активні зіставлення під видаленим кореневим каталогом. Ці виправлення вже були реалізовані у стабільних гілках ядра та широко розповсюджуються різними дистрибутивами.
Для адміністраторів, які не можуть оновити систему негайно, існують високоефективні тимчасові заходи. Пріоритетним заходом є вимкнення вкладеної віртуалізації на всіх серверах, де вона не є абсолютно необхідною, шляхом передачі параметра `nested=0` модулям `kvm_amd` або `kvm_intel` у файлах конфігурації modprobe. Цей захід вимагає перезавантаження модуля, що означає зупинку всіх активних віртуальних машин.
Зрештою, якщо ви зацікавлені дізнатися більше, ви можете знайти деталі за наступним посиланням.