
Il driver del kernel pstrip64.sys espone un IOCTL che consente agli utenti con privilegi bassi di mappare intervalli arbitrari di memoria fisica nel proprio spazio di indirizzi virtuale. Questa primitiva consente accesso completo in lettura/scrittura alla RAM fisica del sistema, permettendo agli attaccanti di modificare strutture critiche del kernel ed elevare i privilegi a NT AUTHORITY\SYSTEM.
Il driver del kernel pstrip64.sys espone un IOCTL che consente agli utenti con privilegi limitati di mappare intervalli arbitrari di memoria fisica nel proprio spazio di indirizzi virtuali. Questa primitiva permette l'accesso completo in lettura/scrittura alla RAM fisica del sistema, consentendo agli attaccanti di modificare strutture critiche del kernel ed elevare i privilegi a NT AUTHORITY\SYSTEM.
Il driver crea un device object \Device\PSTRIP64 e un symbolic link \DosDevices\PSTRIP64 accessibili agli utenti.
La vulnerabilità risiede nella routine DispatchDeviceControl, in particolare nell'handler per l'IOCTL 0x80002008. La funzione sub_11000 apre un handle a \Device\PhysicalMemory e lo mappa direttamente nello spazio di indirizzi del processo chiamante tramite ZwMapViewOfSection. Accetta un indirizzo fisico e una lunghezza dal buffer di input, li traduce tramite HalTranslateBusAddress e li mappa usando ZwCurrentProcess(). Un attaccante può scansionare la memoria fisica per trovare la struttura _EPROCESS del proprio processo e sovrascrivere il token di sicurezza con quello di System, oppure patchare direttamente il codice del kernel.
Una vulnerabilità simile è stata riscontrata per la prima volta con CVE-2008-5725 per il file pstrip.sys nelle versioni precedenti dell'app, dove il driver PowerStrip, usando l'IOCTL 0x800020A8, permette all'attaccante di passare un indirizzo di destinazione (come HalDispatchTable) e i dati da scrivere a quell'indirizzo. Quella trovata questa volta nell'ultima versione consente esplicitamente a un utente di mappare qualsiasi memoria fisica nel proprio processo. L'attaccante mappa la RAM fisica, cerca la struttura del proprio processo e modifica manualmente il proprio token per ottenere privilegi Admin. Agendo direttamente sulla memoria.
RtlInitUnicodeString(&DestinationString, L"\\Device\\PhysicalMemory");
// ...
result = ZwOpenSection(&SectionHandle, 0xF001Fu, &ObjectAttributes);
// ...
v8 = ZwMapViewOfSection(..., (HANDLE)0xFFFFFFFFFFFFFFFFLL, ...);
È stato sviluppato un PoC per dimostrare l'escalation dei privilegi, tuttavia non verrà reso disponibile alcun codice pubblicamente per evitarne un uso improprio.

