
O driver de kernel pstrip64.sys expõe um IOCTL que permite que usuários com privilégios baixos mapeiem intervalos arbitrários de memória física para seu próprio espaço de endereçamento virtual. Essa primitiva permite acesso total de leitura/gravação à RAM física do sistema, permitindo que atacantes modifiquem estruturas críticas do kernel e elevem privilégios para NT AUTHORITY\SYSTEM.
O driver de kernel pstrip64.sys expõe um IOCTL que permite que usuários com baixos privilégios mapeiem intervalos arbitrários de memória física em seu próprio espaço de endereçamento virtual. Essa primitiva proporciona acesso total de leitura/escrita à RAM física do sistema, permitindo que invasores modifiquem estruturas críticas do kernel e elevem privilégios para NT AUTHORITY\SYSTEM.
O driver cria um objeto de dispositivo \Device\PSTRIP64 e um link simbólico \DosDevices\PSTRIP64 acessíveis aos usuários.
A vulnerabilidade existe na rotina DispatchDeviceControl, especificamente no manipulador do IOCTL 0x80002008. A função sub_11000 abre um handle para \Device\PhysicalMemory e o mapeia diretamente no espaço de endereçamento do processo chamador via ZwMapViewOfSection. Ela aceita um endereço físico e um comprimento do buffer de entrada, traduz o endereço via HalTranslateBusAddress e o mapeia usando ZwCurrentProcess(). Um invasor pode escanear a memória física para encontrar a estrutura _EPROCESS do seu próprio processo e sobrescrever o token de segurança para System, ou corrigir o código do kernel diretamente.
Uma vulnerabilidade semelhante foi vista pela primeira vez em CVE-2008-5725 para o arquivo pstrip.sys em versões anteriores do aplicativo, onde o driver PowerStrip usando o IOCTL 0x800020A8 permite que o invasor passe um endereço de destino (como HalDispatchTable) e dados a serem gravados nesse endereço. A encontrada desta vez na versão mais recente permite explicitamente que um usuário mapeie qualquer memória física em seu próprio processo. O invasor mapeia a RAM física, escaneia a estrutura do seu próprio processo e edita manualmente seu token para obter privilégios de Administrador. Agindo diretamente na memória.
RtlInitUnicodeString(&DestinationString, L"\\Device\\PhysicalMemory");
// ...
result = ZwOpenSection(&SectionHandle, 0xF001Fu, &ObjectAttributes);
// ...
v8 = ZwMapViewOfSection(..., (HANDLE)0xFFFFFFFFFFFFFFFFLL, ...);
Um PoC foi desenvolvido para demonstrar a escalação de privilégio; no entanto, nenhum código será disponibilizado publicamente para evitar uso indevido.

