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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
vfs-service-sid — VFS for Git ab95cf51 - 中 - ローカル - 権限の残留 - サービスパイプがJSON OwnerSIDを信頼する | Kitploit
ツール/GitHubGitHub/abraxas/vfs-service-sid
認証と認可特権昇格脆弱性分析エクスプロイトペネトレーションテスト設定ミスラボと実践
GitHubabraxas/vfs-service-sid

vfs-service-sid

VFS for Git ab95cf51 - 中 - ローカル - 権限の残留 - サービスパイプがJSON OwnerSIDを信頼する

リポジトリを見る
54日前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

Abraxas Labs - vfs-service-sid

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  vfs-service-sid

vfs-service-sid

クラス: 権限の取り残し 到達範囲: ローカル

VFS for Git master ab95cf51 (タグ v2.0.26259.1) - Microsoft

GVFS.Service は LocalSystem として実行される。WindowsPlatform.CreatePipeByName は GVFS.Service.pipe に対して BUILTIN\Users に ReadWrite | CreateNewInstance を付与する。RegisterRepoHandler.Run は JSON の OwnerSID をそのまま保存する。ImpersonateNamedPipeClient を呼び出すものは何もない。

任意の Users プリンシパルが、被害者の SID の下に攻撃者のパスを登録できる。SessionLogon 時にサービスは CreateProcessAsUser で gvfs mount <攻撃者のパス> を被害者として実行する。子プロセスは NT AUTHORITY\SYSTEM ではない。

IDCVE はまだなし
クラス権限の取り残し (認可の欠如 / クロスユーザー実行)
到達範囲ローカル
CWECWE-862, CWE-284
CVSSMedium: 6.6 CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N
製品VFS for Git
影響を受けるmaster ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a; GitHub タグ v2.0.26229.1 / v2.0.26259.1。Windows のみ。
認証ローカル。任意の BUILTIN\Users プリンシパル。自動マウントには被害者のログオンが必要。
ライセンスGNU Affero GPL v3.0
ラボ127.0.0.1 のみ。how=gadget (実際の Windows GVFS.Service はなし)。

Git 2.35+ の dubious-ownership により、攻撃者が所有するツリー内で git が失敗する可能性がある。それでもプロセスは被害者として起動する。パスが被害者所有だが攻撃者が書き込み可能な場合 (vfs-clone-acl)、mount git、credential.helper、フックはそのユーザーとして実行される。

攻撃者ができること

サービスがインストールされているマシン上の任意の BUILTIN\Users プリンシパル。\\.\pipe\GVFS.Service.pipe に接続する。追加の権限は不要。

権限メソッド / シンク付与されるもの偵察 / 完全性 / 可用性ラボ実証済みまたは推測
すべてのアクティブなエンリストメントルートを列挙SID チェックなしの GetActiveRepoListRequest (GetActiveReposForUser ではなく TryGetActiveRepos)取り残し #2 のパイプ名オラクルとして使われるパス偵察ラボ実証済み。ガジェットが /lab/repos/victim を列挙
被害者のエンリストメントを非アクティブ化して自動マウントさせないSID チェックなしの UnregisterRepoRequest {EnlistmentRoot} (TryDeactivateRepo)被害者のリポジトリがマウントされないままになる可用性ラボ実証済み。アクティブリストから被害者の行が消えた
被害者 SID の下に攻撃者のパスを永続化RegisterRepoRequest JSON EnlistmentRoot + OwnerSID; TryRegisterRepo が両方を保存レジストリ行 攻撃者パス + 被害者 SID完全性ラボ実証済み。レジストリ行 /lab/repos/attacker + S-1-5-21-1000-2000-3000-1001
ログオン時に被害者として GVFS.exe mount <攻撃者のパス> を起動OnSessionChange SessionLogon -> AutoMountRepos(userId) -> TryRunAs / CreateProcessAsUserログオンユーザーとしてのクロスユーザープロセス生成完全性ガジェットでラボ実証済み。親 GVFS.Service を生成、argv mount /lab/repos/attacker、uid 1002 victim、witness 書き込み済み
NT AUTHORITY\SYSTEM として実行同じ自動マウントLocalSystem の子プロセス完全性クローズ。子の whoami は被害者であり SYSTEM ではない (child-not-system=yes)
攻撃者が所有するツリー内で被害者として Git / フック / credential.helperプロセス生成は依然として発生; git 2.35+ の safe.directory は失敗する可能性ツリーが被害者所有だが攻撃者が書き込み可能な場合、被害者としてのフック RCE完全性推測。ラボは Microsoft git を実行していない。フック RCE にはパスを被害者所有だが攻撃者が書き込み可能としてバインドする

このピンでクローズ: リモートの未認証アクセス (名前付きパイプはローカル)。SYSTEM シェル。デフォルトのパイプ ACL は依然として Users を許可する; クライアント SID をバインドするパッチ済み register (ガジェット X-Patched: 1) は被害者のために攻撃者パスを自動マウントしない。

同じピンの取り残し: vfs-quote-breakout, vfs-mount-dehydrate, vfs-clone-acl, vfs-hook-impersonate, vfs-install-cwd。

発見の経緯

2026-09-28 のマージ後に VFSForGit master ab95cf51 をピン留めした。サービスのパイプ ACL は Users ReadWrite。Register は JSON OwnerSID を保存する。SessionLogon はその SID として自動マウントする。パイプクライアントを偽装するものは何もない。

すでに記録済みの誤った道: これを SYSTEM シェルと呼ぶこと (自動マウントはログオントークンの CreateProcessAsUser); git safe.directory を IPC の認可として扱うこと; リバースシェル。茶番。ネイティブ Windows がなかったため、ラボはピンハンドラのガジェットと Unix TCP オラクルである。

ラボ

python3 vfs-service-sid-Abraxas-Labs.py

または

cd lab
./run.sh

ガジェット HTTP は 127.0.0.1:19660。Witness VFS-SERVICE-SID-WITNESS。最終行は how=gadget を使用。

SUCCESS vfs-service-sid how=gadget register-forged-sid=yes automount-as-victim=yes child-not-system=yes VFS-SERVICE-SID-WITNESS

修正

名前付きパイプクライアントを偽装する (ImpersonateNamedPipeClient / NamedPipeServerStream.RunAsClient)。JSON OwnerSID を無視する; TryRegisterRepo をクライアント SID にバインドする。CreatePipeByName を対話ユーザーと LocalSystem に制限する (BuiltinUsersSid の ReadWrite / CreateNewInstance を削除)。GetActiveRepoList はそのクライアントのリポジトリのみを返すべきである。UnregisterRepo は同じ SID 一致を要求すべきである。

参考文献

  • github.com/microsoft/VFSForGit master ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a
  • WindowsPlatform.cs Users ACL と {serviceName}.pipe
  • RegisterRepoHandler.cs
  • NamedPipeMessages.cs クライアント提供の SID フィールド
  • RepoRegistry.cs 永続化と AutoMountRepos
  • GVFSMountProcess.cs TryRunAs(..., "mount", repoRoot, ...)
  • CWE-862 · CWE-284

ライセンス

GNU Affero GPL v3.0。LICENSE を参照。ループバックラボのみ。無保証。

ツールをダウンロード