
CVE-2026-54121 (Certighost) PoC di impersonificazione del DC per AD CS. Gestione SAN corretta + riutilizzo account sicuro per MAQ.
Un fork funzionante del proof-of-concept per CVE-2026-54121, noto anche come Certighost. Ricerca originale e PoC di @H0j3n e @aniqfakhrul con analisi dettagliata su:
Questo fork corregge la gestione del SAN che impediva a PKINIT di avere successo su CA che rispettano il SAN richiesto, irrobustisce il parsing di --target-san e rivede la gestione dell'account computer in modo da non esaurire più la ms-DS-MachineAccountQuota.
Esegui come root perché i servizi LDAP e SMB rogue richiedono le porte privilegiate 389 e 445.
sudo python3 certighost.py -d playground.local -u lowpriv -p 'Password1234' --dc-ip 192.168.1.10
Al completamento con successo, il certificato di destinazione (.pfx) e la cache Kerberos (.ccache) vengono scritti nella directory di lavoro corrente.
CERTIGHOST$, creato alla prima esecuzione) oppure usa uno specificato tramite --computer-name.cdc personalizzato che punta a un IP controllato (tramite --listener; opzionale, auto-rilevato se omesso) e un attributo rmd che trasporta il nome DNS del DC di destinazione..ccache e l'hash NT.L'originale costruiva il SAN del certificato sia nell'estensione subjectAltName della CSR sia nell'attributo di richiesta SAN:dns= usando l'hostname del computer rogue invece del FQDN del DC di destinazione. Su una CA che rispetta il SAN richiesto, il certificato emesso conteneva quindi il dNSHostName dell'account rogue, così PKINIT lo associava al principale sbagliato e falliva con:
KDC_ERR_CLIENT_NAME_MISMATCH(Reserved for PKINIT)
Il SAN ora usa il dNSHostName del DC di destinazione (rmd_value / target_dns), che è ciò su cui PKINIT mappa un account computer. Il certificato emesso ora presenta DNS:<dc>.<domain> e la AS-REQ si conclude come il DC.
--target-san robusto--target-san ora accetta uno qualsiasi tra MEEREEN, MEEREEN$ o il FQDN meereen.essos.local (identificato tramite sAMAccountName o dNSHostName), invece della sola forma breve NAME.
L'originale creava un account casuale GHOST********$ a ogni esecuzione. Poiché gli account computer creati tramite ms-DS-MachineAccountQuota sono di proprietà dei Domain Admins (non di chi li crea), un utente con privilegi limitati non può eliminarli, quindi esecuzioni ripetute esaurivano rapidamente la quota (predefinita a 10) con account orfani.
Questo fork riutilizza un singolo account stabile (CERTIGHOST$, creato solo se non esiste già), quindi la quota non cresce mai e non c'è nulla da pulire tra un'esecuzione e l'altra.
Quando l'account viene creato per la prima volta, lo script stampa un avviso che segnala che rimane in AD:
[!] WARNING: computer account CERTIGHOST$ was created and is left in AD.
L'account rimane per essere riutilizzato nelle esecuzioni successive. Per rimuoverlo del tutto, eliminalo con un Domain Admin (il proprietario dell'oggetto):
Get-ADComputer CERTIGHOST | Remove-ADComputer -Confirm:$false
impacketcryptography, pyasn1, asn1crypto, pycryptodomexSolo per test di sicurezza autorizzati e finalità educative. Usalo solo contro sistemi per cui hai il permesso esplicito di eseguire test.