CVE-2026-53360
KVM: SEV: Требуется scratch-область внутри GHCB, если используется GHCB v2+
- Опубликовано
- 4 июл. 2026 г.
- Обновлено
- 5 авг. 2026 г.
- Назначение CNA
- Linux
- Наблюдены доказательства
- 8 авг. 2026 г.
Первичный CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:HНизкий · следующие 30 дней
- Процентиль
- 15,8 %
- Дата модели
- 21 сент. 2026 г.
EPSS – это статистическая оценка, а не достоверность или мера воздействия. Объедините это с CVSS, статусом KEV, воздействием и вашей средой.
Резюме
В ядре Linux устранена следующая уязвимость: KVM: SEV: требуется наличие scratch-области в GHCB при использовании GHCB v2+. Согласно спецификации GHCB, при использовании GHCB v2+ программная scratch-область должна находиться в общем буфере GHCB. Обратите внимание: такие запросы, как Page State Change (PSC), _полагаются_ на это поведение, поскольку гость не может указать длину при выполнении запроса, то есть размер полезной нагрузки гостя ограничен размером общего буфера. Отсутствие принудительного использования GHCB, а также множество других ошибок позволяют вредоносному гостю SNP повредить память кучи ядра хоста и раскрыть информацию о её раскладке. setup_vmgexit_scratch() выделяет буфер через kvzalloc(exit_info_2), где exit_info_2 управляется гостем. При exit_info_2=24 это приводит к выделению 24 байт в kmalloc-cg-32 (объекты slab по 32 байта). Буфер содержит 8-байтовый заголовок psc_hdr, за которым следуют 8-байтовые структуры psc_entry, поэтому в допустимых границах находятся только entries[0] и entries[1]. snp_begin_psc() проверяет end_entry на соответствие VMGEXIT_PSC_MAX_COUNT (253), но НЕ проверяет фактический размер буфера: idx_end = hdr->end_entry; if (idx_end >= VMGEXIT_PSC_MAX_COUNT) { // checks 253, not buffer snp_complete_psc(svm, ...); return 1; } for (idx = idx_start; idx <= idx_end; idx++) { entry_start = entries[idx]; // OOB when idx >= 2 Гость устанавливает end_entry=10+, из-за чего хост перебирает entries[2+], которые находятся за пределами буфера (OOB) в соседних объектах slab. Для каждой записи OOB: - Хост читает 8 байт (OOB READ / оракул утечки информации) - Если данные проходят проверку PSC, __snp_complete_one_psc() записывает в запись cur_page = 1 или 512 (OOB WRITE, sev.c:3806) - Если проверка не пройдена, ответ об ошибке показывает, является ли соседняя память нулевой или ненулевой (раскрытие информации гостю) Гость контролирует размер выделения (exit_info_2), диапазон записей (cur_entry/end_entry) и может отправлять неограниченное количество VMGEXIT, чтобы многократно поражать разные позиции slab. Используя различные ошибки, вредоносный гость SEV-SNP может: - Читать за пределами соседних объектов kmalloc-cg-32 (раскрытие раскладки кучи) - Записывать биты cur_page в соседние объекты (повреждение кучи) - Вызывать состояния use-after-free при выполнении VMGEXIT Например, при включённом KASAN одна загрузка гостевого модуля PoC через insmod приводит к 73 отчётам KASAN: BUG: KASAN: slab-out-of-bounds in snp_begin_psc+0x126/0x890 Read of size 8 at addr ffff888219ffb5e0 by task qemu-system-x86/2199 BUG: KASAN: slab-out-of-bounds in snp_begin_psc+0x468/0x890 Write of size 8 at addr ffff888351566648 by task qemu-system-x86/2199 The buggy address belongs to the object at ffff888XXXXXXXXX which belongs to the cache kmalloc-cg-32 of size 32 The buggy address is located N bytes to the right of allocated 32-byte region [ffff888XXXXXXXXX, ffff888XXXXXXXXX) Разбивка: 62 slab-out-of-bounds (чтения и записи за пределами выделения) 7 slab-use-after-free 4 use-after-free Вся благодарность Стэну за отличное описание и репро! [sean: напиши changelog]
Ответственное использование
Используйте информацию об уязвимостях только в тех системах, которыми вы владеете или имеете право тестировать. Kitploit ссылается на метаданные общедоступных исследований и не хранит код эксплойта или вредоносные полезные данные.