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

عرض المستودع
41منذ 4 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

تصعيد الصلاحيات المحلية في مساعد HP (HP Support Assistant)

ثغرة تصعيد صلاحيات محلية في مساعد HP عن طريق إساءة استخدام الروابط الصلبة (hard link)

الباحث: ManhNDd من Bkav

الوصف

في واجهة مستخدم مساعد HP (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);
				}
			}
		}
	}

يمكن للمستخدم إنشاء رابط صلب (hardlink) باسم ???.xml في المجلد C:\ProgramData\Hewlett-Packard\HP Support Framework\Logs\Temp\HPSA، وتوجيهه إلى ملف ضحية من اختيارنا (كل ما نحتاجه هو صلاحية قراءة)، ثم السماح لـ HPSAObjUtil8 بتعديل صلاحيات الملف بحيث نحصل على صلاحيات كاملة عليه (قراءة/كتابة/حذف). لذلك تتيح لنا هذه الثغرة الحصول على صلاحيات كاملة على ملفات النظام => يمكننا استبدال DLL للنظام للحصول على صلاحيات النظام. بالمناسبة، درجة CVSS 3.0 للثغرة تحدد الصلاحيات المطلوبة (Privileges Required) كـ عالية (High). يجب أن تكون لا شيء (None)، لأنني اختبرت الثغرة بنجاح على مستخدم غير مدير (non-admin).

الاستغلال

عن طريق عكس هندسة 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.
  • التحقق مما إذا كان العميل الرئيسي (parent)، الجد (grandparent)، الجد الأكبر (great-grandparent)... إلخ من العميل موقّعًا بتوقيع HP أو هو عملية Windows صالحة (في System32، على سبيل المثال). ولكن، إذا أعادت الطريقة GetParent قيمة فارغة (null)، يتوقف التحقق.
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;
        }

دعنا نتحايل على التحقق من هوية العميل:

  • لتجاوز التحقق من التوقيع، يجب عليك تشغيل ملف 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 هو ملف العميل الخاص بنا ويُفعّل RunAnalysis لك => تجاوز التحقق من توقيع العميل.
  • أنسخ BatterTest.exe والملفات الضرورية الأخرى إلى %tmp%، بحيث تكون في محرك C => التأكد من أن العميل في محرك C.
  • لتجاوز التحقق من العميل الرئيسي (parent)، أقوم بإنشاء برنامج يستدعي BatteryTest.exe وينهي فورًا، بحيث تُعيد GetParent قيمة فارغة!

الآن تحتاج إلى إيجاد ملف تنفيذي يمكن أن يكون هدفًا للرابط الصلب (hardlink). يجب أن يكون EXE أو DLL يتم تشغيله تلقائيًا كـ SYSTEM بعد فترة، بحيث عند استبداله تحصل على صلاحيات SYSTEM. أرى أنه عند استدعاء RunAnalysis، تبدأ HPSupportSolutionsFrameworkService العديد من العمليات كـ SYSTEM. يمكنك استبدال هذه العمليات بملفك التنفيذي. ومع ذلك، تتحقق الخدمة من توقيعات هذه الملفات EXE قبل تشغيلها، لذا لا يمكنك إنشاء EXE مزيفة، ولكن يمكنك الاعتماد على DLLs التي تُحمّل بواسطة هذه الملفات EXE. هناك العديد من DLLs التي تم تحميلها بالفعل في مكان ما، والعديد من DLLs الخاصة بـ .NET يتم التحقق من توقيعها قبل التحميل، لذا لا يمكنك استخدامها. لحسن الحظ، لا تزال هناك بعض DLLs قابلة للاستخدام:

  • 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: يستدعي عملية ثم يخرج. يُستخدم لتجاوز التحقق من العميل الرئيسي (parent validation bypass).
  • CreateHardlink.exe: إنشاء رابط صلب.
  • Userenv.dll: إعداد الأشياء لتنفيذ تجميع .NET وتنفيذ التجميع invader.exe في سياق BatterTest. يُستخدم لتجاوز التحقق من توقيع العميل.
  • Invader.exe: استدعاء RunAnalysis الذي سيفعّل الثغرة.
  • MalDll.dll: استدعاء notepad. يتم استبدال 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، ثم انتظار بدء notepad كـ SYSTEM!

لاختبار الإثبات (PoC)، فقط استنسخ المستودع وقم بتشغيل PrivHP4.py.

المراجع

  1. https://support.hp.com/us-en/document/c06388027
  2. http://www.securityfocus.com/bid/108891
تنزيل الأداة