
Write-up técnico y prueba de concepto para CVE-2026-8069, una escalada de privilegios local en los servicios Acer NitroSense y PredatorSense, que explota una named pipe para ejecutar código arbitrario como SYSTEM.
Acer NitroSense y PredatorSense 3.x instalaron un servicio de Windows llamado PSSvc que exponía un protocolo personalizado de named pipe a usuarios locales. Un comando del protocolo aceptaba una ruta de ejecutable controlada por el llamante, duplicaba el token de winlogon.exe e iniciaba ese ejecutable como NT AUTHORITY\SYSTEM.
La restricción de ruta en el servicio vulnerable era una prueba de subcadena. Una ruta que comenzaba dentro del directorio del servicio y luego usaba componentes ..\ superaba la prueba pero se resolvía en otro lugar. Combinado con el control de acceso permisivo del pipe y la ausencia de autorización del llamante, esto permitía a un usuario local estándar obtener un proceso SYSTEM.
Acer asignó CVE-2026-8069, publicó versiones corregidas y acreditó a Artem Domarev de la Universidad de Hradec Králové en su aviso de seguridad.
Este artículo se centra en la vía de creación de procesos/LPE. El aviso de Acer también describe la eliminación arbitraria de archivos, que quedó fuera del alcance de esta validación.
La elección de la dirección de investigación también estuvo influenciada por un análisis público de software OEM publicado por Leon Jacobs de SensePost. Ese trabajo documentó vulnerabilidades en ASUS DriverHub, MSI Center, Acer Control Centre y Razer Synapse 4 (Jacobs, 2025). Reforzó la idea de que las utilidades de hardware proporcionadas por los proveedores pueden exponer una superficie de ataque significativa y poco explorada. En lugar de revisitar Acer Control Centre, extendí la investigación a una familia de productos diferente de Acer: NitroSense y PredatorSense.
| Elemento | Resultado |
|---|---|
| CVE | CVE-2026-8069 |
| Componente vulnerable probado | PSSvc.exe 3.1.3052.0, firmado por Acer Incorporated |
| Identidad del servicio | LocalSystem |
| Punto final IPC | \\.\pipe\predatorsense_service_namedpipe |
| Comando vulnerable | 0x0007 |
| Acceso requerido del atacante | Usuario local autenticado capaz de ejecutar un programa |
| Interacción del usuario | Ninguna |
| Resultado | Ejecutable arbitrario lanzado como NT AUTHORITY\SYSTEM |
| CVSS v3.1 de NVD | 7.8 Alta — AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Versiones corregidas | PredatorSense 3.00.3198; NitroSense 3.01.3056 |
La cadena de explotación es corta:
usuario local autenticado
│
▼
named pipe permisivo de PSSvc
│ comando personalizado 0x0007
▼
verificación de ruta solo por subcadena
│ service-dir\..\..\..\Windows\System32\cmd.exe
▼
duplicación del token de winlogon.exe de la sesión activa
│
▼
CreateProcessAsUserW → NT AUTHORITY\SYSTEM
Existe una inconsistencia en la redacción pública. La página de Acer dice que las versiones de NitroSense "anteriores a 3.01.3052" están afectadas, sin embargo, la versión 3.1.3052.0 de PSSvc.exe firmada por el proveedor y probada para este artículo es demostrablemente vulnerable. La misma página identifica NitroSense 3.01.3056 como la versión corregida. El rango de aplicabilidad de NVD también se extiende hasta, pero sin incluir, 3.01.3056.
Para PredatorSense, la frase de versiones afectadas de Acer se detiene antes de 3.00.3196, mientras que la versión corregida listada es 3.00.3198 y NVD utiliza esta última como límite superior.
La regla operativa conservadora es, por tanto, simple: no utilice la ambigua frase de "afectadas" como comprobación de parche. Actualice al menos a las versiones corregidas que Acer nombra —PredatorSense 3.00.3198 o NitroSense 3.01.3056— o a un paquete más reciente compatible con el modelo.
El problema se reprodujo con el paquete original de NitroSense.
| Artefacto | SHA-256 |
|---|---|
NitroSense_V3.01.3052_MSFT_SIGNED_20230420.zip | 947FB7C62665875450AFA9C9E7919D2B061ED8197C11B28D64781F121B30C157 |
NitroSense.msi | 6F9D405B6D2ADF2992C4E071453AD2C919A6DD38A89A31EF96EAFE81C50A745C |
PSSvc.exe 3.1.3052.0 instalado | 3BA836B6A5D95B55708E771B74F49098F58B096EF1F63C5CCAE355811E193A40 |
| PoC utilizado para la validación | 31BC81140BAB64A8B0CB70ACC1C2CF3CA84A7B00015E5610AC075DC50DCB0163 |
La firma Authenticode de PSSvc.exe se validó correctamente y encadenó a Acer Incorporated. El MSI instaló PSSvc como un servicio de proceso propio con inicio bajo demanda que se ejecuta como LocalSystem.
El paquete NitroSense instala:
SERVICE_NAME: PSSvc
DISPLAY_NAME: Predator Service
TYPE: WIN32_OWN_PROCESS
START_TYPE: DEMAND_START
ACCOUNT: LocalSystem
Un servicio SYSTEM no es automáticamente vulnerable. La pregunta importante es si un proceso con menores privilegios puede alcanzar funcionalidad que fue diseñada bajo la suposición de que su llamante es de confianza.
El análisis de cadenas expuso inmediatamente el punto final IPC:
\\.\pipe\predatorsense_service_namedpipe
En 0x140014AD0, el servicio construye el pipe y pasa un descriptor de seguridad explícito a CreateNamedPipeW:
D:(A;OICI;GA;;;BG)(D;OICI;GA;;;AN)(A;OICI;GRGWGX;;;AU)(A;OICI;GA;;;BA)
Esto merece una corrección explícita: la versión vulnerable no pasa un descriptor NULL. Crea una DACL permisiva.
| Abreviatura SID | Principal | Permiso efectivo en el SDDL |
|---|---|---|
BG | Invitados integrados | Acceso genérico total |
AN | Anónimo | Acceso genérico total denegado |
AU | Usuarios autenticados | Lectura, escritura y ejecución genéricas |
BA | Administradores integrados | Acceso genérico total |
La ACE AU es suficiente para que un usuario autenticado normal abra el pipe para lectura y escritura. El servidor no suplanta entonces al cliente ni realiza una decisión de autorización antes de despachar comandos privilegiados.
El hilo cliente en 0x14000ABB0 lee mensajes en un búfer de 512 bytes. Analiza los primeros tres bytes como un número de comando de 16 bits y un contador de argumentos de 8 bits. Cada argumento tiene prefijo de longitud:
Offset Tamaño Significado
0x00 2 ID de comando, little-endian
0x02 1 número de argumentos
0x03 4 longitud del argumento 0
0x07 n bytes del argumento 0
... DWORD de longitud repetido + valor
Los argumentos de cadena son UTF-16LE. Los argumentos enteros son DWORDs little-endian. El despachador acepta IDs de comando por debajo de 0x23 y los utiliza como índices en una tabla de funciones de 35 entradas en 0x140052C90.
La entrada para el comando 0x0007 apunta a 0x14000BFD0.
Reducido a su comportamiento relevante para la seguridad, el manejador se ve así:
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 solo responde si una cadena aparece dentro de otra. No canoniza una ruta, no resuelve segmentos de puntos, no abre un archivo ni demuestra que el objeto final permanece bajo un directorio de confianza.
Suponga que el servicio está instalado en:
C:\Program Files\Acer\NitroSense_Service