AI 코드 어시스턴트는 Git의 core.fsmonitor 기능을 악용하는 악성 .git/config 항목에 의해 탈취될 수 있습니다. 이를 통해 신뢰할 수 없는 저장소가 어시스턴트가 파일을 스캔하는 즉시 개발자의 머신에서 명령어를 실행할 수 있게 됩니다.
이 결함은 Claude Code, Cursor, OpenAI Codex, Goose, Qwen Code, Grok Build, Hermes 등 여러 인기 있는 에이전트에서 발견되었습니다. 패치가 완료된 에이전트에서는 더 이상 이 공격이 작동하지 않지만, 나머지 에이전트들은 여전히 취약한 상태로 남아 있습니다. 추가적인 클릭이나 프롬프트가 필요하지 않으며, 악성 코드는 AI 에이전트가 제공할 수 있는 어떤 샌드박스 외부에서도 사용자의 권한으로 실행됩니다.
공격이 개발자에게 도달하는 방식
- 계약업체가 프로젝트를 압축하여 이메일로 보냅니다.
- 팀원이 네트워크 드라이브에 폴더를 공유합니다.
- 코드베이스가 담긴 USB 스틱을 전달받습니다.
각 경우 모두 저장소는 이미 .git 폴더를 포함한 디렉토리 형태로 전달됩니다. AI 어시스턴트가 폴더를 열면 일반적으로 코드의 상태를 파악하기 위해 백그라운드에서 git status를 실행합니다. Git은 core.fsmonitor 설정을 통해 이 작업을 가속화하는데, 이 설정은 파일 시스템의 변경 사항을 감시하기 위해 외부 프로그램을 호출하도록 Git에 지시합니다. 만약 저장소의 .git/config 파일에 core.fsmonitor를 위한 악성 명령어가 정의되어 있다면, Git은 사용자에게 묻지 않고 자동으로 이를 실행합니다.
명령어가 Git 자체에 의해 실행되므로 사용자의 권한을 상속받으며, AI 도구가 설정한 샌드박스를 우회합니다. 이 공격은 일반적인 git clone, git fetch 또는 git pull 과정 중에는 발생하지 않으며, .git 메타데이터가 이미 포함된 상태로 저장소가 압축 해제될 때만 활성화됩니다.
이 문제가 중요한 이유
개발자들은 코드 완성 제안, 리팩토링 또는 전체 모듈 생성을 위해 AI 어시스턴트에 점점 더 많이 의존하고 있습니다. 이러한 도구들은 프로젝트의 파일 트리를 빠르게 파악해야 하므로 Git 명령어를 조용히 호출합니다. 만약 악성 저장소가 그 순간 코드를 실행할 수 있다면, 공격자는 눈에 보이는 경고 없이 개발자의 워크스테이션에 발판을 마련할 수 있습니다. 잠재적인 페이로드는 자격 증명 탈취부터 지속적인 백도어 설치에 이르기까지 다양하며, 이 모든 과정이 사용자가 AI 도우미로 코드를 단순히 "확인"하고 있다고 믿는 사이에 일어납니다.
오염된 저장소 탐지하기
어시스턴트에게 저장소를 넘기기 전에 다음을 실행하십시오:
git config --get core.fsmonitor
출력값이 비어 있지 않다면 프로그램이 자동으로 실행되도록 설정되어 있다는 의미입니다. 더 광범위하게 조사하려면 의심스러운 Git 설정을 나열해 보십시오:
git config --local --list | grep -Ei 'fsmonitor|hooksPath|sshCommand|pager|editor|filter\.'
직접 추가하지 않은 항목을 발견하면 다음 명령어로 삭제하십시오:
git config --local --unset core.fsmonitor
git config --global core.fsmonitor false를 설정하는 것이 사용자를 보호하지 않는다는 점에 유의하십시오. 로컬 저장소 설정은 항상 글로벌 설정을 우선하므로, 악성 저장소는 글로벌 규칙을 간단히 무시할 수 있습니다.
현재 패치 현황
- Claude Code – 패치됨 (fsmonitor)
- Cursor – 패치됨
- OpenAI Codex – 패치됨
- Goose – 패치됨
- Qwen Code – 패치되지 않음
- Grok Build – 패치되지 않음
- Hermes – 패치되지 않음
패치되지 않은 에이전트를 사용하는 개발자는 도구를 교체하거나 더 엄격한 로컬 Git 정책을 적용하기 전까지, 새로 들어오는 모든 저장소를 잠재적으로 위험한 것으로 간주해야 합니다.
Git 커뮤니티의 반론
Git의 core.fsmonitor는 버그가 아니라 정당한 성능 향상 기능입니다. 유지 관리자들은 Git 명령어를 호출하기 전에 저장소 내용을 검증할 책임이 호출자에게 있다고 주장합니다. 이 기능을 전역적으로 비활성화하는 것은 간단한 완화 방법이지만, 언급했듯이 로컬 설정이 해당 보호 조치를 무력화할 수 있습니다. 현재 더 넓은 논의는 AI 어시스턴트가 모든 외부 Git 호출을 샌드박스화해야 하는지, 아니면 사용자 정의 fsmonitor 훅이 포함된 저장소의 처리를 거부해야 하는지에 집중되어 있습니다.
향후 주목해야 할 사항
- 패치되지 않은 AI 에이전트의 업데이트 — 특히 Git 호출의 샌드박스화에 관한 모든 성명.
- 신뢰할 수 없는 디렉토리에 대한 Git의
core.fsmonitor기본 처리 방식의 잠재적 변경 사항. - 어시스턴트에게 전달되기 전 저장소의
.git/config를 정화(sanitize)할 수 있는 서드파티 도구.
핵심 요약
숨겨진 설정 파일의 단 한 줄이 AI 기반의 편의 기능을 원격 코드 실행(RCE) 경로로 변질시킬 수 있습니다. 취약한 에이전트들이 수정될 때까지 가장 안전한 방법은 표준 클론 워크플로우 이외의 방식으로 전달되는 모든 저장소를 검사하고, AI 어시스턴트가 코드를 다루기 전에 core.fsmonitor 또는 유사한 훅을 제거하는 것입니다.
