
HP Support Assistant में स्थानीय विशेषाधिकार वृद्धि
हार्ड लिंक का दुरुपयोग करके HP Support Assistant में एक स्थानीय विशेषाधिकार वृद्धि बग
शोधकर्ता: Bkav के ManhNDd
HP Support Assistant GUI में, जब आप Check for updates and messages पर क्लिक करते हैं, तो सेवा HP Support Solution Framework कुछ कार्य चलाएगी, और HPSAObjUtil8.exe प्रारंभ करेगी (SYSTEM के रूप में चलता है) जो C:\ProgramData\Hewlett-Packard\HP Support Framework\Logs\Temp\HPSA फ़ोल्डर में सभी .xml फ़ाइलों की अनुमति बदलती है। विस्तार से, 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);
}
}
}
}
एक उपयोगकर्ता फ़ोल्डर C:\ProgramData\Hewlett-Packard\HP Support Framework\Logs\Temp\HPSA में ???.xml नाम के साथ एक हार्ड लिंक बना सकता है, और इसे हमारी पसंद की एक पीड़ित फ़ाइल की ओर इंगित कर सकता है (हमें केवल पढ़ने की पहुँच चाहिए), फिर 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 को कॉल करना होगा। हालांकि, सेवा अनुरोध को संसाधित करने से पहले अपने क्लाइंट को मान्य करती है:
{
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 नहीं बना सकते, लेकिन उन EXE द्वारा लोड की गई DLL का सहारा ले सकते हैं। कई 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 चलाएँ।