the_open_door
café
ESEN
← Volver al índice

SeManageVolumePrivilege and DLL hijacking

SeManageVolumePrivilege es un privilegio de Windows pensado para "tareas de mantenimiento de volumen" (desfragmentar, ampliar volúmenes, etc.). Suena inofensivo, pero da acceso de bajo nivel al disco y, en la práctica, permite reescribir las listas de control de acceso (ACL) de ficheros del sistema, incluidos los de C:\Windows. Quien lo tenga puede concederse a sí mismo escritura sobre directorios protegidos que normalmente solo toca SYSTEM.

Quién lo tiene. No es habitual, pero algunas cuentas de servicio lo arrastran por configuración. El primer paso es siempre confirmarlo:

whoami /priv

Si aparece SeManageVolumePrivilege (aunque salga como Disabled, el exploit lo habilita), el vector está disponible.

De privilegio a SYSTEM (DLL hijacking). El abuso clásico usa el binario público SeManageVolumeExploit.exe, que aprovecha el privilegio para dar a BUILTIN\Users permisos de escritura sobre los ficheros de C:\Windows:

.\SeManageVolumeExploit.exe       :: "Entries changed: NNN / DONE"

A partir de ahí ya se puede secuestrar una DLL que un proceso privilegiado cargue. Un objetivo cómodo es C:\Windows\System32\wbem\tzres.dll: lo carga el servicio WMI cuando alguien ejecuta systeminfo, y ese servicio corre como una cuenta privilegiada. Se coloca una tzres.dll maliciosa (por ejemplo, un reverse shell generado con msfvenom -f dll) y se dispara la carga:

move tzres.dll C:\Windows\System32\wbem\
systeminfo        :: WMI carga la DLL y ejecuta el payload

La shell resultante hereda el contexto del proceso que cargó la DLL (a menudo NT AUTHORITY\NETWORK SERVICE o SYSTEM, según el proceso disparado), suficiente para leer la prueba o, si hace falta, encadenar un ataque Potato.

Por qué importa. Es otro caso de "privilegio legítimo convertido en escalada": no hace falta un exploit de kernel, solo abusar de permisos mal asignados. Conceptualmente es primo del secuestro de PATH y del abuso de SeImpersonate.

Cómo detectarlo. La firma tiene dos partes. Primero, el cambio masivo de ACL sobre C:\Windows que hace SeManageVolumeExploit.exe: una avalancha de eventos 4670 ("se cambiaron los permisos de un objeto") y el propio binario en 4688/Sysmon 1. Segundo, el DLL hijacking: Sysmon Event ID 7 (Image Load) de una tzres.dll no firmada cargada desde System32\wbem por wmiprvse.exe, y el proceso hijo con uid privilegiado que sigue. Un tzres.dll recién escrito en System32\wbem (FIM) es el indicador en disco.

Defensa. No conceder SeManageVolumePrivilege a cuentas de servicio que no lo necesiten, vigilar cambios de ACL masivos sobre C:\Windows y aplicar listas de DLL conocidas / firma de binarios para que una DLL ajena no se cargue desde un directorio escribible.

Máquinas donde se aplica

  • AccessProving Grounds Practice