Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2019-6329 — Lokale Privilegienausweitung im HP Support Assistant | Kitploit
Tools/GitHubGitHub/manhndd/cve-2019-6329
Privilege EscalationSchwachstellenanalyseExploitationLaterale BewegungPost-ExploitationPayload-EntwicklungBinary-Exploitation
GitHubmanhndd/cve-2019-6329

CVE-2019-6329

Lokale Privilegienausweitung im HP Support Assistant

Repository anzeigen
41vor 4 JahrenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Lokale Rechteausweitung im HP Support Assistant

Ein Fehler zur lokalen Rechteausweitung im HP Support Assistant durch Missbrauch eines Hardlinks

Forscher: ManhNDd von Bkav

Beschreibung

In der HP Support Assistant GUI führt der Dienst HP Support Solution Framework einige Aufgaben aus, wenn Sie auf Check for updates and messages klicken. Dabei wird HPSAObjUtil8.exe (ausgeführt als SYSTEM) gestartet, das die Berechtigungen aller .xml-Dateien in C:\ProgramData\Hewlett-Packard\HP Support Framework\Logs\Temp\HPSA ändert. Im Detail gewährt HPSAObjUtil8.exe allen Benutzern die vollständige Kontrolle über diese .xml-Dateien. Der verwundbare Code in HPSAObjUtil8 lautet wie folgt:

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);
				}
			}
		}
	}

Ein Benutzer kann im Ordner C:\ProgramData\Hewlett-Packard\HP Support Framework\Logs\Temp\HPSA einen Hardlink mit dem Namen ???.xml erstellen und ihn auf eine Zieldatei unserer Wahl zeigen lassen (wir benötigen lediglich Lesezugriff). Anschließend lässt man HPSAObjUtil8 die Berechtigungen dieser Datei ändern, sodass wir volle Berechtigungen (Lesen/Schreiben/Löschen) über die Datei erhalten. Daher ermöglicht uns dieser Fehler, volle Berechtigungen über Systemdateien zu erlangen => Sie können eine System-DLL überschreiben, um Systemrechte zu erhalten. Übrigens setzt der CVSS-3.0-Score des Fehlers Privileges Required auf High. Dies sollte eigentlich None sein, da ich den Fehler erfolgreich mit einem Nicht-Administrator-Benutzer getestet habe.

Ausnutzung

Durch Reverse Engineering von HPSF.exe und HPSupportSolutionsFrameworkService.exe habe ich herausgefunden, dass der Client HPSF.exe über das Interface HP.SupportFramework.ServiceManager.Interfaces.IServiceInterface (definiert in HP.SupportFramework.ServiceManager.dll) mit dem Dienst kommuniziert. Wenn der Client die Methode IserviceInterface.RunAnalysis aufruft, startet der Dienst HPSAObjUtil8 und löst den Fehler aus.

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

Sie müssen also einen gefälschten Client erstellen und RunAnalysis aufrufen. Der Dienst validiert seinen Client jedoch, bevor er die Anforderung verarbeitet:

  • Überprüfen, ob der Client mit der HP-Signatur signiert ist und sich auf dem C-Laufwerk befindet.
  • Überprüfen, ob der Parent-, Grandparent-, Great-Grandparent-Prozess ... des Clients mit der HP-Signatur signiert ist oder ob es sich um einen gültigen Windows-Prozess handelt (z. B. in System32). Wenn die Methode GetParent jedoch null zurückgibt, stoppt die Prüfung.
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;
        }

Umgehen wir die Client-Validierung:

  • Um die Signaturprüfung zu umgehen, müssen Sie eine HP-signierte EXE starten und Code in sie injizieren oder eine gefälschte DLL erstellen, die von der HP-EXE geladen wird. Ich habe die zweite Methode gewählt. Ich habe herausgefunden, dass BatteryTest.exe (in C:\Program Files (x86)\Hewlett-Packard\HP Support Framework\Resources\HPBatteryCheck) mit der HP-Signatur signiert ist. Wenn ich BatteryTest.exe starte, versucht es, userenv.dll in seinem Verzeichnis zu laden, bevor es in %PATH% sucht. Ich erstelle also eine gefälschte userenv.dll, kopiere sie zusammen mit BatteryTest.exe in denselben Ordner und starte dann BatterTest => BatterTest wird zu unserer Client-EXE und ruft RunAnalysis für uns auf => umgeht die Client-Signaturprüfung.
  • Ich kopiere BatterTest.exe und andere notwendige Dateien in %tmp%, sodass sie sich auf dem C-Laufwerk befinden => dies stellt sicher, dass sich der Client auf dem C-Laufwerk befindet.
  • Um die Parent-Prüfung zu umgehen, erstelle ich ein Programm, das BatteryTest.exe aufruft und sofort beendet, sodass GetParent null zurückgibt!

