Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2019-6329 — Escalada de privilegios local en HP Support Assistant | Kitploit
Herramientas/GitHubGitHub/manhndd/cve-2019-6329
Escalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónMovimiento LateralPost-ExplotaciónDesarrollo de PayloadsExplotación de Binarios
GitHubmanhndd/cve-2019-6329

CVE-2019-6329

Escalada de privilegios local en HP Support Assistant

Ver Repositorio
41hace 4 añosAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Escalada de privilegios local en HP Support Assistant

Un fallo de escalada de privilegios local en HP Support Assistant mediante el abuso de enlaces duros

Investigador: ManhNDd de Bkav

Descripción

En la GUI de HP Support Assistant, cuando haces clic en Buscar actualizaciones y mensajes, el servicio HP Support Solution Framework ejecutará algunas tareas, inicia HPSAObjUtil8.exe (se ejecuta como SYSTEM) que cambia los permisos de todos los archivos .xml en C:\ProgramData\Hewlett-Packard\HP Support Framework\Logs\Temp\HPSA. En detalle, HPSAObjUtil8.exe otorga control total sobre esos archivos .xml a todos los usuarios. El siguiente es el código vulnerable en HPSAObjUtil8:

root@kitploit:~
public static void AddTempLogsPermission()
	{
		string path = Environment.GetEnvironmentVariable("ProgramData") + "\\Hewlett-Packard\\HP Support Framework\\Logs\\Temp\\HPSA";
		if (Directory.Exists(path))
		{
			string[] files = Directory.GetFiles(path, "*.xml");
			if (files != null && files.Length != 0)
			{
				foreach (string fileOrFolderName in files)
				{
					Patches._utils.AddFileSecurity(fileOrFolderName);
				}
			}
		}
	}

Un usuario puede crear un enlace duro con nombre ???.xml en la carpeta C:\ProgramData\Hewlett-Packard\HP Support Framework\Logs\Temp\HPSA, y apuntarlo a un archivo víctima de nuestra elección (todo lo que necesitamos es acceso de lectura), luego dejar que HPSAObjUtil8 modifique sus permisos para que tengamos permisos totales sobre el archivo (lectura/escritura/eliminación). Así que este fallo nos permite obtener permisos totales sobre archivos del sistema => puedes sobrescribir una DLL del sistema para obtener privilegios de sistema. Por cierto, la puntuación CVSS 3.0 del fallo establece Privilegios requeridos en Alto. Esto debería ser Ninguno, porque probé el fallo con éxito en un usuario no administrador.

Explotación

Al aplicar ingeniería inversa a HPSF.exe y HPSupportSolutionsFrameworkService.exe, descubrí que el cliente HPSF.exe se comunica con el servicio a través de la interfaz HP.SupportFramework.ServiceManager.Interfaces.IServiceInterface (definida en HP.SupportFramework.ServiceManager.dll). Si el cliente llama al método IserviceInterface.RunAnalysis, el servicio iniciará HPSAObjUtil8 y desencadenará el fallo.

root@kitploit:~
ServiceInterface.Instance.RunAnalysis("en-US", true);

Por lo tanto, tienes que crear un cliente falso y llamar a RunAnalysis. Sin embargo, el servicio valida a su cliente antes de procesar la solicitud:

  • Comprueba si el cliente está firmado con la firma de HP y en el volumen C.
  • Comprueba si el padre, el abuelo, el bisabuelo... del cliente está firmado con la firma de HP o es un proceso de Windows válido (en System32, por ejemplo). Sin embargo, si el método GetParent devuelve null, la comprobación se detiene.
root@kitploit:~
        {
            Process processById = Process.GetProcessById(\u0002);
            string text = \u000E.\u0001(processById);
            if (processById.MainModule.FileName.ToLowerInvariant() != text.ToLowerInvariant())
            {
                if (DebugLog.IsDebug)
                {
                    DebugLog.LogDebugMessage("Invalid File detected: " + text, DebugLog.IndentType.None);
                }
                return false;
            }
            Process parent = processById.GetParent();
            bool flag = true;
            int num = 0;
            while (parent != null && flag && num <= 5)
            {
                bool flag2;
                flag = \u000E.\u0001(parent, out flag2);
                if (!flag || flag2)
                {
                    break;
                }
                num++;
                parent = parent.GetParent();
            }
            return flag;
        }

