
Exploit de prova de conceito para CVE-2024-21338, uma vulnerabilidade de escalonamento de privilégios no driver AppLocker do Windows (appid.sys) usada pelo grupo Lazarus como 0day. Obtém leitura/escrita no kernel através de requisições IOCTL manipuladas e manipulação de PreviousMode.
Este é um POC para CVE-2024-21338, uma vulnerabilidade de elevação de privilégio no driver Windows AppLocker (appid.sys), que foi explorada como 0day pelo grupo Lazarus para escalada local de privilégios no Windows.
CVE-2024-21338 é uma vulnerabilidade de elevação de privilégio divulgada na Patch Tuesday da Microsoft em 13 de fevereiro de 2024. Foi explorada pelo grupo hacker Lazarus para obter acesso ao kernel e implantar o rootkit FudModule.
A vulnerabilidade existe no código de controle 0x22A018 do driver appid.sys. Um atacante pode acioná-la enviando uma requisição IOCTL especialmente criada, realizando chamadas de callback arbitrárias e, por fim, obtendo acesso de leitura e escrita ao kernel.

A vulnerabilidade está na função AppHashComputeImageHashInternal do driver appid.sys. AipDeviceIoControlDispatch não verifica corretamente o PreviousMode ao processar a requisição 0x22A018, permitindo que um processo em modo de usuário acione uma função de callback em modo kernel.
Obter privilégio de Local Service: A vulnerabilidade requer privilégio de Local Service para acessar o dispositivo \\Device\\AppID. Portanto, a ferramenta primeiro encontra e faz impersonate do processo Local Service.
Construir requisição IOCTL: A ferramenta constrói uma requisição IOCTL especialmente criada, contendo um ponteiro de função controlável e parâmetros.
Acionar a vulnerabilidade: Enviando a requisição IOCTL, a vulnerabilidade é acionada, chamando uma função gadget no kernel, modificando o campo PreviousMode da thread atual de modo de usuário para modo kernel.
Obter acesso de leitura/escrita ao kernel: Após modificar o PreviousMode, um processo em modo de usuário pode usar NtReadVirtualMemory e NtWriteVirtualMemory para ler e escrever em qualquer memória do kernel.
Compile o projeto com Visual Studio 2026. É necessário suporte ao Windows SDK e compilador C++.
Ative o serviço Application Identity em um sistema Windows sem patch (ex.: Windows 10 1709).
Execute o arquivo compilado com privilégios de administrador.
A ferramenta localizará automaticamente o processo Local Service e fará impersonate dele.
A ferramenta carregará o driver appid.sys e construirá a requisição IOCTL para acionar a vulnerabilidade.
Após acionar a vulnerabilidade com sucesso, a ferramenta solicitará o endereço e valor do kernel a serem modificados, permitindo modificar a memória do kernel.
Este projeto é apenas para fins educacionais e de pesquisa. Não deve ser usado para atividades ilegais.
| Nome do Arquivo | Descrição |
|---|
| main.cpp | Função principal, controle do fluxo de exploração |
| CVE-2024-21338.h | Declarações de estruturas e funções relacionadas à exploração |
| CVE-2024-21338.cpp | Implementação das funções de pré-condição para exploração |
| export_func.h | Declarações de funções exportadas |
| gadget_search.cpp | Implementação da busca por gadgets do kernel |
| Native.h | Definições da API nativa (Native API) |
| PE.h | Funções utilitárias para processamento de arquivos PE |