Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
vfs-mount-dehydrate — VFS for Git ab95cf51 - 높음 - 로컬 - 권한 잔여 - 사용자 마운트 파이프 dehydrate/unmount | Kitploit
도구/GitHubGitHub/abraxas/vfs-mount-dehydrate
Privilege EscalationVulnerability AnalysisExploitation
GitHubabraxas/vfs-mount-dehydrate

vfs-mount-dehydrate

VFS for Git ab95cf51 - 높음 - 로컬 - 권한 잔여 - 사용자 마운트 파이프 dehydrate/unmount

저장소 보기
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

enlistment별 마운트 파이프의 CreatePipeByName은 BUILTIN\Users에게 ReadWrite | CreateNewInstance를 부여한다. 소유자 SID 검사도 없고 ImpersonateNamedPipeClient도 없다. HandleDehydrateFolders는 공격자가 제어하는 폴더 이름을 Path.Combine하고 ProcessStartInfo.Arguments를 통해 git에 전달한다. CLI dehydrate 경로는 IsFolderValid를 실행한다. 마운트 핸들러는 실행하지 않는다.

\\.\pipe\GVFS_<ENLISTMENT>를 추측할 수 있는 Users 그룹의 누구든 ProjFS를 언마운트하고, 마운트 사용자 권한으로 디렉터리를 이동시키고, git reset HEAD --hard를 강제할 수 있다.

ID아직 CVE 없음
분류권한 잔여물 (named-pipe 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에 사용되는 루트 유출정찰랩 입증. Status 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 참조. 루프백 랩 전용. 보증 없음.

도구 다운로드