
Writeup técnico e PoC para CVE-2024-6769, encadeando DLL hijacking com envenenamento de cache de ativação para escalar de integridade média para alta em sistemas Windows.
Este blog aborda duas falhas encadeadas: A primeira etapa é um bug de sequestro de DLL causado pelo remapeamento da unidade ROOT, e a segunda etapa é um bug de Envenenamento do Cache de Ativação gerenciado pelo servidor CSRSS.
A primeira etapa foi apresentada em detalhes na Ekoparty 2023 na apresentação chamada "I'm High" por Nicolás Economou da BlueFrost Security. Ele explicou como explorar a vulnerabilidade que, na época, ainda não havia sido corrigida pela Microsoft. Isso permitia que um usuário de INTEGRIDADE MÉDIA fosse elevado a ter PRIVILÉGIOS ALTOS limitados, mas sem o acesso completo para ser um Administrador completo.
A segunda etapa não foi apresentada naquela conferência, embora algumas etapas tenham sido sugeridas para iniciar a pesquisa.
Para começar, revisaremos a primeira etapa para fornecer um contexto introdutório. A partir daí, mergulharemos na minha pesquisa sobre a segunda etapa, detalhando a obtenção da escalada completa de INTEGRIDADE ALTA limitada para Administrador completo. Isso inclui uma Prova de Conceito funcional completa para ambas as etapas para todas as versões do Windows, que foi testada com sucesso no Windows 10, Windows 11, Windows Server 2022 e Windows Server 2019 com todas as atualizações aplicadas.

O único requisito para esta etapa é que o processo inicial comece em um NÍVEL DE INTEGRIDADE MÉDIA e o usuário pertença ao grupo Administrador.
A primeira etapa da exploração pode ser resumida nos seguintes passos:
Por exemplo: remapear o disco de
"C:" para "C:\users\public"
Isso também remapeará a pasta "system32" de
"C:\windows\system32" para "C:\users\public\windows\system32"
Um desses programas afetados é o CTFMON, que é executado em um NÍVEL DE INTEGRIDADE ALTO, mas sem privilégios de Administrador.
Normalmente, ele tenta carregar o módulo chamado MsCtfMonitor.dll da pasta system32 real, mas como a unidade ROOT foi remapeada, ele procura por MsCtfMonitor.dll em nosso system32 falso controlado, onde podemos criar e colocar uma DLL manipulada com o mesmo nome.
Neste ponto, ao colocar nossa versão de MsCtfMonitor.dll na pasta system32 falsa, sua função DoMsCtfMonitor é chamada e executa nosso código em um NÍVEL DE INTEGRIDADE ALTO.




Ao mesmo tempo, podemos corroborar que o processo, apesar de estar em um NÍVEL DE INTEGRIDADE ALTO, não possui privilégios de Administrador:


Em sua apresentação na Ekoparty, Nicolas sugeriu os seguintes passos para completar a exploração:


Embora pareça simples, requer muito tempo de engenharia reversa e depuração.
Ao cavar um pouco mais nesta história do vetor de ataque, ficou claro que o envenenamento do Cache de Contexto de Ativação tem sido usado em algumas explorações. Consequentemente, vale a pena aprender como a exploração foi feita anteriormente para fornecer contexto e insights adicionais. Detalhes sobre esta exploração estão disponíveis no artigo do Zero Day Initiative, Activation Context Cache Poisoning: Exploiting CSRSS for Privilege Escalation.
O uso do cache de ativação ocorre quando um programa vai carregar uma biblioteca que requer uma versão específica.
Por exemplo, se um aplicativo vai carregar C:\Windows\System32\comctl32.dll, não há garantia de que a comctl32.dll naquele local seja a versão que o aplicativo precisa. Este é um caso de uso básico do Cache de Contextos de Ativação. O programa pode enviar uma solicitação ao servidor CSRSS para processar uma nova Entrada de Contexto de Ativação a ser inserida no cache, para que este programa possa carregar a versão específica da biblioteca necessária.
Para este propósito, é usado o chamado manifesto, que está em formato XML. Geralmente é incorporado como um recurso em um arquivo EXE ou DLL. Alternativamente, o Windows procurará um arquivo de manifesto na mesma pasta onde o executável do programa está localizado.
A URL mencionada acima tem alguns exemplos de arquivos de manifesto usados por explorações antigas, como enganar o sistema para carregar a biblioteca advapi32.dll de um diretório controlado pelo atacante que foi alcançado através da técnica de PATH TRAVERSAL.

Claro, alguns vetores de ataque usados foram corrigidos, e algumas novas técnicas foram descobertas. Além disso, na correção de outubro de 2022 para o Windows 11 22H2, uma nova verificação foi adicionada.
Após esta correção ser implementada, a verificação quando um Contexto de Ativação (ACTX) é registrado só pode ser contornada se o processo que adiciona a nova entrada no cache tiver o mesmo RID ou superior ao processo que a utilizará.
Em winnt.h podemos ver os valores RID:
