Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2019-6329 — Локальное повышение привилегий в HP Support Assistant | Kitploit
Инструменты/GitHubGitHub/manhndd/cve-2019-6329
Повышение привилегийАнализ уязвимостейЭксплуатацияЛатеральное перемещениеПост-эксплуатацияРазработка Полезной НагрузкиЭксплуатация Бинарных Файлов
GitHubmanhndd/cve-2019-6329

CVE-2019-6329

Локальное повышение привилегий в HP Support Assistant

Репозиторий
4164 лет назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Локальное повышение привилегий в HP Support Assistant

Ошибка локального повышения привилегий в HP Support Assistant с помощью жесткой ссылки

Исследователь: ManhNDd из Bkav

Описание

В HP Support Assistant GUI, когда вы нажимаете Check for updates and messages, служба HP Support Solution Framework запускает некоторые задачи, запускает HPSAObjUtil8.exe (выполняется как SYSTEM), который изменяет разрешения всех .xml файлов в C:\ProgramData\Hewlett-Packard\HP Support Framework\Logs\Temp\HPSA. В частности, HPSAObjUtil8.exe предоставляет полный контроль над этими .xml файлами всем пользователям. Ниже приведен уязвимый код в 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);
				}
			}
		}
	}

Пользователь может создать жесткую ссылку с именем ???.xml в папке C:\ProgramData\Hewlett-Packard\HP Support Framework\Logs\Temp\HPSA и указать на целевой файл по нашему выбору (все, что нам нужно — это доступ на чтение), затем позволить HPSAObjUtil8 изменить его разрешения, чтобы мы получили полный контроль над файлом (чтение/запись/удаление). Таким образом, эта ошибка позволяет нам получить полный доступ к системным файлам => вы можете перезаписать системную DLL, чтобы получить привилегии системы. Кстати, оценка CVSS 3.0 данной ошибки устанавливает Privileges Required как High. Это должно быть None, поскольку я успешно протестировал ошибку на пользователе без прав администратора.

Эксплуатация

В результате реверс-инжиниринга HPSF.exe и HPSupportSolutionsFrameworkService.exe я выяснил, что клиент HPSF.exe взаимодействует со службой через интерфейс HP.SupportFramework.ServiceManager.Interfaces.IServiceInterface (определен в HP.SupportFramework.ServiceManager.dll). Если клиент вызывает метод IserviceInterface.RunAnalysis, служба запускает HPSAObjUtil8 и инициирует ошибку.

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

Поэтому вам нужно создать поддельного клиента и вызвать RunAnalysis. Однако служба проверяет своего клиента перед обработкой запроса:

  • Проверяет, подписан ли клиент подписью HP и находится ли на диске C.
  • Проверяет, подписан ли родительский, дедушкин, прадедушкин и т.д. процесс клиента подписью HP или является допустимым процессом Windows (например, в System32). Однако, если метод GetParent возвращает null, проверка останавливается.
root@kitploit:~
internal static bool \u0001(int \u0002)
        {
            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;
        }

Обойдем проверку клиента:

  • Чтобы обойти проверку подписи, вам нужно запустить EXE, подписанный HP, и внедрить в него код, или создать поддельную DLL, которую загрузит HP EXE. Я выбираю второй метод. Я обнаружил, что BatteryTest.exe (в C:\Program Files (x86)\Hewlett-Packard\HP Support Framework\Resources\HPBatteryCheck) подписан подписью HP, и при запуске BatteryTest.exe он пытается загрузить userenv.dll из своей директории перед поиском в %PATH%. Поэтому я создал поддельную userenv.dll, скопировал ее и BatteryTest.exe в одну папку, затем запустил BatterTest => BatterTest становится нашим клиентским exe и запускает RunAnalysis за вас => обход проверки подписи клиента.
  • Я копирую BatterTest.exe и другие необходимые файлы в %tmp%, чтобы они были на диске C => гарантируя, что клиент находится на диске C.
  • Чтобы обойти проверку родительского процесса, я создаю программу, которая запускает BatteryTest.exe и немедленно завершается, так что GetParent возвращает null!

Теперь вам нужно найти исполняемый файл, который может стать целью для жесткой ссылки. Это должен быть EXE или DLL, которые автоматически запускаются от имени SYSTEM в какой-то момент, чтобы при их перезаписи вы получили привилегии SYSTEM. Я вижу, что при вызове RunAnalysis HPSupportSolutionsFrameworkService запускает множество процессов от имени SYSTEM. Вы можете перезаписать эти процессы вашим собственным исполняемым файлом. Однако служба проверяет подписи этих EXE перед их запуском, поэтому вы не можете создавать поддельные EXE, но можете использовать DLL, загружаемые этими EXE. Существует много DLL, уже загруженных где-то, и многие .NET DLL проверяются на подпись перед загрузкой, поэтому вы не можете их использовать. К счастью, все еще есть несколько пригодных DLL:

  • c:\program files (x86)\hp\shared\hputils64.dll, загружается Detect_BatteryFailure.exe (подписан HP).
  • c:\windows\syswow64\rtutils.dll
  • c:\windows\system32\msxml3.dll

Я попробовал изменить hputils64.dll и преуспел. Я создал жесткую ссылку на hputils64.dll. При вызове RunAnalysis HPSAObjUtil8 изменяет разрешения hputils64.dll, а через несколько секунд запускается Detect_BatteryFailure.exe (от имени LOCAL SYSTEM) и загружает hputils64.dll. До загрузки hputils64 вы можете перезаписать его, так что Detect_BatteryFailure.exe загрузит вашу вредоносную DLL, и вы наконец получите права SYSTEM.

Заключение

Для написания эксплойта я создал:

  • CreateProcess.exe: запускает процесс и завершается. Используется для обхода проверки родительского процесса.
  • CreateHardlink.exe: создает жесткую ссылку.
  • Userenv.dll: настраивает среду для выполнения .NET сборки и запускает сборку invader.exe в контексте BatterTest. Используется для обхода проверки подписи клиента.
  • Invader.exe: вызывает RunAnalysis, что запускает ошибку.
  • MalDll.dll: запускает блокнот. hputils64.dll перезаписывается этой DLL.

Далее приведены шаги эксплуатации в PrivHP4.py:

  1. Скопировать BatteryTest.exe и другие необходимые файлы в папку %tmp%.
  2. Создать жесткую ссылку из C:\ProgramData\Hewlett-Packard\HP Support Framework\Logs\Temp\HPSA\hardlink.xml на C:\Program Files (x86)\HP\Shared\hputils64.dll
  3. Запустить BatteryTest.exe с помощью CreateProcess.exe. CreateProcess.exe завершится немедленно после запуска BatterTest.
  4. Дождаться изменения разрешений для C:\Program Files (x86)\HP\Shared\hputils64.dll, затем перезаписать его на MalDll.dll, и просто ждать, пока блокнот запустится от имени SYSTEM!

Чтобы протестировать PoC, просто клонируйте репозиторий и запустите PrivHP4.py.

Ссылки

  1. https://support.hp.com/us-en/document/c06388027
  2. http://www.securityfocus.com/bid/108891
Скачать инструмент