
Proof-of-Concept für CVE-2026-29923, eine lokale Privilegienausweitung im Kernel-Treiber pstrip64.sys. Demonstriert eine Lese-/Schreib-Primitive auf den physischen Speicher über IOCTL, um auf Windows von einem unprivilegierten Benutzer zu NT AUTHORITY\SYSTEM zu eskalieren.
Ein minimaler Proof-of-Concept für CVE-2026-29923, eine Schwachstelle im Kernel-Treiber pstrip64.sys (EnTech Taiwan PowerStrip ≤ 3.90.736), die es einem unprivilegierten Benutzermodus-Prozess ermöglicht, zu NT AUTHORITY\SYSTEM zu eskalieren.
pstrip64.sys stellt einen IOCTL (0x80002008) bereit, der eine benutzerdefinierte physische Adresse akzeptiert und diese direkt in den virtuellen Adressraum des aufrufenden Prozesses abbildet, indem \Device\PhysicalMemory geöffnet und ZwMapViewOfSection mit dem Handle des aktuellen Prozesses aufgerufen wird. Es gibt keine Privilegienprüfung, keine Adressvalidierung über das hinaus, was HalTranslateBusAddress durchsetzt, und keine Zugriffskontrolle auf den symbolischen Link \\.\PSTRIP64.
Das Ergebnis ist eine uneingeschränkte Lese-/Schreib-Primitive für physischen Speicher aus einem unprivilegierten Prozess.
Mit beliebigem physischem Lesen/Schreiben folgt der Exploit vier Schritten.
1. Nach EPROCESS-Strukturen suchen
Der physische RAM wird in 2-MB-Blöcken durchsucht. Jeder Block wird nach dem Kernel-Pool-Tag Proc (0x636F7250) durchsucht, das die Pool-Belegung markiert, die die _EPROCESS-Struktur eines Prozesses enthält. Kandidaten-Treffer werden mit drei leichtgewichtigen Heuristiken validiert, bevor der PID vertraut wird:
PriorityClass == 0x2 — alle lebenden Prozesse laufen mit normaler PrioritätProcessLock == 0x0 — das Sperrfeld ist bei einem stabilen Prozess leerImageFileName[0] ist druckbares ASCII — Speichermüll erfüllt dies selten2. Beide Token-Zeiger lokalisieren
Es werden zwei Ziele benötigt:
Token-Felds unseres eigenen Prozesses innerhalb von _EPROCESS_EPROCESS-Struktur des Systemprozesses (PID 4) gespeichert ist3. Unser Token überschreiben
Die 4-KB-Seite, die unser Token-Feld enthält, wird abgebildet und das Feld mit dem System-Token-Wert überschrieben. Ab diesem Zeitpunkt behandelt der Windows-Kernel unseren Prozess als NT AUTHORITY\SYSTEM.
4. Eine Shell starten
cmd.exe wird über CreateProcessA gestartet. Da untergeordnete Prozesse das Token des übergeordneten Prozesses erben, läuft die resultierende Shell als SYSTEM.
Das physische Adressfenster 3 GB – 4 GB ist auf x86-Systemen für MMIO reserviert. Der Versuch, Seiten in diesem Bereich abzubilden, führt dazu, dass der Treiber den Fehler 74 zurückgibt (HalTranslateBusAddress-Fehler). Der Scan überspringt dieses Fenster und wird bei 0x100000000 fortgesetzt, um Kernel-Strukturen zu erfassen, die Windows oberhalb der 4-GB-Marke platziert.
Der Map-Handler des Treibers schreibt die zurückgegebene virtuelle Adresse in ein DWORD-Feld (LowPart) und kürzt so die 64-Bit-VA auf 32 Bit. Ein 64-Bit-Build erhält einen beschädigten Zeiger und stürzt sofort ab. Als x86 kompilieren.
| Software | Versionen |
|---|---|
| EnTech Taiwan PowerStrip | ≤ 3.90.736 |
Treiber-Hash (SHA-256):
ab01485bb7c8bc1a9c86096eeea6d31d8fad557bf4d44072b46373d2203faa6e
Die hartcodierten Offsets zielen auf Windows 10 22H2 x64. Andere Builds erfordern aktualisierte Werte — verwenden Sie dt nt!_EPROCESS in WinDbg, um sie zu bestätigen.
Öffnen Sie eine Visual Studio x86-Entwickler-Eingabeaufforderung und führen Sie Folgendes aus:
cl /EHsc /O2 exploit.c /Fe:poc.exe
Oder setzen Sie das Plattformziel in Visual Studio auf x86 und erstellen Sie im Release-Modus. Die Binärdatei benötigt außer dem Windows SDK keine externen Abhängigkeiten.
Laden Sie zuerst pstrip64.sys (zum Laden des Treibers sind Administratorrechte erforderlich, nicht jedoch zum Ausführen des Exploits selbst, sobald der Treiber geladen ist), dann:
poc.exe
Ein neues cmd.exe-Fenster wird geöffnet, das als NT AUTHORITY\SYSTEM ausgeführt wird.
Blockieren Sie das Laden des Treibers (bevorzugt)
Laufende Ausnutzung erkennen
SYSTEM-Rechten erzeugenNT AUTHORITY\SYSTEM ändertDieser Code wird ausschließlich zu Bildungs- und Verteidigungsforschungszwecken veröffentlicht. Verwenden Sie ihn nur auf Systemen, die Sie besitzen oder für deren Test Sie eine ausdrückliche schriftliche Genehmigung haben. Der Autor ist nicht für eine missbräuchliche Verwendung verantwortlich.
| Feld | Offset |
|---|
PriorityClass | 0x5B7 |
ProcessLock | 0x438 |
UniqueProcessId | 0x440 |
ImageFileName | 0x5A8 |
Token | 0x4B8 |