🇰🇷 한글 설명
gitoxide 프로젝트의 gix-path 크레이트에서 git 설정 파일 경로를 부정확하게 해석하는 취약점입니다. 특수문자나 비ASCII 문자가 포함된 경로에서 따옴표 제거 로직이 불완전하여, 공격자가 대체 경로를 통해 악의적인 설정을 주입할 수 있습니다.
💡 쉬운 설명
Git 설정 파일의 경로를 읽을 때 이상한 문자가 있는 경로를 제대로 처리하지 못합니다. 이를 이용하여 공격자가 악의적인 설정을 몰래 삽입할 수 있습니다.
🇺🇸 원문 (English)
`gix-path` is a crate of the `gitoxide` project (an implementation of `git` written in Rust) dealing paths and their conversions. Prior to version 0.10.11, `gix-path` runs `git` to find the path of a configuration file associated with the `git` installation, but improperly resolves paths containing unusual or non-ASCII characters, in rare cases enabling a local attacker to inject configuration leading to code execution. Version 0.10.11 contains a patch for the issue.
In `gix_path::env`, the underlying implementation of the `installation_config` and `installation_config_prefix` functions calls `git config -l --show-origin` to find the path of a file to treat as belonging to the `git` installation. Affected versions of `gix-path` do not pass `-z`/`--null` to cause `git` to report literal paths. Instead, to cover the occasional case that `git` outputs a quoted path, they attempt to parse the path by stripping the quotation marks. The problem is that, when a path is quoted, it may change in substantial ways beyond the concatenation of quotation marks. If not reversed, these changes can result in another valid path that is not equivalent to the original.
On a single-user system, it is not possible to exploit this, unless `GIT_CONFIG_SYSTEM` and `GIT_CONFIG_GLOBAL` have been set to unusual values or Git has been installed in an unusual way. Such a scenario is not expected. Exploitation is unlikely even on a multi-user system, though it is plausible in some uncommon configurations or use cases. In general, exploitation is more likely to succeed if users are expected to install `git` themselves, and are likely to do so in predictable locations; locations where `git` is installed, whether due to usernames in their paths or otherwise, contain characters that `git` quotes by default in paths, such as non-English letters and accented letters; a custom `system`-scope configuration file is specified with the `GIT_CONFIG_SYSTEM` environment variable, and its path is in an unusual location or has strangely named components; or a `system`-scope configuration file is absent, empty, or suppressed by means other than `GIT_CONFIG_NOSYSTEM`. Currently, `gix-path` can treat a `global`-scope configuration file as belonging to the installation if no higher scope configuration file is available. This increases the likelihood of exploitation even on a system where `git` is installed system-wide in an ordinary way. However, exploitation is expected to be very difficult even under any combination of those factors.
📍 영향받는 시스템
gitoxide gix-path 0.10.10 이전 버전 (Rust 기반 git 구현)
⚔️ 공격 벡터
비ASCII 문자가 포함된 경로에서 git 설정 파일 경로 해석 오류를 악용하여 GIT_CONFIG_SYSTEM/GIT_CONFIG_GLOBAL 환경변수를 통해 악의적 설정 주입
🛡️ 대응 방법
gix-path를 0.10.11 이상으로 업그레이드하거나 의존하는 gitoxide 및 관련 Rust 패키지 최신 버전으로 업데이트
🔧 검증 코드
0.10.11 이상이면 패치됨. 0.10.10 이하면 취약함
grep 'gix-path' Cargo.lock | grep -oP '0\.\d+\.\d+' | head -1