
VFS for Git ab95cf51 - 높은 - 로컬 - LPE - 설치 프로그램 CWD 비정규화 gvfs.exe
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vfs-install-cwd
Class: LPE Reach: Local
VFS for Git master ab95cf51 (tag v2.0.26259.1) - Microsoft
Setup.iss PrepareToInstall는 항상 빈 WorkingDir로 {cmd} /S /C를 통해 ExecWithResult('gvfs.exe', 'service --list-mounted', '', ...)를 호출합니다. 이는 관리자가 SetupGVFS*.exe를 실행한 디렉터리를 상속합니다. cmd.exe는 CWD를 먼저 검색한 다음 PATH를 검색합니다. UnmountRepos도 동일한 비한정 이름을 사용합니다.
같은 파일이 이미 안전한 경로를 한정하고 있습니다. sc.exe는 {sys}\SC.EXE입니다. 설치 후 재마운트는 {app}\gvfs.exe입니다. 최초 설치 시에는 PATH에 실제 gvfs.exe가 아직 없으므로, 서명된 설치 프로그램 옆에 심어둔 파일이 이깁니다.
| ID | 아직 CVE 없음 |
| Class | LPE (상승된 설치 프로그램 CWD 검색 / 비한정 exec) |
| Reach | Local (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 |
| Product | VFS for Git |
| Affected | master ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a (tag v2.0.26259.1). Windows 전용. |
| Auth | 로컬. 관리자가 SetupGVFS*.exe를 실행하는 디렉터리에 gvfs.exe를 심습니다. |
| License | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1 전용. how=gadget (네이티브 SetupGVFS*.exe 없음). |
CVE-2021-47874(따옴표 없는 binPath)의 형제 사례이지만 싱크가 다릅니다. 이 핀에서 sc.exe와 재마운트 경로는 이미 한정되어 있습니다.
서명된 설치 프로그램 옆에 무해한 gvfs.exe를 심습니다. 관리자가 해당 폴더에서 설치 프로그램을 실행하면 PrepareToInstall이 심어둔 파일을 상승된 설치 프로그램 권한으로 실행합니다.
| Privilege | Method / sink | What it grants | Recon / integrity / availability | Lab-proven or inferred |
|---|---|---|---|---|
| 설치 프로그램 CWD 상속 | ExecWithResult 빈 WorkingDir (Setup.iss ~830) | 검색이 실행 폴더에서 시작됨 | 검색 순서의 무결성 | Lab 입증. Gadget working_dir="", 검색 cwd-then-path. |
PATH보다 CWD에서 비한정 gvfs.exe 해석 | cmd.exe /S /C ""gvfs.exe" service --list-mounted > ..." | 심어둔 파일이 PATH를 이김 | 무결성 | Lab 입증. prepare-resolved=cwd-plant, 해석된 경로 /lab/cwd/gvfs.exe. PATH 복사본은 사용되지 않음. |
| 상승된 설치 프로그램으로 실행 | Witness 파일 소유자 = gadget uid (상승된 설치 프로그램의 대역) | 관리자 동등 코드 실행 | 무결성 | gadget uid에서 Lab 입증. 이 호스트에서는 네이티브 관리자 IL을 사용할 수 없음. |
| 언마운트 시 동일한 심기 | Exec('gvfs.exe', 'service --unmount-all', '', ...) (Setup.iss ~544) | 언마운트 중 심어둔 파일이 다시 실행됨 | 무결성 | Lab 입증. unmount-resolved=cwd-plant. |
| 심은 후 설치 계속 | 심은 파일이 0으로 종료하고 canary만 기록 | 설치가 진행됨 | 설치의 가용성 | Lab 입증. Witness 텍스트는 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). 원격 비인증 exec. 따옴표 없는 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가 없어서 Lab은 ExecWithResult와 cmd의 CWD-then-PATH 검색을 gadget으로 구현했습니다.
python3 vfs-install-cwd-Abraxas-Labs.py
또는
cd lab
./run.sh
Gadget HTTP는 127.0.0.1:19680. Witness 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 참조. 루프백 Lab 전용. 보증 없음.