CVE-2022-30216: coerção de autenticação do serviço Windows “Server”
por Ben Barnea
Resumo executivo
O pesquisador da Akamai, Ben Barnea, encontrou uma vulnerabilidade importante no serviço Windows Server que foi atribuído como CVE-2022-30216 e uma pontuação básica de 8,8.
A vulnerabilidade tira proveito de um erro isolado em um procedimento de retorno de chamada de segurança que o serviço do Servidor implementa.
Confirmamos que a vulnerabilidade existe em máquinas com Windows 11 e Windows Server 2022 sem patch.
Quando combinada com um ataque de retransmissão NTLM (New Technology LAN Manager) nos Serviços de certificados do Active Directory (AD CS), a vulnerabilidade oferece a um invasor com credenciais de domínio a capacidade de executar código remotamente no controlador de domínio.
Também acreditamos que um intruso poderia utilizar esta técnica para modificar o mapeamento de certificados de um servidor e, assim, executar a falsificação de servidores.
A vulnerabilidade foi divulgada com responsabilidade à Microsoft e abordada na terça-feira de patches de julho.
Fornecemos uma prova de conceito da vulnerabilidade em nosso Repositório do GitHub.
Introdução
Durante os últimos meses, nossa equipe conduziu pesquisa completa das chamadas de procedimento remoto da Microsoft (MS-RPC). Em resumo, um RPC é usado para comunicações eficientes entre processos. Ele depende de um modelo cliente-servidor padrão e é um dos protocolos mais usados atualmente no Windows.
Um dos aspectos mais interessantes que identificamos no projeto MS-RPC é o retorno de chamada de segurança, que funciona para restringir o acesso a servidores RPC, essencialmente fornecendo segurança contra usuários indesejados, muitas vezes remotos. Muitos servidores RPC implementam um retorno de chamada de segurança, cada servidor com sua própria lógica e considerações.
Os serviços do Windows fazem amplo uso de RPC para disponibilizar suas funcionalidades aos clientes. Isso nos levou a investigar diferentes serviços e a lógica básica de suas implementações de retorno de chamada de segurança. Em um desses serviços, o serviço do Servidor, conseguimos encontrar uma falha de segurança pela qual os invasores poderiam obter permissão para executar a falsificação do servidor ou o acionamento de coerção de autenticação na vítima.
Neste blog, descreveremos os aspetos do RPC que temos pesquisado e que contribuem coletivamente para este novo bug: o que é o bug, como ele pode ser usado e como mitigá-lo.
O que é o serviço Windows Server?
O serviço Servidor (também chamado LanmanServer) é um serviço do Windows, responsável pelo gerenciamento de compartilhamentos SMB. Compartilhamentos são recursos, arquivos, impressoras e árvores de diretórios, disponibilizados pela rede por um servidor do Common Internet File System. Em essência, os compartilhamentos de rede permitem que os usuários utilizem outros dispositivos na rede para executar várias tarefas diárias.
O serviço do Servidor permite que uma máquina remota crie, configure, consulte e exclua compartilhamentos por meio de RPC por um pipe nomeado (“pipe/srvsvc”). Para o restante desta postagem, vamos nos referir ao serviço como srvsvc.
Uma vulnerabilidade no srvsvc é impactante porque o serviço fornece funcionalidade principal e, portanto, é executado por padrão em cada máquina Windows.
SMB sobre QUIC
A partir do Windows 10 20H2, a Microsoft introduziu um novo recurso: SMB sobre QUIC. O recurso permite o acesso a compartilhamentos SMB por meio do QUIC, um novo protocolo de rede da camada de transporte. O objetivo do QUIC é fornecer uma conexão mais confiável e segura e, ao mesmo tempo, superar problemas comuns da Internet, como latência e perda de pacotes.
Em uma interação de rede QUIC, como uma medida de segurança adicional, o cliente verifica a identidade do servidor examinando o certificado fornecido pelo servidor. Com a adição de SMB sobre o QUIC, o serviço do Servidor se tornou responsável pelo gerenciamento desses certificados.
A vulnerabilidade encontrada está nessa funcionalidade. Para entendê-la, primeiro precisamos analisar uma das maneiras como os servidores RPC executam o controle de acesso.
Retornos de chamada de segurança
Muitos serviços do Windows, dentre eles o srvsvc, implementam um servidor RPC para permitir a comunicação entre processos e fornecer acesso à sua funcionalidade a diferentes clientes. O RPC no Windows utiliza vários mecanismos de segurança; vamos nos concentrar em um chamado retorno de chamada de segurança.
O objetivo de um retorno de chamada de segurança é restringir o acesso a uma interface RPC. O retorno de chamada é implementado pelo desenvolvedor do servidor RPC e permite que cada desenvolvedor aplique sua própria lógica para permitir o acesso a usuários específicos ou impedir o acesso a funções específicas. No RPC, as funções expostas pelo servidor são representadas usando opnums (números operacionais), que veremos brevemente no retorno de chamada de segurança do srvsvc.
Uma crônica de um retorno de chamada de segurança
Para entendermos o bug, primeiro precisamos examinar uma versão mais antiga do retorno de chamada de segurança do srvsvc antes que o recurso SMB sobre QUIC fosse adicionado:
Como visto acima, a lógica do retorno de chamada de segurança do srvsvc é a seguinte:
- Se um cliente remoto tentar acessar uma função no intervalo de 64 a 69 (inclusive): recusar acesso
- Se um cliente remoto, que não é uma conta de cluster, tentar acessar uma função no intervalo de 58 a 63 (inclusive): negar acesso
Portanto, em essência, os clientes remotos são impedidos de acessar essas funções específicas da interface. Essa verificação de intervalo indica que as funções restritas são sensíveis e devem ser invocadas apenas pelos processos esperados (locais).
Com a adição do SMB sobre o QUIC, o Windows 10 20H2 adicionou quatro novas funções ao serviço srvsvc:
- LocalrServerCertificateMappingGet
- LocalrServerCertificateMappingSet
- LocalrServerCertificateMappingEnum
- LocalrServerCertificateMappingRemove
Como o acesso remoto a essas funções não era desejável, elas foram adicionadas à variedade de funções locais, funções que o retorno de chamada de segurança do srvsvc proíbe para clientes remotos.
E, como por ser visto abaixo, o intervalo foi realmente alterado para incluir números operacionais para essas novas quatro funções, aumentando o primeiro intervalo local de 64 a 69 para 64 a 73 e estendendo o controle de acesso do retorno de chamada de segurança para essas funções. Até aí, tudo bem.
No Windows 11 e no Windows Server 2022, a Microsoft adicionou uma nova função chamada LocalrServerCertificateMappingModify:
Desta vez, no entanto, o intervalo de funções restritas não foi alterado nessa versão mais recente para incluir a função recém-adicionada:
Portanto, quando essa função foi adicionada, ela não era coberta pelo retorno de chamada de segurança e, portanto, estava acessível a clientes RPC remotos.
Oportunidades de exploração
Ao chamar essa função, um invasor pode alterar configurações de mapeamentos de certificado no servidor. Um mapeamento de certificado é um “link simbólico” entre o certificado QUIC de um servidor e um certificado no armazenamento de certificados. Acreditamos que um intruso poderia utilizar esta função para adicionar o próprio mapeamento de certificados e, assim, executar a falsificação do servidor. Não se esqueça de que essa função não adiciona nem modifica um certificado no armazenamento de certificados do Windows, mas altera um mapeamento do certificado usado pelo servidor QUIC para um certificado no armazenamento do Windows.
Ao tentar avaliar o impactos da vulnerabilidade, percebemos que a estrutura que a função recebe contém o local de armazenamento do certificado:
Ao fornecer um caminho UNC como a variável storeLocation, um invasor pode fazer com que LocalrServerCertificateMappingModify acione uma solicitação RPC do servidor vítima para uma máquina que ele controla. O fluxo de função que faz com que a solicitação seja acionada é:
LocalrServerCertificateMappingModify → SsValidCertandUpdateCertinfo → CertOpenStore → _CertDllOpenSystemStoreProvW → EnumPhysicalStore → FormatSystemRegPath → RegConnectRegistryExW → BaseBindToMachine → Rpc_OpenPredefHandle → NdrClientCall3
Durante a solicitação RPC enviada pelo servidor para a nossa máquina, o servidor executa a autenticação contra o servidor do invasor. O invasor agora pode aproveitar as credenciais da vítima para executar um ataque de retransmissão NTLM.
Explorando a vulnerabilidade e executando o fluxo de retransmissão NTLM, conseguimos replicar o cenário de ataque PetitPotam que está atacando o AD CS e assumir o controlador de domínio.
A ativação da vulnerabilidade requer que o invasor tenha acesso a uma máquina no domínio. Para o cenário de retransmissão NTLM, a função AD CS precisa ser adicionada, juntamente com um dos seus serviços que são predispostos à retransmissão NTLM (Certificate Authority Web Enrollment (Inscrição na Web de Autoridade de Certificação), Certificate Enrollment Web Service (Serviço Web de Registro de Certificado)).
Correção
A Microsoft lançou um patch para esta vulnerabilidade na Patch Tuesday de julho. O problema foi corrigido pela:
Correção da variedade de funções locais no retorno de chamada de segurança evitando, assim, o acesso remoto à função LocalrServerCertificateMappingModify
Adição de uma verificação de acesso em cada uma das funções locais recém-adicionadas
Cronograma de divulgação
26 de abril de 2022: Um relatório foi enviado à Microsoft
26 de abril de 2022: Status alterado de Novo para Revisão/Reprodução
9 de maio de 2022: Status alterado de Revisão/Reprodução para Desenvolvimento
12 de julho de 2022: O patch foi lançado
Mitigação e detecção
A seguir estão as recomendações para mitigar a retransmissão NTLM:
Muitas vezes, um ataque de retransmissão NTLM que viola o AD CS envolverá uma solicitação TGT. O log de eventos (EventID 4768) incluirá o endereço IP da máquina solicitante. Solicitações TGT mal-intencionadas podem ser detectadas se um TGT for solicitado para um controlador de domínio de uma máquina que não seja um controlador de domínio em si.
Uma prova de conceito disponível no repositório de Pesquisa de segurança da Akamai.
Resumo
Ao adicionar novos recursos, é importante estar ciente das possíveis consequências que eles têm, não apenas na funcionalidade do recurso em si, mas também na maneira como ele se torna acessível aos usuários. Em nosso caso, o SMB sobre o QUIC foi adicionado ao Windows e introduziu novas funções no serviço do Servidor. No entanto, a vulnerabilidade não se encontra na implementação de SMB sobre o QUIC, mas sim na forma como uma função mais antiga restringia o acesso à respetiva interface RPC.
A equipe de pesquisa de segurança da Akamai realizou várias pesquisas sobre o MS-RPC, começando com a análise de uma vulnerabilidade de tempo de execução RPC no Patch Tuesday de agosto, assim como uma descrição de outra CVE que encontramos em maio. Ben Barnea e Ophir Harpaz apresentaram a pesquisa de vulnerabilidade de serviço do Server na DEF CON 30, em Las Vegas.