
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vfs-install-cwd
クラス: LPE 到達範囲: ローカル
VFS for Git master ab95cf51 (タグ v2.0.26259.1) - Microsoft
Setup.iss の PrepareToInstall は常に ExecWithResult('gvfs.exe', 'service --list-mounted', '', ...) を {cmd} /S /C 経由で、空の WorkingDir で呼び出す。これは管理者が SetupGVFS*.exe を起動したディレクトリを継承する。cmd.exe は CWD を検索してから PATH を検索する。UnmountRepos も同じ非修飾名を使用する。
同じファイル内で安全なパスはすでに修飾されている。sc.exe は {sys}\SC.EXE である。インストール後の再マウントは {app}\gvfs.exe である。初回インストール時には PATH 上に本物の gvfs.exe がまだ存在しないため、署名済みインストーラーの隣に置かれたファイルが優先される。
| ID | CVE 未割当 |
| クラス | LPE (昇格したインストーラーの CWD 検索 / 非修飾実行) |
| 到達範囲 | ローカル (UI:R) |
| CWE | CWE-427, CWE-428 |
| CVSS | High: 7.3 CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:H |
| 製品 | VFS for Git |
| 影響を受けるバージョン | master ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a (タグ v2.0.26259.1)。Windows のみ。 |
| 認証 | ローカル。管理者が SetupGVFS*.exe を起動するディレクトリに gvfs.exe を配置する。 |
| ライセンス | GNU Affero GPL v3.0 |
| ラボ | 127.0.0.1 のみ。how=gadget (ネイティブの SetupGVFS*.exe なし)。 |
CVE-2021-47874 (非引用の binPath) の兄弟であり、シンクは異なる。このピンにおける sc.exe と再マウントパスはすでに修飾されている。
署名済みインストーラーの隣に無害な gvfs.exe を配置する。管理者がそのフォルダからセットアップを起動すると、PrepareToInstall がその配置されたファイルを昇格したインストーラーとして実行する。
| 権限 | メソッド / シンク | 得られるもの | 偵察 / 完全性 / 可用性 | ラボ実証または推測 |
|---|---|---|---|---|
| インストーラーの CWD を継承 | ExecWithResult の空の WorkingDir (Setup.iss ~830) | 検索が起動フォルダから始まる | 検索順序の完全性 | ラボ実証済み。ガジェット working_dir=""、検索 cwd-then-path。 |
PATH より先に CWD から非修飾の gvfs.exe を解決 | cmd.exe /S /C ""gvfs.exe" service --list-mounted > ..." | 配置したファイルが PATH より優先される | 完全性 | ラボ実証済み。prepare-resolved=cwd-plant、解決先 /lab/cwd/gvfs.exe。PATH 上のコピーは使用されなかった。 |
| 昇格したインストーラーとして実行 | ウィットネスファイルの所有者 = ガジェット uid (昇格したセットアップの代用) | 管理者相当のコード実行 | 完全性 | ガジェット uid 上でラボ実証済み。このホストではネイティブの管理者 IL は利用不可。 |
| アンマウント時にも同じ配置が機能 | Exec('gvfs.exe', 'service --unmount-all', '', ...) (Setup.iss ~544) | アンマウント中に配置したファイルが再び実行される | 完全性 | ラボ実証済み。unmount-resolved=cwd-plant。 |
| 配置後もセットアップを継続 | 配置したファイルは終了コード 0 で終了し、カナリアのみを書き込む | セットアップが続行される | インストールの可用性 | ラボ実証済み。ウィットネステキストは VFS-INSTALL-CWD-WITNESS。ペイロードなし。 |
この残存問題に対してクローズ済み: 再マウント {app}\gvfs.exe (remount-resolved=app、remount-plant=no)。引用された {sys}\SC.EXE (sc-resolved=sys)。POSIX の PATH のみの検索 (unix-cwd-search=no)。実際の SetupGVFS*.exe / ProjFS (このホストは macOS のため how=gadget)。リモートの未認証実行。非引用の ImagePath CVE-2021-47874 (binPath はすでに引用済み)。
同じピンの残存問題: vfs-quote-breakout、vfs-mount-dehydrate、vfs-clone-acl、vfs-service-sid、vfs-hook-impersonate。
2026-09-28 のマージ後、VFSForGit master ab95cf51 をピン留めした。スキップリストは CVE-2021-47874 である。Setup.iss はすでに binPath を引用し、{sys}\SC.EXE と {app}\gvfs.exe を修飾している。PrepareToInstall は依然として裸の gvfs.exe を cmd.exe に渡している。
すでに記録済みの誤った道: CVE-2021-47874 の再申請、POSIX の PATH のみの検索を Windows のバグとして扱うこと、再マウントも非修飾であると主張すること。いずれも見せかけである。ネイティブ Windows がなかったため、ラボは ExecWithResult と cmd の CWD-then-PATH 検索を組み合わせたガジェットである。
python3 vfs-install-cwd-Abraxas-Labs.py
または
cd lab
./run.sh
ガジェット HTTP は 127.0.0.1:19680。ウィットネスは VFS-INSTALL-CWD-WITNESS。最終行は how=gadget を使用する。
SUCCESS vfs-install-cwd how=gadget prepare-resolved=cwd-plant prepare-witness=yes remount-resolved=app remount-plant=no unix-cwd-search=no VFS-INSTALL-CWD-WITNESS
存在する場合は ExpandConstant('{app}\gvfs.exe') を使用し、そうでなければ初回インストール時の list-mounted クエリをスキップする。裸の gvfs.exe を cmd.exe に渡してはならない。UnmountRepos も同様に修飾する。
ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3aSetup.iss PrepareToInstall / UnmountRepos / {sys}\SC.EXE / {app}\gvfs.exeImagePathGNU Affero GPL v3.0。LICENSE を参照。ループバックラボのみ。無保証。