
CVE-2025-13032, частина 2: SAFA показала повне підвищення привілеїв у Windows 11 через драйвер Avast
Команда SAFA детально описала, як перетворила CVE-2025-13032, уразливість подвійного читання в драйвері ядра Avast, на повне локальне підвищення привілеїв до SYSTEM на оновленій Windows 11. Ваду вже виправлено.
Команда SAFA опублікувала другу й останню частину дослідження CVE-2025-13032, уразливості подвійного читання, яку вона виявила в драйвері ядра Avast. Матеріал від 18 вересня 2026 року описує повний ланцюг експлуатації, що завершується отриманням прав SYSTEM на повністю оновленій Windows 11.
Від подвійного читання до переповнення пулу
Драйвер отримує надану користувачем структуру _UNICODE_STRING, але читає її поле Length двічі: спершу визначає розмір буфера через ExAllocatePoolWithTag, а потім використовує його для memmove, який копіює рядок у цей буфер. Між цими читаннями другий потік може збільшити Length до великого значення, наприклад 0x1000, тоді як головний потік у циклі викликає уразливий IOCTL. Коли момент збігається, ядро копіює більше байтів, ніж виділило, і переповнення потрапляє в сусідній блок пулу. За словами SAFA, вікно гонки вузьке, але виграється надійно.
Ціль: масив RegBuffers об'єкта IORing
Ціллю став об'єкт I/O Ring, який групує асинхронні файлові операції через IoRingReadFile та IoRingWriteFile. Його масив вказівників RegBuffers розташований саме в пулі сторінок, розмір контролює користувач, а пошкодження одного вказівника вистачає для повного примітиву читання й запису. Дослідники виділили багато таких масивів, звільнили частину і активували ваду так, щоб переповнення влучило поруч із живим масивом.

RegBuffers[0] перенаправили на фальшиву структуру _IOP_MC_BUFFER_ENTRY у пам'яті нападника, тож ядро звертається до адреси, яку він контролює. Це можливо тому, що Windows не реалізує SMAP. IoRingReadFile став довільним записом у ядро, а IoRingWriteFile довільним читанням.
Витік адреси ядра через MDL
Адреси ядра рандомізовані, тому була потрібна одна відома: _EPROCESS власного процесу. Зареєстрований буфер відображається через Memory Descriptor List, і ядро зберігає його вказівник у записі буфера. Оскільки цей запис тепер у userland, дослідники прочитали поле Mdl, спрямували Address на MDL і прочитали поле Process, де зберігається вказівник на власний _EPROCESS.
Відновлення та права SYSTEM
Переповнення пошкодило також ProcessBilled, обфускований вказівник у заголовку блоку пулу, який обчислюється як EPROCESS ^ ChunkAddress ^ ExpPoolQuotaCookie; без виправлення він спричиняє синій екран під час звільнення блоку. SAFA вивела cookie з другого, чистого об'єкта IORing і повернула правильне значення. Останній крок викрадає токен процесу SYSTEM: експлойт проходить списком EPROCESS, читає токен SYSTEM і перезаписує власний. Ваду вже виправлено, а новіші ядра Windows використовують user-mode accessors проти цієї техніки.
SiTech — веброзробка з підтримкою AI
Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.