gitoxy는 Rust로 작성된 git의 구현입니다. 0.21.1 이전에는 gitoxy로 체크아웃할 때 사용자가 쓰기 권한을 갖고 있는 기존 디렉터리에 공격자가 제어하는 심볼릭 링크를 쓰는 것을 허용하는 악성 트리가 구성될 수 있습니다. 체크아웃 중에 모든 심볼릭 링크 인덱스 항목은 단일 공유 gix_worktree::Stack을 사용하여 일반 파일 이후에 연기되고 생성됩니다. 내부적으로는 gix_fs::Stack을 사용합니다. gix_fs::Stack::make_relative_path_current()는 검증된 경로 접두사를 캐시합니다.
gitoxy는 Rust로 작성된 git의 구현입니다. 0.21.1 이전에는 gitoxy로 체크아웃할 때 사용자가 쓰기 권한을 갖고 있는 기존 디렉터리에 공격자가 제어하는 심볼릭 링크를 쓰는 것을 허용하는 악성 트리가 구성될 수 있습니다. 체크아웃 중에 모든 심볼릭 링크 인덱스 항목은 단일 공유 gix_worktree::Stack을 사용하여 일반 파일 이후에 연기되고 생성됩니다. 내부적으로는 gix_fs::Stack을 사용합니다. gix_fs::Stack::make_relative_path_current()는 검증된 경로 접두사를 캐시합니다. 이전에 처리된 리프 구성 요소가 다음 경로의 선행 구성 요소와 정확히 일치하는 경우 gix-fs/src/stack.rs의 리프에서 디렉터리로의 전환은 Delegate.push_directory()만 호출하고, 결코 Delegate.push()를 호출하지 않습니다. gix_worktree::stack::delegate::StackDelegate에서 상태 멤버가 State::CreateDirectoryAndAttributesStack이면 Attributes::push_directory()는 속성(복제 사례의 경우 ODB에서)만 로드하고 다른 검사는 수행하지 않습니다. 디스크 상의 Symlink_metadata() 검사 및 충돌 시 링크 해제는 StackDelegate::push()의 create_leading_directory() 호출에 적용되므로 캐시된 접두사에 대해 우회됩니다. 최종 심볼릭 링크는 상위 디렉터리의 심볼릭 링크를 따르는 일반 std::os::unix::fs::symlink를 사용하여 생성됩니다. 따라서 이를 활용하는 중복된 심볼릭 링크와 디렉터리 항목이 있는 트리를 제공하는 것이 가능합니다. 이 취약점은 0.21.1에서 수정되었습니다.
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 78.00 |
| 악용 신호(PoC 존재) | ×1.20 |
| VPI | 93.60 |
VPI 공식 vpi-v1 기준
| 소스 | CVSS 버전 | 기본 점수 | 심각도 | 벡터 문자열 | 평가일 |
|---|---|---|---|---|---|
| NVDNIST | 3.1 | 7.8 | HIGH | CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H | 2026. 05. 14. |
| OSV3rd | 3.1 | 7.8 |
| CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H |
| 2026. 05. 13. |