Vghost, уязвимость ядра Linux с номером CVE-2026-74580, позволяет локальному пользователю читать и изменять память ядра, обходить KASLR и получать права root. В определённой конфигурации виртуализации недоверенная виртуальная машина может вызвать выход записи за границы памяти процесса QEMU на хосте: это способно привести к захвату управления процессом или его аварийному завершению. Ошибка оставалась в коде около девяти лет; публичных свидетельств её эксплуатации нет.

Уязвимость обнаружила Tencent Zhuque Lab при помощи Corvus AI — созданной Tencent мультиагентной системы для поиска ошибок в ядре. Это машинная поддержка исследовательской работы, а не атака, выполненная искусственным интеллектом. Исправление выпустили 3 августа, а 12 октября Tencent опубликовала подробный разбор с рабочими демонстрациями обоих сценариев. В исправлении Corvus AI указана строкой «При содействии» (Assisted-by). Та же команда и исследовательский процесс выявили 18-летнюю ошибку SCTP в ядре, о которой сообщили в августе: она также позволяла получить root, а в испытаниях — выбраться из контейнера.
Проблема затрагивает подсистему vhost, которая ускоряет сетевой обмен и другие операции ввода-вывода виртуальных машин и контейнеров. Обычно локальный пользователь обращается к ней через устройства
В локальном сценарии непривилегированный пользователь, имеющий доступ к vhost, получает надёжный способ читать и записывать произвольные адреса ядра. Эксплуатация детерминирована: ей не нужны ни предварительная «укладка» объектов в памяти, ни удачное совпадение по времени. Для выхода из гостевой системы условия уже уже: virtio-устройство виртуальной машины должно работать за виртуальным IOMMU с включённым
Причина связана с кешем отображений памяти. Для каждого виртуального кольца и общих очередей передачи данных vhost хранит небольшой набор отображений; попадание в кеш считается подтверждением, что область уже проверена. Кеш очищается при обновлении или инвалидировании отображения, а также при сбросе очереди. Но этого не происходило, если адрес или размер кольца живой очереди меняли командами
При подключённом device IOTLB эти команды принимают новые адреса, откладывая их проверку. Если кеш уже заполнен, последующая проверка не выполняется: vhost продолжает преобразовывать новые адреса по старому отображению. Затем ядро копирует данные по полученному указателю без проверки границ. Запись в кольцо использованных дескрипторов или чтение дескриптора может выйти за пределы отображённой области и дать атакующему возможность читать или изменять память ядра.
Ошибка сложилась из двух изменений. В 2017 году, в Linux 4.11, добавили кеш и обходной путь при попадании в него. В 2020 году, в Linux 5.9, проверку адресов перенесли из команды на более поздний этап. Из-за этого исчезла проверка, которая могла бы обнаружить устаревшее отображение. Вместе эти изменения оставили уязвимость в ядре примерно на девять лет.
Уязвимы версии Linux от 4.11 до 7.2-rc4. Tencent воспроизвела полную цепочку повышения привилегий на ядрах Ubuntu 26.04, RHEL 9.8, Amazon Linux 2023, Microsoft Azure Linux 3.0 и Oracle Linux 10.2. В Ubuntu доступ к устройству был ограничен группой
Исправление внесено коммитом
До установки исправленного ядра следует закрыть общий доступ к

