Как Vghost превратил старую ошибку Linux в путь к root?

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

Уязвимость обнаружила 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.


Новое на сайте

20854Как дешёвые Android-смартфоны превращаются в чужие прокси? 20853В Индии имя звонящего появится на экране вместе с номером 20852Как проверить готовность команды к звонку с клонированным голосом? 20851Уязвимости MarkLogic: делегированные права могли открыть путь к администраторскому... 20850Как GitHub закрыл лазейку, угрожавшую тысячам npm-пакетов? 20849Hirudo подменяет банковские приложения, чтобы обойти их защиту 20848Как Vghost превратил старую ошибку Linux в путь к root? 20847Уязвимости в PAN-OS и Cisco Secure Email Gateway уже используют атакующие 20846Как уязвимость GitLab могла открыть сервер для чужого кода? 20845Уязвимость SAP Cloud SDK могла отправить OAuth2-секреты злоумышленнику 20844Уязвимость в Nextcloud открыла путь к веб-оболочкам на серверах 20843Смогут ли малые ИИ-модели превратить бытовую технику в ботнет? 20842Пять уязвимостей NGINX: кому грозит риск и как закрыть его 20841Тайный диктофон в OpenAI: что утверждают следователи 20840Как проверять уязвимость входа, не заходя дальше дозволенного?
Ссылка