공지: 'yes, and don't ask again'을 누르면 비밀번호와 API 키가 포함된 전체 명령어가 .claude/settings.local.json에 저장됩니다. 현재 1,122개의 파일이 GitHub에 공개되어 있습니다.
PSA: "yes, and don't ask again" saves the exact command, secrets included, into .claude/settings.local.json. 1,122 of those files are public on github
핵심 요약
Claude Code의 설정 파일에 비밀 정보가 포함된 채로 GitHub에 커밋되는 보안 문제가 발견되어 주의가 요구됩니다.
- 보안 취약점 — Claude Code의 자동 허용 설정이 비밀번호와 API 키를 평문으로 저장함
- 공개 노출 — 1,122개의 설정 파일이 GitHub에 커밋되어 외부로 유출됨
- 대응 방안 — gitignore 설정 확인 및 커밋 기록까지 포함한 비밀 정보 스캔 필요
- 모범 사례 — 환경 변수 사용 및 명령 실행 시 비밀 정보 직접 입력 지양
Apiiro가 공개된 GitHub 저장소들을 싹 다 뒤져봤는데, Claude Code의 권한 허용 규칙에 비밀번호랑 API 키가 그대로 박혀 있는 파일이 1,122개나 발견됨. 지금 Hacker News에서 6위 찍고 난리 났다.
헤드라인이 좀 낚시성이라 실제 상황을 정리해줌:
-
Claude가
psql postgres://admin:hunter2@db...나curl -H "Authorization: Bearer sk-..."같은 명령어를 실행하겠다고 물어봄. -
여기서 "yes, and don't ask again(예, 다시 묻지 마세요)"을 누름.
-
그럼 그 명령어 그대로, 비밀값까지 포함해서
.claude/settings.local.json에 허용 규칙으로 저장됨. -
그 파일이 그대로 커밋되고 공개 저장소에 푸시됨.
Claude Code 팀의 Boris가 HN에 댓글 달았는데, 원래 settings.local.json은 로컬에만 있어야 하는 파일이고 Claude Code가 생성할 때 자동으로 .gitignore에 추가한다고 함. 그러니까 유출된 것들은 대부분 사용자가 직접 만들었거나 git add .로 멍청하게 통째로 커밋해서 생긴 일이라는 거지. 걔네도 지금 비밀값 스크러빙(삭제) 기능 검토 중이고, 수동으로 허용 목록 관리하는 것보다 오토 모드 쓰는 걸 추천하더라.
니네 것도 2분 만에 확인해 봐:
-
각 저장소에서
git ls-files | grep -E '\.claude/settings(\.local)?\.json'입력해 봐.settings.local.json이 뜨면 커밋된 거임. -
설정 파일 두 개 다 열어서
://,Bearer,token,key,password같은 키워드로 허용 목록 검색해 봐. -
진짜 비밀값 들어있으면 당장 교체해라. 지금 파일 지워봤자 소용없음, 이미 git 히스토리에 다 남아있으니까.
-
GitHub Secret Scanning이랑 Push Protection 켜놔라. 이거 켜놨으면 대부분의 푸시는 막혔을 거임.
참고로 settings.json(공유용)은 원래 커밋하라고 만든 거니까, 거기에 허용 규칙으로 비밀값 들어갔으면 그건 설계상 공개되는 게 맞음. 비밀값은 무조건 환경 변수에 넣고, 승인하는 명령어에 직접 타이핑하지 마라.
출처는 댓글에 있음
