Помилка знаходиться у функції vgic_its_invalidate_cache(), яка проходить по кешу трансляції за допомогою xa_for_each() і викликає vgic_put_irq() для ітерованого вказівника, а не для значення, безпечно повернутого функцією xa_erase(). Оскільки викликати цю функцію можуть різні контексти з різними блокуваннями, «стан гонитви» цілком досяжний з гостьової системи шляхом одночасного надсилання команд ITS, запису в GITS_CTLR та очищення EnableLPIs у редистриб'юторі
.
Хоча втечі з гостьових систем на хост трапляються рідко, це найнебезпечніший клас вразливостей гіпервізора, оскільки вони руйнують бар'єр ізоляції, на якому базуються хмарні обчислення. Попередні публічні втечі з KVM були націлені на архітектуру x86, зазвичай через QEMU або код, специфічний для процесорів AMD . ITScape — це перший робочий експлойт, який демонструє втечу з непривілейованої гостьової системи на arm64 через код гіпервізора, вбудований безпосередньо в ядро — без використання помилок у емуляторах простору користувача
.
Для хмарних провайдерів, які використовують сервери на базі AWS Graviton, Ampere Altra або інші ARM-хости з KVM для багатокористувацьких навантажень, гостьова система може:
Більшість команд безпеки оцінили цю вразливість вище 9.0 балів за шкалою CVSS, що відображає її критичну серйозність .
Вразливий код знаходиться в шляху інвалідації кешу трансляції LPI. Коли ядру потрібно очистити записи кешу, воно ітерується по структурі XArray за допомогою xa_for_each() і викликає vgic_put_irq() для зменшення лічильника посилань на кожен запис. Проблема в тому, що xa_for_each() може повертати записи, які вже були видалені конкурентною операцією — наприклад, командою DISCARD ITS з іншого віртуального процесора. Цикл інвалідації все одно зменшує лічильник посилань для цього вже видаленого запису, спричиняючи подвійне звільнення та, як наслідок, ситуацію «використання після звільнення»
.
Попередня вразливість у тому ж коді, CVE-2024-26598, була частково виправлена і вирішувала UAF у шляху влучання в кеш трансляції LPI шляхом підвищення лічильника посилань у vgic_its_check_cache() перед зняттям блокування. Однак те виправлення не охопило шлях інвалідації, залишивши «стан гонитви» можливим для експлуатації через іншу послідовність тригерів
.
Офіційне виправлення змінює vgic_its_invalidate_cache() таким чином, що vgic_put_irq() викликається лише для значення, яке повернула функція xa_erase(), а не для кожного запису, який зачіпає ітератор. Повідомлення про внесення змін говорить: "KVM: arm64: vgic-its: Drop the translation cache reference only for the erased entry"
.
Оскільки xa_erase() атомарно видаляє та повертає старий запис — або повертає NULL, якщо запис уже було видалено — виправлення гарантує, що лічильник посилань буде зменшено рівно один раз, усуваючи вікно подвійного звільнення. Патч було внесено до основної гілки ядра на початку червня 2026 року, і він був швидко перенесений до стабільної серії 6.x приблизно 8–10 червня 2026 року
. Основні дистрибутиви, включаючи Red Hat, SUSE та Debian, випустили бекпортовані виправлення для своїх підтримуваних гілок ядра
.
Хьонву Кім опублікував робочий експлойт на GitHub приблизно 9–10 червня 2026 року. Репозиторій містить повний вихідний код, покрокові інструкції з відтворення та технічний опис техніки експлуатації вразливості . Експлойт активує «стан гонитви», координуючи потоки віртуальних процесорів, які одночасно видають команди DISCARD та здійснюють пошук у кеші трансляції LPI, що дозволяє точно відтворити ситуацію «використання після звільнення» для виконання коду на хості.
Публічна доступність надійного PoC означає, що стандартні сканери вразливостей та реальні зловмисники можуть легко взяти її на озброєння, що значно скорочує вікно між розкриттям інформації та активними атаками.
Якщо ви керуєте багатокористувацькою інфраструктурою KVM на arm64 — будь то AWS Graviton, Ampere Altra чи будь-яка подібна платформа — це слід розглядати як надзвичайну ситуацію для негайного встановлення патчів.
Comments
0 comments