Vamos a evadir la validación del cliente:

  • Para evadir la comprobación de firma, tienes que iniciar un EXE firmado por HP e inyectarle código, o crear alguna DLL falsa que el EXE de HP cargue. Elegí el segundo método. Descubrí que BatteryTest.exe (en C:\Program Files (x86)\Hewlett-Packard\HP Support Framework\Resources\HPBatteryCheck) está firmado con la firma de HP, y cuando inicio BatteryTest.exe, intenta cargar userenv.dll en su directorio antes de buscarla en %PATH%. Así que creo una userenv.dll falsa, la copio junto con BatteryTest.exe en la misma carpeta, y luego ejecuto BatterTest => BatterTest se convierte en nuestro exe cliente y ejecuta RunAnalysis por nosotros => se evade la comprobación de firma del cliente.
  • Copio BatterTest.exe y otros archivos necesarios en %tmp%, de modo que estén en el volumen C => asegurando que el cliente está en el volumen C.
  • Para evadir la comprobación del padre, creo un programa que llama a BatteryTest.exe y sale inmediatamente, ¡así GetParent devuelve null!

Ahora necesitas encontrar un ejecutable que pueda ser el objetivo del enlace duro. Debería ser un EXE o DLL que se ejecute como SYSTEM automáticamente en algún momento, de modo que cuando lo sobrescribas, obtengas privilegios de SYSTEM. Veo que al llamar a RunAnalysis, HPSupportSolutionsFrameworkService inicia muchos procesos como SYSTEM. Puedes sobrescribir esos procesos con tu propio ejecutable. Sin embargo, el servicio comprueba las firmas de esos EXEs antes de iniciarlos, por lo que no puedes crear EXEs falsos, pero puedes recurrir a DLLs cargadas por esos EXEs. Hay muchas DLLs ya cargadas en algún lugar, y muchas DLLs .NET cuya firma se comprueba antes de ser cargadas, así que no puedes usarlas. Afortunadamente, todavía hay algunas DLLs utilizables:

  • c:\program files (x86)\hp\shared\hputils64.dll, cargada por Detect_BatteryFailure.exe (firmada por HP).
  • c:\windows\syswow64\rtutils.dll
  • c:\windows\system32\msxml3.dll

Intenté modificar hputils64.dll y lo logré. Creo un enlace duro a hputils64.dll. Al llamar a RunAnalysis, HPSAObjUtil8 cambia los permisos de hputils64.dll, y unos segundos después Detect_BatteryFailure.exe se inicia (como LOCAL SYSTEM) y carga hputils64.dll. Antes de que hputils64 se cargue, puedes sobrescribirla, de modo que Detect_BatteryFailure.exe cargue tu DLL maliciosa y finalmente obtengas los privilegios de SYSTEM.

Conclusión

Para escribir el exploit, creé:

  • CreateProcess.exe: inicia un proceso y sale. Se usa para evadir la validación del padre.
  • CreateHardlink.exe: crea el enlace duro.
  • Userenv.dll: prepara las cosas para ejecutar el ensamblado .NET y ejecuta el ensamblado invader.exe en el contexto de BatterTest. Se usa para evadir la validación de firma del cliente.
  • Invader.exe: llama a RunAnalysis, lo que desencadenará el fallo.
  • MalDll.dll: inicia el Bloc de notas. hputils64.dll es sobrescrita con esta DLL.

Los siguientes son los pasos de explotación en PrivHP4.py:

  1. Copia BatteryTest.exe y otros archivos necesarios en la carpeta %tmp%.
  2. Crea un enlace duro desde C:\ProgramData\Hewlett-Packard\HP Support Framework\Logs\Temp\HPSA\hardlink.xml hasta C:\Program Files (x86)\HP\Shared\hputils64.dll
  3. Inicia BatteryTest.exe con CreateProcess.exe. CreateProcess.exe terminará inmediatamente después de iniciar BatterTest.
  4. Espera a que se cambie el permiso de C:\Program Files (x86)\HP\Shared\hputils64.dll, luego sobrescríbela con MalDll.dll, ¡y solo espera a que el Bloc de notas se inicie como SYSTEM!

Para probar el PoC, simplemente clona el repositorio y ejecuta PrivHP4.py.

Referencias

  1. https://support.hp.com/us-en/document/c06388027
  2. http://www.securityfocus.com/bid/108891
Descargar herramienta