Vghost: уязвимость в ядре Linux даёт локальному пользователю root и побег из виртуалки

· Безопасность
Ошибка в подсистеме vhost почти девять лет позволяла локальному пользователю читать и писать память ядра и становиться root, а в одной из конфигураций виртуализации — пробиться из гостевой машины в хост. Дыру нашёл ИИ-конвейер Tencent.

cover.svg

Исследователи Tencent Zhuque Lab раскрыли уязвимость в подсистеме vhost ядра Linux, получившую имя Vghost и идентификатор CVE-2026-74580. Она позволяет локальному непривилегированному пользователю произвольно читать и записывать память ядра, обходить KASLR и повышать права до root. Атака детерминирована: ей не нужны ни «прогрев» памяти, ни удачное стечение времени.

vhost отвечает за ускорение сетевого и другого ввода-вывода для виртуальных машин и контейнеров. Доступ к нему пользователь получает, открыв устройство — обычно /dev/vhost-net или /dev/vhost-vsock.

Побег из гостя в хост

Второй сценарий уже́: когда virtio-устройство виртуальной машины стоит за виртуальным IOMMU с включённым iommu_platform, а vhost работает в режиме device-IOTLB, недоверенный гость может вызвать ту же ошибку и заставить ядро хоста записать данные за пределы отведённой памяти — в процесс QEMU. Оттуда гость способен перезаписать указатель на функцию и перехватить управление хост-процессом или уронить его.

Как это работает

vhost держит небольшой кэш отображений памяти для виртуальных колец. Попадание в кэш считается доказательством того, что область уже проверена. Кэш сбрасывается при обновлении и сбросе отображения, но не при командах VHOST_SET_VRING_ADDR и VHOST_SET_VRING_NUM, меняющих адреса или размер кольца «на лету». В результате ядро продолжает переводить новые адреса по старому отображению и копирует данные без проверки границ.

Ошибка жила в коде около девяти лет, потому что для её появления потребовались два разумных изменения: в 2017 году (Linux 4.11) добавили кэш и обходной путь, а в 2020-м (Linux 5.9) перенесли проверку адресов на более поздний этап, убрав контроль устаревшего перевода.

Кто уязвим и что делать

Затронуты ядра с 4.11 по 7.2-rc4. Полную цепочку «пользователь → root» воспроизвели на пяти дистрибутивных ядрах: Ubuntu 26.04, RHEL 9.8, Amazon Linux 2023, Microsoft Azure Linux 3.0 и Oracle Linux 10.2. На Ubuntu устройство доступно только группе kvm, на остальных четырёх оно было доступно любому пользователю в режиме 0666.

Исправление (коммит de845981da67) сбрасывает кэш при переконфигурировании кольца; патч выпущен 3 августа, подробный разбор — 12 октября. Red Hat, Amazon и Oracle уже выпустили обновления, Ubuntu закрыл 22.04, но для 24.04 и 26.04 правка на 13 октября ещё в работе. До установки исправленного ядра стоит ограничить доступ к устройствам vhost. Для побега из гостя обходного пути нет — помогает только патч.

Оценка и роль ИИ

Уязвимость оценена как высокая, но не критическая, и оценщики расходятся: команда kernel.org выставила 8.8 со сменой области действия, Red Hat — 7.3, Amazon — 7.8, Oracle — 7.3.

Дыру нашли с помощью Corvus AI — многоагентной системы Tencent для поиска уязвимостей в ядре. В апстрим-патче она отмечена строкой Assisted-by. Это именно машинная помощь исследователям, а не атака, управляемая ИИ. Та же команда ранее раскрыла 18-летнюю ошибку в SCTP.


Источник: The Hacker News

Комментарии

Войдите, чтобы комментировать.

  • Пока нет комментариев.