
Локальное повышение привилегий в 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:
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 и инициирует ошибку.
ServiceInterface.Instance.RunAnalysis("en-US", true);
Поэтому вам нужно создать поддельного клиента и вызвать RunAnalysis. Однако служба проверяет своего клиента перед обработкой запроса:
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 или DLL, которые автоматически запускаются от имени SYSTEM в какой-то момент, чтобы при их перезаписи вы получили привилегии SYSTEM. Я вижу, что при вызове RunAnalysis HPSupportSolutionsFrameworkService запускает множество процессов от имени SYSTEM. Вы можете перезаписать эти процессы вашим собственным исполняемым файлом. Однако служба проверяет подписи этих EXE перед их запуском, поэтому вы не можете создавать поддельные EXE, но можете использовать DLL, загружаемые этими EXE. Существует много DLL, уже загруженных где-то, и многие .NET DLL проверяются на подпись перед загрузкой, поэтому вы не можете их использовать. К счастью, все еще есть несколько пригодных DLL:
Я попробовал изменить hputils64.dll и преуспел. Я создал жесткую ссылку на hputils64.dll. При вызове RunAnalysis HPSAObjUtil8 изменяет разрешения hputils64.dll, а через несколько секунд запускается Detect_BatteryFailure.exe (от имени LOCAL SYSTEM) и загружает hputils64.dll. До загрузки hputils64 вы можете перезаписать его, так что Detect_BatteryFailure.exe загрузит вашу вредоносную DLL, и вы наконец получите права SYSTEM.
Для написания эксплойта я создал:
Далее приведены шаги эксплуатации в PrivHP4.py:
Чтобы протестировать PoC, просто клонируйте репозиторий и запустите PrivHP4.py.