주의사항: Claude Code의 '다시 묻지 않기' 기능이 공개 저장소에 비밀 정보를 유출하고 있습니다
요약
Claude Code의 '다시 묻지 않기' 기능은 사용자가 승인한 명령어와 토큰을 `.claude/settings.local.json` 파일에 평문으로 저장합니다. 이 파일이 Git 제외 설정 때문에 실수로 공개 저장소에 커밋되어 비밀 정보가 유출될 위험이 있습니다. 발견 시에는 반드시 비밀 정보를 교체하고, git 히스토리까지 검토해야 합니다.
핵심 포인트
- '다시 묻지 않기' 기능은 민감 정보를 평문으로 저장합니다.
- 유출 파일은 `.claude/settings.local.json`이며, Git 제외 설정 때문에 위험합니다.
- 비밀 정보 발견 시에는 반드시 토큰을 교체(Rotate)해야 합니다.
- Copilot, Gemini 등 다른 AI 에이전트도 유사한 보안 패턴을 가집니다.
GitLab에서 며칠 전 이 문제에 대해 언급했으며, 그 수치는 반복할 가치가 있습니다. Apiiro는 공개 저장소에서 .claude/settings.local.json 파일을 104,185개 발견했으며, 그중 1,122개에는 비밀 정보가 포함되어 있었습니다. 비밀 정보가 이 파일에 어떻게 저장되는지 설명드리겠습니다.
'예, 그리고 다시 묻지 않기(Yes, and don't ask again)'로 셸 명령어를 승인하면, Claude Code는 정확한 명령어를 해당 파일을 permissions.allow 항목 아래에 저장하여 더 이상 사용자에게 이 명령어를 요청하지 않습니다. 만약 사용자가 명령어에 토큰이나 비밀번호를 입력했다면, 이는 일반 텍스트(plain text) 형태로 그곳에 저장됩니다.
이것이 유출되는 이유는 약간 미묘합니다. Claude Code는 파일을 개인 전역 git 제외 설정(personal global git excludes)에 추가하여 git에서 제외시키기 때문에 이 파일은 사용자 본인의 기기에만 존재합니다. 프로젝트의 .gitignore에는 기본적으로 이 파일이 목록화되어 있지 않습니다. 따라서 저장소가 공유되거나 누군가 이를 클론할 때, 해당 제외 설정을 갖지 않은 사람의 기기로부터 이 파일이 커밋되고 푸시될 수 있습니다.
사용자 본인의 저장소에서 이것을 발견했을 경우 두 가지 조치를 취해야 합니다. 비밀 정보를 교체하고(Rotate the secret), 단순히 라인을 삭제해서는 안 됩니다. 이미 푸시된 경우, 그 값은 git 히스토리(git history)에 남아있기 때문에, 항목을 제거하는 것은 제공업체(provider)에서 키를 재설정하기 전까지 아무런 변화도 주지 못합니다.
또한 이것은 Claude Code에만 국한되지 않습니다. '다시 묻지 않기' 결정을 기억하는 모든 에이전트가 이와 유사한 파일을 유지하므로, Cursor, Copilot, Gemini 등 다른 도구들도 동일한 패턴을 가지고 있습니다.
수동으로 빠르게 확인하는 방법: 저장소에서 .claude/settings.local.json을 검색하고, 이것이 개인 전역 제외 설정에만 있는 것이 아니라 프로젝트의 .gitignore에도 포함되어 있는지 확인하며, 권한 항목들을 훑어보아 토큰처럼 보이는 것이 없는지 확인하세요.
저는 cfgaudit라는 소규모 오픈소스 도구를 유지 관리하고 있으며, 이 도구는 여러 에이전트 전반에 걸쳐 다음 사항을 확인합니다: 권한 항목 내의 하드코딩된 비밀 정보와 해당 파일이 gitignore되지 않은 경우입니다. 이 도구는 pre-commit 훅(pre-commit hook), CI 단계(CI step) 또는 일회성 스캔으로 실행될 수 있습니다.
자세한 내용은 다음 링크를 참고하십시오: https://cfgaudit.github.io/blog/claude-code-dont-ask-again-secret-leak/
저장소: https://github.com/cfgaudit/cfgaudit
공개 고지: 저는 cfgaudit을 유지 관리하고 있습니다. 사용자 본인의 저장소에서 이 파일을 확인해 보셨습니까?
작성자: /u/Predictor_2718 [link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/ClaudeAI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기