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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
vfs-mount-dehydrate — Git用VFS ab95cf51 - 高 - ローカル - 権限の残存 - ユーザーがパイプをマウントして脱水/アンマウント | Kitploit
ツール/GitHubGitHub/abraxas/vfs-mount-dehydrate
特権昇格脆弱性分析エクスプロイト
GitHubabraxas/vfs-mount-dehydrate

vfs-mount-dehydrate

Git用VFS ab95cf51 - 高 - ローカル - 権限の残存 - ユーザーがパイプをマウントして脱水/アンマウント

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

人気

すべて見る →

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

すべてのツールを探索

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

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

Abraxas Labs - vfs-mount-dehydrate

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

vfs-mount-dehydrate

クラス: 特権の残留 到達範囲: ローカル

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

CreatePipeByName は、enlistment ごとのマウントパイプ上で BUILTIN\Users に ReadWrite | CreateNewInstance を付与する。所有者 SID のチェックも ImpersonateNamedPipeClient も存在しない。HandleDehydrateFolders は攻撃者のフォルダ名を Path.Combine し、ProcessStartInfo.Arguments 経由で git に渡す。CLI の dehydrate パスは IsFolderValid を実行する。マウントハンドラは実行しない。

Users 内で \\.\pipe\GVFS_<ENLISTMENT> を推測できる者は誰でも、ProjFS をアンマウントし、マウントユーザーとしてディレクトリを移動し、git reset HEAD --hard を強制できる。

IDCVE 未割当
クラス特権の残留 (名前付きパイプ ACL) / パストラバーサル / 引数インジェクション
到達範囲ローカル
CWECWE-284, CWE-22, CWE-88
CVSSHigh: 7.8 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
製品VFS for Git
影響を受けるバージョンmaster ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a; インストーラタグ v2.0.26229.1 / v2.0.26259.1。Windows のみ。
認証ローカル。被害者にマウントがある間の任意の BUILTIN\Users プリンシパル
ライセンスGNU Affero GPL v3.0
ラボ127.0.0.1 のみ。how=gadget (Windows VM / 実 ProjFS なし)。

パイププロトコル: UTF-8 の Header または Header|body、バイト 0x03 で終端。パイプ名は GVFS_ + 大文字化された enlistment ルートで、: は _ に置換される (例 C:\Repos\Foo -> \\.\pipe\GVFS_C_\REPOS\FOO)。

攻撃者ができること

被害者は既知のルートで gvfs mount を実行している。攻撃者は同じマシン上の別の Users プリンシパルである。被害者としての完全性と可用性。SYSTEM ではない。それ自体ではシェルではない。

特権メソッド / シンク付与されるもの偵察 / 完全性 / 可用性ラボ実証済みか推測か
被害者のマウントパイプに接続CreatePipeByName ACL BuiltinUsers ReadWrite | CreateNewInstance; 所有者チェックなしマウント IPC と対話パイプの偵察ラボ実証済み (gadget ACL)。攻撃者 SID が受け入れられる; 所有者のみモードは接続拒否を返す
enlistment パス、キャッシュパス、RepoUrl を読み取るGetStatus残留 #1 / #4 に使うルートを漏洩偵察ラボ実証済み。ステータス JSON に RepoUrl と GVFS_C_\REPOS\FOO が含まれていた
ProjFS をアンマウントし gvfs.mount を終了メッセージ Unmountenlistment を停止可用性ラボ実証済み。Ack の後に Complete を返信; マウント状態は Unmounted
パース失敗時にアンマウント空ボディの ReleaseLock -> RequestData == null -> UnmountAndStopWorkingDirectoryCallbacks + Environment.Exit同じアンマウントに加えてプロセス終了可用性ラボ実証済み。空の ReleaseLock| でアンマウントされた
被害者の作業ツリーを破棄Dehydrate|{"Folders":"--hard",...}。ソースディレクトリが存在しなくても movedFolders.Add。Reset("HEAD", "\"--hard\" ") はクォート除去後に git reset HEAD --hard になるダーティな追跡ファイルを破壊完全性 / 可用性ラボ実証済み。ダーティな追跡ファイルが witness 文字列を失った
被害者としてフォルダを作業ツリー外へ移動Path.Combine(WorkingDirectoryBackingRoot, folder) + MoveDirectory で BackupFolderPath へ作業ツリーフォルダを窃取 / 移転完全性ラボ実証済み。keepme が src から消え、攻撃者のバックアップパスの下に現れた
.. をトラバース (CLI の IsFolderValid は使われない)同じ Combine; ..\secretマウントユーザーが書き込める兄弟を移動完全性ラボ実証済み。兄弟の secret が攻撃者のバックアップパスの下に着地した。IsFolderValid を適用するとブロックされた
他の被害者が書き込めるディレクトリを窃取または破壊enlistment 外に解決される ..\ チェーンを使った同じ移動マウントユーザーとしてのより広範な移動完全性Combine からの推測。このラボは使い捨てツリーのみを使用
被害者としてのコード実行このパイプ攻撃者イメージのプロセス生成完全性クローズ。この残留での攻撃者イメージのプロセス生成はなし (vfs-service-sid と vfs-hook-impersonate を参照)
SYSTEMマウント IPCLocalSystem完全性クローズ。マウントは enlistment ユーザーとして実行される

--hard は .. パスではない。CLI の IsFolderValid は依然としてこれを許可する。修正ではオプション風のフォルダ名も拒否する必要がある。

同じピンでの残留: vfs-quote-breakout, vfs-clone-acl, vfs-service-sid, vfs-hook-impersonate, vfs-install-cwd。

発見の経緯

2026-09-28 のマージ後に VFSForGit master ab95cf51 をピン留めした。サービスパイプと enlistment ごとのマウントパイプは CreatePipeByName を共有している。CLI の dehydrate はフォルダを検証する。マウントハンドラは検証しない。

すでに記録済みの誤った道: --hard をパストラバーサルとして扱うこと (これはクォート除去後の引数インジェクションである); SYSTEM の主張; リバースシェル。すべて見せかけである。ネイティブ Windows がなかったため、ラボはこれらの関数の gadget と使い捨ての git ツリーで構成されている。

ラボ

python3 vfs-mount-dehydrate-Abraxas-Labs.py

または

cd lab
./run.sh

127.0.0.1:19640 でパイプメッセージ形式を話す gadget HTTP。コンテナ内の使い捨て git ツリー。リバースシェルなし。実際のプロファイルパスなし。最終行は how=gadget を使用。

SUCCESS vfs-mount-dehydrate how=gadget unmount=yes reset-hard=yes dirty-gone=yes move-inside=yes move-dotdot=yes pipe-acl=users-no-owner is-folder-valid-not-on-pipe=yes VFS-MOUNT-DEHYDRATE-WITNESS

修正

CreatePipeByName を enlistment 所有者 SID と LocalSystem に制限する。Users に対する CreateNewInstance を削除する。クライアントを偽装し、所有者を要求する。HandleDehydrateFolders で IsFolderValid を複製し、git オプションに見える名前を拒否する。ReleaseLock のパース失敗をプロセス終了として扱わない。

参考文献

  • github.com/microsoft/VFSForGit master ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a
  • WindowsPlatform.cs CreatePipeByName
  • InProcessMount.cs dehydrate / unmount / ReleaseLock
  • 対比 DehydrateVerb.cs IsFolderValid
  • CWE-284 · CWE-22 · CWE-88

ライセンス

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

ツールをダウンロード