
Технический разбор и proof-of-concept для CVE-2026-8069 — локального повышения привилегий в службах Acer NitroSense и PredatorSense, использующего именованный канал для выполнения произвольного кода с правами SYSTEM.
Acer NitroSense и PredatorSense 3.x устанавливали службу Windows под названием PSSvc, которая предоставляла локальным пользователям доступ к пользовательскому протоколу именованных каналов. Одна из команд протокола принимала управляемый вызывающей стороной путь к исполняемому файлу, дублировала токен winlogon.exe и запускала этот исполняемый файл от имени NT AUTHORITY\SYSTEM.
Ограничение пути в уязвимой службе представляло собой проверку подстроки. Путь, начинавшийся внутри каталога службы и затем использующий компоненты ..\, проходил проверку, но разрешался в другое место. В сочетании с разрешающим контролем доступа к каналу и отсутствием авторизации вызывающей стороны это позволяло обычному локальному пользователю получить процесс SYSTEM.
Acer присвоил CVE-2026-8069, опубликовал исправленные версии и указал Артема Домарева из Университета Градец-Кралове в своем уведомлении о безопасности.
Эта статья посвящена пути создания процесса/повышения привилегий (LPE). В уведомлении Acer также описывается произвольное удаление файлов, которое не входило в рамки данной проверки.
На выбор направления исследований также повлиял публичный анализ OEM-программного обеспечения, опубликованный Леоном Джейкобсом из SensePost. В этой работе были задокументированы уязвимости в ASUS DriverHub, MSI Center, Acer Control Centre и Razer Synapse 4 (Jacobs, 2025). Это подтвердило идею о том, что поставляемые вендором аппаратные утилиты могут предоставлять значимую и недостаточно изученную поверхность атаки. Вместо повторного исследования Acer Control Centre я расширил исследование на другое семейство продуктов Acer: NitroSense и PredatorSense.
| Пункт | Результат |
|---|---|
| CVE | CVE-2026-8069 |
| Протестированный уязвимый компонент | PSSvc.exe 3.1.3052.0, подписанный Acer Incorporated |
| Идентификатор службы | LocalSystem |
| Конечная точка IPC | \\.\pipe\predatorsense_service_namedpipe |
| Уязвимая команда | 0x0007 |
| Требуемый доступ злоумышленника | Аутентифицированный локальный пользователь, способный запускать программу |
| Взаимодействие с пользователем | Нет |
| Результат | Произвольный исполняемый файл запускается от имени NT AUTHORITY\SYSTEM |
| NVD CVSS v3.1 | 7.8 High — AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Исправленные версии | PredatorSense 3.00.3198; NitroSense 3.01.3056 |
Цепочка эксплуатации коротка:
аутентифицированный локальный пользователь
│
▼
разрешающий именованный канал PSSvc
│ пользовательская команда 0x0007
▼
проверка пути только по подстроке
│ service-dir\..\..\..\Windows\System32\cmd.exe
▼
дублирование токена winlogon.exe активного сеанса
│
▼
CreateProcessAsUserW → NT AUTHORITY\SYSTEM
В публичных формулировках есть несоответствие. На странице Acer указано, что уязвимы версии NitroSense «до 3.01.3052», однако подписанная вендором версия PSSvc.exe 3.1.3052.0, протестированная для этой статьи, очевидно уязвима. На той же странице NitroSense 3.01.3056 указан как исправленная версия. Диапазон применимости NVD также распространяется вплоть до 3.01.3056, но не включая её.
Для PredatorSense предложение Acer об уязвимых версиях заканчивается перед 3.00.3196, тогда как указанная исправленная версия — 3.00.3198, и NVD использует последнюю в качестве верхней границы.
Поэтому консервативное операционное правило простое: не используйте неоднозначное предложение об «уязвимых» версиях как проверку наличия исправления. Обновитесь как минимум до исправленных версий, указанных Acer — PredatorSense 3.00.3198 или NitroSense 3.01.3056 — или до более нового пакета, совместимого с моделью.
Проблема была воспроизведена с оригинальным пакетом NitroSense.
| Артефакт | SHA-256 |
|---|---|
NitroSense_V3.01.3052_MSFT_SIGNED_20230420.zip | 947FB7C62665875450AFA9C9E7919D2B061ED8197C11B28D64781F121B30C157 |
NitroSense.msi | 6F9D405B6D2ADF2992C4E071453AD2C919A6DD38A89A31EF96EAFE81C50A745C |
Установленный PSSvc.exe 3.1.3052.0 | 3BA836B6A5D95B55708E771B74F49098F58B096EF1F63C5CCAE355811E193A40 |
| PoC, использованный для проверки | 31BC81140BAB64A8B0CB70ACC1C2CF3CA84A7B00015E5610AC075DC50DCB0163 |
Подпись Authenticode PSSvc.exe успешно прошла проверку и связана с Acer Incorporated. MSI установил PSSvc как службу с запуском по требованию и собственным процессом, работающую от имени LocalSystem.
Пакет NitroSense устанавливает:
SERVICE_NAME: PSSvc
DISPLAY_NAME: Predator Service
TYPE: WIN32_OWN_PROCESS
START_TYPE: DEMAND_START
ACCOUNT: LocalSystem
Служба SYSTEM не является автоматически уязвимой. Важный вопрос заключается в том, может ли процесс с более низкими привилегиями получить доступ к функциональности, которая была разработана в предположении, что её вызывающая сторона доверена.
Анализ строк сразу выявил конечную точку IPC:
\\.\pipe\predatorsense_service_namedpipe
По адресу 0x140014AD0 служба создаёт канал и передаёт явный дескриптор безопасности в CreateNamedPipeW:
D:(A;OICI;GA;;;BG)(D;OICI;GA;;;AN)(A;OICI;GRGWGX;;;AU)(A;OICI;GA;;;BA)
Это стоит явно уточнить: уязвимая сборка не передаёт NULL-дескриптор. Она создаёт разрешающий DACL.
| Сокращение SID | Субъект | Эффективное разрешение в SDDL |
|---|---|---|
BG | Встроенные гости | Полный доступ |
AN | Анонимные | Полный доступ запрещён |
AU | Аутентифицированные пользователи | Чтение, запись и выполнение |
BA | Встроенные администраторы | Полный доступ |
ACE AU достаточно, чтобы обычный аутентифицированный пользователь мог открыть канал для чтения и записи. Затем сервер не олицетворяет клиента и не выполняет решение об авторизации перед отправкой привилегированных команд.
Поток клиента по адресу 0x14000ABB0 считывает сообщения в буфер размером 512 байт. Он разбирает первые три байта как 16-битный номер команды и 8-битное количество аргументов. Каждый аргумент имеет префикс длины:
Смещение Размер Значение
0x00 2 идентификатор команды, little-endian
0x02 1 количество аргументов
0x03 4 длина аргумента 0
0x07 n байты аргумента 0
... повторяющаяся длина DWORD + значение
Строковые аргументы — UTF-16LE. Целочисленные аргументы — DWORD в little-endian. Диспетчер принимает идентификаторы команд ниже 0x23 и использует их как индексы в таблице функций из 35 записей по адресу 0x140052C90.
Запись для команды 0x0007 указывает на 0x14000BFD0.
В сокращённом виде, с точки зрения безопасности, обработчик выглядит так:
int command_07(parsed_arguments *args)
{
wchar_t service_directory[MAX_PATH];
wchar_t *requested_path = args->wide_string[0];
uint32_t mode = args->dword[1];
GetModuleFileNameW(NULL, service_directory, MAX_PATH);
PathRemoveFileSpecW(service_directory);
if (wcsstr(requested_path, service_directory) != NULL)
return launch_with_selected_token(requested_path, mode);
return 0;
}
wcsstr отвечает только на вопрос, встречается ли одна строка внутри другой. Он не канонизирует путь, не разрешает сегменты с точками, не открывает файл и не доказывает, что конечный объект остаётся в доверенном каталоге.
Предположим, служба установлена в:
C:\Program Files\Acer\NitroSense_Service