주의: Claude Code의 '다시 묻지 않기' 기능이 공개 저장소로 비밀 정보를 유출하고 있음
Heads up: Claude Code's "don't ask again" has been leaking secrets into public repos
핵심 요약
Claude Code의 설정 파일이 공개 저장소에 비밀 정보를 유출하는 문제를 경고하며, 보안 조치와 저장소 점검을 권장하는 글입니다.
- 비밀 정보 유출 — '다시 묻지 않기' 설정 시 명령어가 평문으로 저장되어 발생함
- 저장소 보안 취약점 — 전역 git 제외 설정만으로는 저장소 공유 시 파일이 포함될 수 있음
- 보안 권장 사항 — 비밀 정보 즉시 교체 및 .gitignore에 .claude 폴더 추가 필요
- 도구 활용 — cfgaudit 등을 사용하여 에이전트 설정 파일의 보안 상태를 점검함
며칠 전에 GitLab에서 이 내용을 다뤘는데, 이 숫자는 다시 한번 짚고 넘어갈 가치가 있다. Apiiro가 공개 저장소에서 `.claude/settings.local.json` 파일을 104,185개나 찾아냈는데, 그중 1,122개에 비밀 정보가 들어있었다고 한다. 도대체 어떻게 그 파일에 비밀 정보가 들어가게 되는지 설명해 줄게.
셸 명령어를 실행할 때 "Yes, and don't ask again(예, 다시 묻지 마세요)"을 선택하면, Claude Code가 해당 명령어를 `permissions.allow` 항목에 그대로 저장해 버린다. 그래야 나중에 또 물어보지 않으니까. 만약 명령어에 토큰이나 비밀번호를 같이 쳤다면, 그게 그대로 평문으로 저장되는 거다.
이게 왜 유출되는지 이유가 좀 교묘하다. Claude Code는 이 파일을 개인용 글로벌 git exclude에 추가해서 git 추적에서 제외하는데, 이건 네 컴퓨터에서만 적용되는 설정이야. 프로젝트의 `.gitignore`에는 기본적으로 포함되어 있지 않거든. 그래서 저장소를 공유하거나 누군가 클론을 뜨는 순간, 그 exclude 설정이 없는 사람의 컴퓨터에서 파일이 커밋되고 푸시될 수 있는 거지.
네 저장소에서 이런 파일을 발견했다면 다음 두 가지를 꼭 기억해라.
그냥 줄만 지우지 말고, 비밀 키를 무조건 교체(Rotate)해라. 한번 푸시된 이상 git 히스토리에 값이 다 남아있기 때문에, 서비스 제공자 쪽에서 키를 새로 발급받지 않는 이상 아무 소용 없다.
그리고 이건 Claude Code만의 문제가 아니다. "다시 묻지 마세요" 설정을 기억하는 에이전트라면 다 이런 파일을 가지고 있으니까, Cursor, Copilot, Gemini 같은 애들도 똑같은 패턴이라고 보면 된다.
수동으로 빠르게 확인하는 법: 네 저장소에서 `.claude/settings.local.json` 파일을 찾고, 이게 글로벌 exclude뿐만 아니라 프로젝트의 `.gitignore`에도 제대로 등록되어 있는지 확인해라. 그리고 permission 항목들을 훑어보면서 토큰처럼 보이는 게 있는지 찾아봐.
내가 이런 에이전트들의 설정을 검사하는 cfgaudit이라는 작은 오픈소스 툴을 만들었는데, permission 항목에 비밀 정보가 하드코딩되어 있는지, 그리고 gitignore 처리가 안 되어 있는지 확인해 준다. pre-commit 훅이나 CI 단계, 아니면 그냥 일회성 스캔용으로도 쓸 수 있다. 자세한 내용은 여기 있다: https://cfgaudit.github.io/blog/claude-code-dont-ask-again-secret-leak/ 저장소: https://github.com/cfgaudit/cfgaudit
공개하자면, 내가 cfgaudit을 관리하고 있다. 너희들 저장소에 이 파일 있는지 다들 확인해 봤냐?