Nun müssen Sie eine ausführbare Datei finden, die als Ziel für den Hardlink dienen kann. Es sollte eine EXE oder DLL sein, die irgendwann automatisch als SYSTEM ausgeführt wird, sodass Sie beim Überschreiben SYSTEM-Rechte erhalten. Mir ist aufgefallen, dass HPSupportSolutionsFrameworkService beim Aufruf von RunAnalysis viele Prozesse als SYSTEM startet. Sie können diese Prozesse mit Ihrer eigenen ausführbaren Datei überschreiben. Der Dienst prüft jedoch die Signaturen dieser EXEs, bevor er sie startet. Sie können also keine gefälschten EXEs erstellen, sondern müssen auf DLLs zurückgreifen, die von diesen EXEs geladen werden. Es gibt viele DLLs, die bereits irgendwo geladen werden, und viele .NET-DLLs werden vor dem Laden signaturgeprüft, sodass Sie sie nicht verwenden können. Glücklicherweise gibt es noch einige DLLs, die verwendbar sind:

  • c:\program files (x86)\hp\shared\hputils64.dll, geladen von Detect_BatteryFailure.exe (HP-signiert).
  • c:\windows\syswow64\rtutils.dll
  • c:\windows\system32\msxml3.dll

Ich habe versucht, hputils64.dll zu modifizieren, und das ist mir gelungen. Ich erstelle einen Hardlink auf hputils64.dll. Beim Aufruf von RunAnalysis ändert HPSAObjUtil8 die Berechtigungen von hputils64.dll. Einige Sekunden später startet Detect_BatteryFailure.exe (als LOCAL SYSTEM) und lädt hputils64.dll. Bevor hputils64 geladen wird, können Sie die Datei überschreiben, sodass Detect_BatteryFailure.exe Ihre bösartige DLL lädt und Sie schließlich SYSTEM-Rechte erhalten.

Fazit

Für den Exploit habe ich Folgendes erstellt:

  • CreateProcess.exe: ruft einen Prozess auf und beendet sich. Dies wird zur Umgehung der Parent-Validierung verwendet.
  • CreateHardlink.exe: erstellt einen Hardlink.
  • Userenv.dll: richtet die Dinge für die Ausführung der .NET-Assembly ein und führt die Assembly invader.exe im Kontext von BatterTest aus. Dies wird zur Umgehung der Client-Signaturvalidierung verwendet.
  • Invader.exe: ruft RunAnalysis auf, was den Fehler auslöst.
  • MalDll.dll: ruft notepad auf. hputils64.dll wird mit dieser DLL überschrieben.

Im Folgenden sind die Schritte zur Ausnutzung in PrivHP4.py:

  1. Kopieren Sie BatteryTest.exe und andere notwendige Dateien in den Ordner %tmp%.
  2. Erstellen Sie einen Hardlink von C:\ProgramData\Hewlett-Packard\HP Support Framework\Logs\Temp\HPSA\hardlink.xml auf C:\Program Files (x86)\HP\Shared\hputils64.dll.
  3. Starten Sie BatteryTest.exe mit CreateProcess.exe. CreateProcess.exe wird sofort nach dem Start von BatterTest beendet.
  4. Warten Sie, bis die Berechtigung von C:\Program Files (x86)\HP\Shared\hputils64.dll geändert wurde, überschreiben Sie sie dann mit MalDll.dll und warten Sie einfach, bis notepad als SYSTEM startet!

Um den PoC zu testen, klonen Sie einfach das Repository und führen Sie PrivHP4.py aus.

Referenzen

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