
VFS for Git ab95cf51 - 높음 - 로컬 - 권한 잔여 - Authenticated Users GENERIC_WRITE 복제
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 | 높음: 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 루트에 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 | 훅 디렉터리가 공격자 쓰기 가능 | 무결성 | 랩 입증. authusers_hooks=yes |
공격자로서 src/.git/hooks 아래에 파일 심기 | VFS-CLONE-ACL-WITNESS 쓰기 | 피해자 소유 훅 디렉터리에 카나리 | 무결성 | 랩 입증. 소유자는 공격자 uid 1001, 텍스트는 witness |
| 다음 git/GVFS 명령에서 피해자로서 심은 훅 실행 | 일회용 클론에서 pre-command / GVFS 로더 덮어쓰기 | 클로너로서 호스트 코드 | 무결성 | 추론. 랩은 카나리 파일만 심었으며, 훅을 실행하지 않았음 |
| 로컬 객체 캐시도 같은 방식으로 쓰기 | LocalCacheResolver.cs 동일 헬퍼 | 캐시 트리가 Auth Users 쓰기 가능 | 무결성 | 추론. 랩은 enlistment 루트만 클론했음 |
| 부정: 소유자 전용 ACL | 0700, Authenticated Users ACE 없음 | 공격자 쓰기 거부 | 닫힘 | 랩 입증 닫힘. 공격자 쓰기는 EACCES |
| World-writable other:: | n/a | POSIX other 쓰기 | 닫힘 | 랩 입증 닫힘. other_write=no |
| 원격 비인증 쓰기 | n/a | 네트워크 쓰기 | 닫힘 | 로컬 두 번째 로그인 |
| 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 루트를 생성합니다. SID는 AuthenticatedUserSid입니다. 이는 생성한 사용자가 아니라 모든 로그온한 사용자입니다.
이미 기록된 잘못된 방향: 이것을 world-writable 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 참조. 루프백 랩 전용. 보증 없음.