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サポートアシスタントにおけるローカル特権昇格

ハードリンクを悪用したHPサポートアシスタントのローカル特権昇格バグ

研究者: BkavのManhNDd

説明

HPサポートアシスタントGUIで、アップデートとメッセージを確認をクリックすると、サービスHPサポートソリューションフレームワークがいくつかのタスクを実行し、HPSAObjUtil8.exe(SYSTEMとして実行)を起動して、C:\ProgramData\Hewlett-Packard\HP Support Framework\Logs\Temp\HPSA内のすべての.xmlファイルのアクセス許可を変更します。詳細には、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);
				}
			}
		}
	}

ユーザーは、C:\ProgramData\Hewlett-Packard\HP Support Framework\Logs\Temp\HPSAフォルダ内に「???.xml」という名前のハードリンクを作成し、それを任意の被害ファイル(読み取りアクセスがあれば十分)にポイントし、HPSAObjUtil8にそのアクセス許可を変更させて、ファイルに対する完全なアクセス許可(読み取り/書き込み/削除)を取得できます。このバグにより、システムファイルに対する完全なアクセス許可を取得でき、システムDLLを上書きしてシステム権限を取得できます。ちなみに、このバグのCVSS 3.0スコアは必要な権限を高に設定しています。これは「なし」であるべきです。なぜなら、私は非管理者ユーザーでこのバグのテストに成功したからです。

悪用方法

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:~
        {
            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;
        }

では、クライアント検証をバイパスしましょう:

  • 署名チェックをバイパスするには、HP署名付きEXEを起動してコードを注入するか、偽のDLLを作成してHP EXEにそれをロードさせる必要があります。私は2番目の方法を選びました。BatteryTest.exe(C:\Program Files (x86)\Hewlett-Packard\HP Support Framework\Resources\HPBatteryCheck内)はHP署名で署名されており、BatteryTest.exeを起動すると、%PATH%を検索する前にそのディレクトリ内のuserenv.dllをロードしようとすることがわかりました。そこで、偽のuserenv.dllを作成し、それをBatteryTest.exeと同じフォルダにコピーして、BatterTestを実行します => BatterTestがクライアントEXEとなり、RunAnalysisをトリガーします => クライアント署名チェックをバイパスします。
  • BatterTest.exeとその他必要なファイルを%tmp%にコピーして、Cドライブにあるようにします => クライアントがCドライブにあることを保証します。
  • 親チェックをバイパスするために、BatteryTest.exeを呼び出してすぐに終了するプログラムを作成し、GetParentがnullを返すようにします!

次に、ハードリンクの対象となる実行可能ファイルを見つける必要があります。それは、後で自動的にSYSTEMとして実行されるEXEまたはDLLであるべきで、上書きするとSYSTEM権限を取得できます。RunAnalysisを呼び出すと、HPSupportSolutionsFrameworkServiceは多くのプロセスをSYSTEMとして起動することがわかりました。これらのプロセスを自分の実行ファイルで上書きできます。しかし、サービスは起動前にそれらのEXEの署名をチェックするため、偽のEXEを作成することはできません。代わりに、それらのEXEによってロードされるDLLに頼ります。既にどこかでロードされている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アセンブリの実行準備を整え、BatterTestのコンテキストでアセンブリinvader.exeを実行する。クライアント署名検証バイパスに使用。
  • 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. CreateProcess.exeを使用してBatteryTest.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
ツールをダウンロード