
The pstrip64.sys kernel driver exposes an IOCTL that allows low-privileged users to map arbitrary ranges of physical memory into their own virtual address space. This primitive allows full read/write access to the system's physical RAM, enabling attackers to modify critical kernel structures and escalate privileges to NT AUTHORITY\SYSTEM.
Der Kernel-Treiber pstrip64.sys stellt einen IOCTL bereit, der es Benutzern mit niedrigen Berechtigungen ermöglicht, beliebige Bereiche des physischen Speichers in ihren eigenen virtuellen Adressraum abzubilden. Diese primitive Operation erlaubt vollständigen Lese-/Schreibzugriff auf den physischen RAM des Systems, wodurch Angreifer kritische Kernelstrukturen modifizieren und Privilegien auf NT AUTHORITY\SYSTEM ausweiten können.
Der Treiber erstellt ein Geräteobjekt \Device\PSTRIP64 und einen symbolischen Link \DosDevices\PSTRIP64, der für Benutzer zugänglich ist.
Die Schwachstelle befindet sich in der DispatchDeviceControl-Routine, genauer gesagt im Handler für den IOCTL 0x80002008. Die Funktion sub_11000 öffnet ein Handle auf \Device\PhysicalMemory und bildet es direkt in den Adressraum des aufrufenden Prozesses ab, und zwar über ZwMapViewOfSection. Sie akzeptiert eine physische Adresse und Länge aus dem Eingabepuffer, übersetzt diese über HalTranslateBusAddress und bildet sie mit ZwCurrentProcess() ab. Ein Angreifer kann den physischen Speicher durchsuchen, um die _EPROCESS-Struktur seines eigenen Prozesses zu finden und das Sicherheitstoken auf System zu überschreiben oder direkt Kernel-Code zu patchen.
Eine ähnliche Schwachstelle wurde zuerst bei CVE-2008-5725 für die Datei pstrip.sys in früheren Versionen der Anwendung gesehen, wo der PowerStrip-Treiber mit dem IOCTL 0x800020A8 dem Angreifer erlaubt, eine Zieladresse (z.B. HalDispatchTable) und die darauf zu schreibenden Daten zu übergeben. Die diesmal in der neuesten Version gefundene Schwachstelle erlaubt es einem Benutzer explizit, beliebigen physischen Speicher in seinen eigenen Prozess abzubilden. Der Angreifer bildet den physischen RAM ab, durchsucht ihn nach seiner eigenen Prozessstruktur und bearbeitet manuell sein Token, um Administratorrechte zu erlangen. Direkt im Speicher agierend.
RtlInitUnicodeString(&DestinationString, L"\\Device\\PhysicalMemory");
// ...
result = ZwOpenSection(&SectionHandle, 0xF001Fu, &ObjectAttributes);
// ...
v8 = ZwMapViewOfSection(..., (HANDLE)0xFFFFFFFFFFFFFFFFLL, ...);
Es wurde ein PoC entwickelt, um die Privilegienausweitung zu demonstrieren, jedoch wird kein Code öffentlich verfügbar gemacht, um Missbrauch zu vermeiden.