Изображение носит иллюстративный характер
Уязвимость обнаружила Tencent Zhuque Lab при помощи Corvus AI — созданной Tencent мультиагентной системы для поиска ошибок в ядре. Это машинная поддержка исследовательской работы, а не атака, выполненная искусственным интеллектом. Исправление выпустили 3 августа, а 12 октября Tencent опубликовала подробный разбор с рабочими демонстрациями обоих сценариев. В исправлении Corvus AI указана строкой «При содействии» (Assisted-by). Та же команда и исследовательский процесс выявили 18-летнюю ошибку SCTP в ядре, о которой сообщили в августе: она также позволяла получить root, а в испытаниях — выбраться из контейнера.
Проблема затрагивает подсистему vhost, которая ускоряет сетевой обмен и другие операции ввода-вывода виртуальных машин и контейнеров. Обычно локальный пользователь обращается к ней через устройства
/dev/vhost-net или /dev/vhost-vsock. Именно доступ к таким файлам определяет, кто может начать атаку с хоста. В локальном сценарии непривилегированный пользователь, имеющий доступ к vhost, получает надёжный способ читать и записывать произвольные адреса ядра. Эксплуатация детерминирована: ей не нужны ни предварительная «укладка» объектов в памяти, ни удачное совпадение по времени. Для выхода из гостевой системы условия уже уже: virtio-устройство виртуальной машины должно работать за виртуальным IOMMU с включённым
iommu_platform, а vhost — в режиме device-IOTLB. Тогда действия недоверенной гостевой системы могут привести к записи за границы памяти в процессе QEMU на хосте. Гость способен перезаписать указатель на функцию и изменить дальнейшее выполнение программы либо просто обрушить QEMU. Оценщики расходятся в том, следует ли считать это пересечением границы между гостем и хостом. Причина связана с кешем отображений памяти. Для каждого виртуального кольца и общих очередей передачи данных vhost хранит небольшой набор отображений; попадание в кеш считается подтверждением, что область уже проверена. Кеш очищается при обновлении или инвалидировании отображения, а также при сбросе очереди. Но этого не происходило, если адрес или размер кольца живой очереди меняли командами
VHOST_SET_VRING_ADDR и VHOST_SET_VRING_NUM. При подключённом device IOTLB эти команды принимают новые адреса, откладывая их проверку. Если кеш уже заполнен, последующая проверка не выполняется: vhost продолжает преобразовывать новые адреса по старому отображению. Затем ядро копирует данные по полученному указателю без проверки границ. Запись в кольцо использованных дескрипторов или чтение дескриптора может выйти за пределы отображённой области и дать атакующему возможность читать или изменять память ядра.
Ошибка сложилась из двух изменений. В 2017 году, в Linux 4.11, добавили кеш и обходной путь при попадании в него. В 2020 году, в Linux 5.9, проверку адресов перенесли из команды на более поздний этап. Из-за этого исчезла проверка, которая могла бы обнаружить устаревшее отображение. Вместе эти изменения оставили уязвимость в ядре примерно на девять лет.
Уязвимы версии Linux от 4.11 до 7.2-rc4. Tencent воспроизвела полную цепочку повышения привилегий на ядрах Ubuntu 26.04, RHEL 9.8, Amazon Linux 2023, Microsoft Azure Linux 3.0 и Oracle Linux 10.2. В Ubuntu доступ к устройству был ограничен группой
kvm, поэтому проверка начиналась с пользователя, входящего в эту группу, а не с произвольной локальной учётной записи. В остальных четырёх образах узел устройства был доступен всем на чтение и запись с правами 0666. Исправление внесено коммитом
de845981da67: кеш очищается при каждой перенастройке кольца. Для устранения проблемы нужно установить ядро с исправлением и перезагрузить систему; поставщики могут включить патч, не меняя отображаемую версию ядра. Первые исправленные стабильные версии: 5.10.265, 5.15.216, 6.1.183, 6.6.152, 6.12.104, 6.18.45, 7.1.9 и 7.2. Red Hat, Amazon Linux и Oracle Linux уже выпустили исправления. Ubuntu исправила 22.04; по состоянию на 13 октября обновления для ядер Ubuntu 24.04 и 26.04 всё ещё значились как находящиеся в работе. До установки исправленного ядра следует закрыть общий доступ к
/dev/vhost-net и /dev/vhost-vsock, оставив их только доверенным службам виртуализации. Членство в группе, которой принадлежит такой узел, пока работает уязвимое ядро нужно считать привилегией. Временного обходного решения для атаки из гостевой системы на хост нет: этот сценарий устраняет только исправленное ядро. Оценки серьёзности расходятся: команда CVE на поставила 8,8 и отметила изменение границ воздействия, поскольку запись из гостевой системы затрагивает память QEMU на хосте; Red Hat оценила риск в 7,3, считая границы доверия неизменными и ниже оценивая влияние на целостность. Amazon выставила 7,8, Oracle — 7,3.