Análise e Exploração de Vulnerabilidades 0day no Sistema Windows da Microsoft
Recentemente, um patch de segurança lançado pela Microsoft corrigiu uma vulnerabilidade de elevação de privilégios do win32k que está sendo ativamente explorada. Essa vulnerabilidade afeta principalmente versões anteriores do sistema Windows, e parece não ser acionável no Windows 11. Este artigo analisará como os atacantes podem continuar a explorar esse tipo de vulnerabilidade no atual ambiente de segurança. A análise a seguir foi realizada com base em um ambiente Windows Server 2016.
Contexto da Vulnerabilidade
A vulnerabilidade 0day refere-se a uma falha de segurança não divulgada e não corrigida, semelhante ao conceito de negociação T+0 nos mercados financeiros. Uma vez que esse tipo de vulnerabilidade é explorado maliciosamente, pode causar danos graves. A vulnerabilidade 0day do sistema Windows descoberta recentemente permite que atacantes tenham controle total do sistema, levando a ataques como roubo de informações, destruição do sistema e implantação de malware. Do ponto de vista do Web3, isso pode resultar no roubo de chaves privadas, transferência de ativos digitais e até mesmo ameaçar todo o ecossistema Web3 baseado na infraestrutura do Web2.
Análise de Patch
A análise do código do patch revelou que ele corrigiu principalmente um problema de manipulação da contagem de referências de objetos. Com base nos comentários do código fonte do win32k, pode-se perceber que o código original apenas bloqueava o objeto da janela, sem bloquear o objeto do menu dentro da janela, o que poderia levar a uma referência incorreta do objeto do menu.
Prova de Conceito de Exploração de Vulnerabilidades(PoC)
A análise revelou que a função xxxEnableMenuItem pode retornar o estado do MenuItem principal da janela ou de um submenu. Construímos uma estrutura de menu especial com quatro camadas, que contém as seguintes características:
O ID do menu de camada mais baixa D deve ser do tipo de menu do sistema.
O menu de nível superior A também deve ser um menu do sistema, mas deve-se remover os itens com o mesmo ID que o menu D.
Remover a referência ao menu C no menu B.
A presença do Menu B parece ajudar à liberação do Menu C.
Ao acionar a vulnerabilidade, ao retornar à camada de usuário xxxRedrawTitle, remove a associação do menu C e B, liberando o menu C. Isso leva a referências inválidas ao objeto do menu C na função xxxEnableMenuItem.
Exploração de vulnerabilidades ( Exp ) implementação
Ideia geral
Considerar duas possíveis direções de utilização:
Executar shellcode: referência a vulnerabilidades anteriores como a CVE-2017-0263, mas pode enfrentar muitos obstáculos nas versões mais recentes do Windows.
Utilizar primitivas de leitura e escrita para modificar o token: nos últimos anos ainda existem exp públicos que podem ser referenciados, sendo necessário resolver principalmente o problema de como controlar pela primeira vez o valor de cbwndextra.
Adotamos a segunda opção, dividindo o exp em dois passos: controlar o valor cbwndextra e estabelecer uma primitiva de leitura e escrita estável.
primeira escrita de dados
Utilize o objeto de nome da classe de janela WNDClass para ocupar e liberar a memória do objeto de menu. Encontre a posição onde os dados podem ser escritos na função xxxRedrawWindow, controlando os dados de memória do objeto anterior para satisfazer a verificação de sinalizadores na função.
disposição de memória estável
Desenhar o layout de memória de três objetos HWND de 0x250 bytes em sequência, liberar o objeto do meio e ocupar com o objeto HWNDClass. Os objetos HWND antes e depois são usados para verificar através de funções e implementar primitivas de leitura e escrita. Precisar a disposição dos objetos através da divulgação do endereço do manipulador do núcleo.
implementação de leitura e escrita de primitivas
Qualquer leitura usa a função GetMenuBarInfo, qualquer escrita usa a função SetClassLongPtr. Exceto a escrita de TOKEN, todas as outras operações de escrita são realizadas através do objeto class do primeiro objeto de janela.
Conclusão
A Microsoft está a utilizar Rust para reestruturar o código win32k, o que pode resolver completamente este tipo de vulnerabilidades no futuro.
Este tipo de exploração de vulnerabilidades depende principalmente da divulgação do endereço do manipulador de pilha da área de trabalho, representando ainda um risco de segurança para sistemas mais antigos.
A descoberta da vulnerabilidade pode ter sido beneficiada por uma detecção de cobertura de código mais abrangente.
A monitorização de layouts de memória anómalos e da leitura e escrita de dados de janelas ajuda a detectar vulnerabilidades semelhantes.
Ver original
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
11 Curtidas
Recompensa
11
6
Compartilhar
Comentário
0/400
TestnetNomad
· 14h atrás
O que você está falando sobre Rust?
Ver originalResponder0
StealthDeployer
· 14h atrás
Já uso o Linux há muito tempo. Inteligente.
Ver originalResponder0
CryptoMotivator
· 14h atrás
Mais uma vez, a Microsoft realmente mantém essa tradição de bugs.
Análise de vulnerabilidades 0day no sistema Windows: da elevação de privilégios no win32k aos riscos de segurança do Web3
Análise e Exploração de Vulnerabilidades 0day no Sistema Windows da Microsoft
Recentemente, um patch de segurança lançado pela Microsoft corrigiu uma vulnerabilidade de elevação de privilégios do win32k que está sendo ativamente explorada. Essa vulnerabilidade afeta principalmente versões anteriores do sistema Windows, e parece não ser acionável no Windows 11. Este artigo analisará como os atacantes podem continuar a explorar esse tipo de vulnerabilidade no atual ambiente de segurança. A análise a seguir foi realizada com base em um ambiente Windows Server 2016.
Contexto da Vulnerabilidade
A vulnerabilidade 0day refere-se a uma falha de segurança não divulgada e não corrigida, semelhante ao conceito de negociação T+0 nos mercados financeiros. Uma vez que esse tipo de vulnerabilidade é explorado maliciosamente, pode causar danos graves. A vulnerabilidade 0day do sistema Windows descoberta recentemente permite que atacantes tenham controle total do sistema, levando a ataques como roubo de informações, destruição do sistema e implantação de malware. Do ponto de vista do Web3, isso pode resultar no roubo de chaves privadas, transferência de ativos digitais e até mesmo ameaçar todo o ecossistema Web3 baseado na infraestrutura do Web2.
Análise de Patch
A análise do código do patch revelou que ele corrigiu principalmente um problema de manipulação da contagem de referências de objetos. Com base nos comentários do código fonte do win32k, pode-se perceber que o código original apenas bloqueava o objeto da janela, sem bloquear o objeto do menu dentro da janela, o que poderia levar a uma referência incorreta do objeto do menu.
Prova de Conceito de Exploração de Vulnerabilidades(PoC)
A análise revelou que a função xxxEnableMenuItem pode retornar o estado do MenuItem principal da janela ou de um submenu. Construímos uma estrutura de menu especial com quatro camadas, que contém as seguintes características:
Ao acionar a vulnerabilidade, ao retornar à camada de usuário xxxRedrawTitle, remove a associação do menu C e B, liberando o menu C. Isso leva a referências inválidas ao objeto do menu C na função xxxEnableMenuItem.
Exploração de vulnerabilidades ( Exp ) implementação
Ideia geral
Considerar duas possíveis direções de utilização:
Executar shellcode: referência a vulnerabilidades anteriores como a CVE-2017-0263, mas pode enfrentar muitos obstáculos nas versões mais recentes do Windows.
Utilizar primitivas de leitura e escrita para modificar o token: nos últimos anos ainda existem exp públicos que podem ser referenciados, sendo necessário resolver principalmente o problema de como controlar pela primeira vez o valor de cbwndextra.
Adotamos a segunda opção, dividindo o exp em dois passos: controlar o valor cbwndextra e estabelecer uma primitiva de leitura e escrita estável.
primeira escrita de dados
Utilize o objeto de nome da classe de janela WNDClass para ocupar e liberar a memória do objeto de menu. Encontre a posição onde os dados podem ser escritos na função xxxRedrawWindow, controlando os dados de memória do objeto anterior para satisfazer a verificação de sinalizadores na função.
disposição de memória estável
Desenhar o layout de memória de três objetos HWND de 0x250 bytes em sequência, liberar o objeto do meio e ocupar com o objeto HWNDClass. Os objetos HWND antes e depois são usados para verificar através de funções e implementar primitivas de leitura e escrita. Precisar a disposição dos objetos através da divulgação do endereço do manipulador do núcleo.
implementação de leitura e escrita de primitivas
Qualquer leitura usa a função GetMenuBarInfo, qualquer escrita usa a função SetClassLongPtr. Exceto a escrita de TOKEN, todas as outras operações de escrita são realizadas através do objeto class do primeiro objeto de janela.
Conclusão
A Microsoft está a utilizar Rust para reestruturar o código win32k, o que pode resolver completamente este tipo de vulnerabilidades no futuro.
Este tipo de exploração de vulnerabilidades depende principalmente da divulgação do endereço do manipulador de pilha da área de trabalho, representando ainda um risco de segurança para sistemas mais antigos.
A descoberta da vulnerabilidade pode ter sido beneficiada por uma detecção de cobertura de código mais abrangente.
A monitorização de layouts de memória anómalos e da leitura e escrita de dados de janelas ajuda a detectar vulnerabilidades semelhantes.
Comentários sobre o artigo:
rust pode salvar o win? Isso me fez rir.