Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2019-6329 — Escalação Local de Privilégios no HP Support Assistant | Kitploit
Ferramentas/GitHubGitHub/manhndd/cve-2019-6329
Escalada de PrivilégiosAnálise de VulnerabilidadesExploraçãoMovimento LateralPós-ExploraçãoDesenvolvimento de PayloadsExploração de Binários
GitHubmanhndd/cve-2019-6329

CVE-2019-6329

Escalação Local de Privilégios no HP Support Assistant

Ver Repositório
41há 4 anosAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Escalação de Privilégio Local no HP Support Assistant

Um bug de escalação de privilégio local no HP Support Assistant abusando de hard link

Pesquisador: ManhNDd da Bkav

Descrição

No HP Support Assistant GUI, quando você clica em Check for updates and messages, o serviço HP Support Solution Framework executará algumas tarefas, inicia HPSAObjUtil8.exe (executado como SYSTEM) que altera a permissão de todos os arquivos .xml em C:\ProgramData\Hewlett-Packard\HP Support Framework\Logs\Temp\HPSA. Em detalhes, HPSAObjUtil8.exe concede controle total sobre esses arquivos .xml a todos os usuários. Segue o código vulnerável em 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);
				}
			}
		}
	}

Um usuário pode criar um hardlink com nome ???.xml na pasta C:\ProgramData\Hewlett-Packard\HP Support Framework\Logs\Temp\HPSA, e apontá-lo para um arquivo vítima de nossa escolha (tudo que precisamos é acesso de leitura), então deixar HPSAObjUtil8 modificar as permissões dele para que tenhamos permissões totais sobre o arquivo (leitura/escrita/exclusão). Portanto, esse bug nos permite obter permissões totais sobre arquivos do sistema => você pode sobrescrever uma DLL do sistema para obter privilégios de sistema. A propósito, a pontuação CVSS 3.0 do bug define Privileges Required como Alto. Isso deveria ser Nenhum, porque testei o bug com sucesso em um usuário não administrador.

Exploração

Ao reverter o HPSF.exe e o HPSupportSolutionsFrameworkService.exe, descobri que o cliente HPSF.exe se comunica com o serviço através da interface HP.SupportFramework.ServiceManager.Interfaces.IServiceInterface (definida em HP.SupportFramework.ServiceManager.dll). Se o cliente chamar o método IserviceInterface.RunAnalysis, o serviço iniciará o HPSAObjUtil8 e acionará o bug.

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

Então você precisa criar um cliente falso e chamar RunAnalysis. No entanto, o serviço valida seu cliente antes de processar a solicitação:

  • Verifica se o cliente está assinado com assinatura HP e no volume C.
  • Verifica se o pai, avô, bisavô... do cliente está assinado com assinatura HP ou é um processo Windows válido (em System32, por exemplo). No entanto, se o método GetParent retornar nulo, a verificação para.
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 contornar a validação do cliente:

  • Para contornar a verificação de assinatura, você precisa iniciar um EXE assinado pela HP e injetar código nele, ou criar alguma DLL falsa, e o EXE HP a carrega. Escolho o segundo método. Descobri que BatteryTest.exe (em C:\Program Files (x86)\Hewlett-Packard\HP Support Framework\Resources\HPBatteryCheck) está assinado com assinatura HP, e quando inicio BatteryTest.exe, ele tenta carregar userenv.dll em seu diretório antes de procurar em %PATH%. Então crio uma userenv.dll falsa e a copio junto com BatteryTest.exe na mesma pasta, então executo BatterTest => BatterTest se torna nosso cliente exe e aciona RunAnalysis para você => contorna a verificação de assinatura do cliente.
  • Copio BatterTest.exe e outros arquivos necessários para %tmp%, para que estejam no volume C => garantindo que o cliente esteja no volume C.
  • Para contornar a verificação do pai, crio um programa que chama BatteryTest.exe e sai imediatamente, para que GetParent retorne nulo!

Agora você precisa encontrar um executável que possa ser o alvo do hardlink. Deve ser um EXE ou DLL que será executado como SYSTEM automaticamente em algum momento, para que quando você o sobrescrever, obtenha privilégios SYSTEM. Vejo que ao chamar RunAnalysis, HPSupportSolutionsFrameworkService inicia muitos processos como SYSTEM. Você pode sobrescrever esses processos com seu próprio executável. No entanto, o serviço verifica as assinaturas desses EXEs antes de iniciá-los, então você não pode criar EXEs falsos, mas recorrer a DLLs carregadas por esses EXEs. Há muitas DLLs já carregadas em algum lugar, e muitas DLLs .NET têm assinatura verificada antes de serem carregadas, então você não pode usá-las. Felizmente, ainda existem algumas DLLs utilizáveis:

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

Tentei modificar hputils64.dll e consegui. Crio um hardlink para hputils64.dll. Ao chamar RunAnalysis, HPSAObjUtil8 altera as permissões de hputils64.dll, então alguns segundos depois Detect_BatteryFailure.exe é iniciado (como LOCAL SYSTEM) e carrega hputils64.dll. Antes de hputils64 ser carregado, você pode sobrescrevê-lo, para que Detect_BatteryFailure.exe carregue sua DLL maliciosa e você finalmente obtenha o direito SYSTEM.

Conclusão

Para escrever o exploit, criei:

  • CreateProcess.exe: chama um processo e sai. Isso é usado para contornar a validação do pai.
  • CreateHardlink.exe: cria hardlink.
  • Userenv.dll: configura coisas para executar o assembly .NET e executar o assembly invader.exe no contexto de BatterTest. Isso é usado para contornar a validação da assinatura do cliente.
  • Invader.exe: chama RunAnalysis que acionará o bug.
  • MalDll.dll: chama notepad. hputils64.dll é sobrescrito com esta DLL.

A seguir estão os passos de exploração em PrivHP4.py:

  1. Copie BatteryTest.exe e outros arquivos necessários para a pasta %tmp%.
  2. Crie um hardlink de C:\ProgramData\Hewlett-Packard\HP Support Framework\Logs\Temp\HPSA\hardlink.xml para C:\Program Files (x86)\HP\Shared\hputils64.dll
  3. Inicie BatteryTest.exe com CreateProcess.exe. CreateProcess.exe terminará imediatamente após iniciar BatterTest.
  4. Aguarde a permissão de C:\Program Files (x86)\HP\Shared\hputils64.dll ser alterada, então sobrescreva-a com MalDll.dll, e depois espere o notepad ser iniciado como SYSTEM!

Para testar o PoC, basta clonar o repositório e executar PrivHP4.py.

Referências

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