
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vfs-clone-acl
分類: 権限の残留 到達範囲: ローカル
VFS for Git master ab95cf51 (タグ v2.0.26259.1) - Microsoft
CloneVerb は TryCreateDirectoryAccessibleByAuthUsers を使用して PrimaryEnlistmentRoot を作成します。このヘルパーは NT AUTHORITY\Authenticated Users に GENERIC_READ|WRITE|EXECUTE|DELETE を ContainerInherit|ObjectInherit 付きで追加します。コメントには同じユーザーに対する昇格アクセスと非昇格アクセスについて書かれています。SID はすべての認証済みユーザーです。
被害者が gvfs clone を実行した後、別のログオンユーザーがそのツリー、特に src\.git\hooks に書き込むことができます。リポジトリは被害者の所有のままであるため、git の safe.directory はブロックしません。
| ID | CVE 未割り当て |
| 分類 | 権限の残留 (過剰に許可されたディレクトリ ACL / フックの設置) |
| 到達範囲 | ローカル |
| CWE | CWE-732, CWE-276 |
| CVSS | High: 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.26259.1)。Windows のみ。 |
| 認証 | ローカル。被害者が gvfs clone を実行。攻撃者は別の認証済みユーザー。 |
| ライセンス | GNU Affero GPL v3.0 |
| ラボ | 127.0.0.1 のみ。how=gadget (ネイティブ Windows / ProjFS なし)。 |
これは、次の git/GVFS フック時にクローン実行者としてのローカルホスト RCE です。SYSTEM シェルではありません。ラボではカナリアファイルを設置しただけで、フックは実行していません。
被害者が GVFS でクローン済み。攻撃者は別のログオン済み Authenticated Users プリンシパル。
| 権限 | メソッド / シンク | 付与されるもの | 偵察 / 完全性 / 可用性 | ラボで実証済みか推測か |
|---|---|---|---|---|
| enlistment root 上の GENERIC_WRITE を継承 | CloneVerb が TryCreateDirectoryAccessibleByAuthUsers(PrimaryEnlistmentRoot) を呼び出す | すべての認証済みユーザーがツリーに書き込める | 完全性 | ガジェット上でラボ実証済み。icacls 行は NT AUTHORITY\Authenticated Users:(OI)(CI)(GR,GW,GE,D)、SID S-1-5-11、マスク 0xe0010000 |
その ACE を .git/hooks を含む子に継承 | ContainerInherit | ObjectInherit | hooks ディレクトリが攻撃者書き込み可能 | 完全性 | ラボ実証済み。authusers_hooks=yes |
攻撃者として src/.git/hooks 配下にファイルを設置 | VFS-CLONE-ACL-WITNESS を書き込む | 被害者所有の hooks ディレクトリ内のカナリア | 完全性 | ラボ実証済み。所有者は攻撃者 uid 1001、テキストは witness |
| 次の git/GVFS コマンド時に被害者として設置されたフックを実行 | 使い捨てクローンで pre-command / GVFS ローダーを上書き | クローン実行者としてのホストコード | 完全性 | 推測。ラボではカナリアファイルを設置しただけで、フックは実行していない |
| ローカルオブジェクトキャッシュも同様に書き込む | LocalCacheResolver.cs 同じヘルパー | キャッシュツリーが Auth Users 書き込み可能 | 完全性 | 推測。ラボでは enlistment root のみをクローン |
| 否定: 所有者のみの ACL | 0700、Authenticated Users ACE なし | 攻撃者の書き込みが拒否される | クローズ | ラボ実証済み クローズ。攻撃者の書き込みは EACCES |
| 全ユーザー書き込み可能な other:: | n/a | POSIX other 書き込み | クローズ | ラボ実証済み クローズ。other_write=no |
| リモート未認証書き込み | n/a | ネットワーク書き込み | クローズ | ローカルの2回目のログイン |
| SYSTEM シェル | n/a | LocalSystem | クローズ | 次のフックはクローン実行者として実行され、LocalSystem ではない |
同じピンの残存: vfs-quote-breakout, vfs-mount-dehydrate, vfs-service-sid, vfs-hook-impersonate, vfs-install-cwd。
2026-09-28 のマージ後に VFSForGit master ab95cf51 をピン留めしました。Clone は、コメントが UAC 分割トークンについて述べているヘルパーで enlistment root を作成します。SID は AuthenticatedUserSid です。これは作成ユーザーではなく、すべてのログオンユーザーです。
すでに記録済みの誤った方向: これを全ユーザー書き込み可能な other:: として扱うこと (そうではない。POSIX other に書き込みはなかった)、SYSTEM の主張、ラボでの設置フックの実行。すべて芝居です。ネイティブ Windows がなかったため、ラボはそれらの関数を POSIX 名前付きグループ ACL として再現したガジェットです。
python3 vfs-clone-acl-Abraxas-Labs.py
または
cd lab
./run.sh
ガジェット HTTP は 127.0.0.1:19650。TryCreateDirectoryAccessibleByAuthUsers をコピーし、同じ ACE を POSIX 名前付きグループ ACL (authusers) として適用します。最終行は how=gadget を使用します。
SUCCESS vfs-clone-acl how=gadget auth-users-write=yes inherit=OI-CI attacker-hook-write=yes owner-only=eacces VFS-CLONE-ACL-WITNESS
AuthenticatedUserSid ではなく、作成ユーザー (およびオプションで UAC 用の Administrators) に付与します。icacls での等価な指定は所有者のみに対する (OI)(CI)(M) です。
ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3aCloneVerb.csWindowsFileSystem.cs TryCreateDirectoryAccessibleByAuthUsersLocalCacheResolver.csGNU Affero GPL v3.0。LICENSE を参照。ループバックラボのみ。無保証。