기술

Claude Code, 비밀번호 평문 저장… 깃허브 공개 파일 1122개서 노출

Susan Hill
Google에서 추가하기

Anthropic의 Claude Code는 대부분의 셸 명령을 실행하기 전에 권한을 묻는다. 선택지 가운데 하나가 ‘예, 다시 묻지 않기’다. 데이터베이스 로그인처럼 비밀번호가 포함된 명령에 이 옵션을 선택하면, Claude Code는 비밀번호까지 포함한 명령 전체를 프로젝트 안의 일반 텍스트 설정 파일에 기록할 수 있다. 보안 연구진은 이제 누구나 열람할 수 있는 공개 GitHub 코드 저장소에서 이런 비밀번호와 키 수천 개를 발견했다.

Claude Code를 사용한다면 settings.local.json이라는 파일을 찾아보면 된다. 저장소 최상위 디렉터리의 숨김 폴더인 .claude 안에 있으며, 별도로 조치하지 않으면 프로젝트와 함께 이동한다. 이 동작은 도구를 사용할 수 있는 모든 국가에서 동일하다. 사용 습관을 바꾸는 데는 1분이면 되지만, 유출된 비밀번호를 수습하는 데는 훨씬 더 오래 걸린다. 파일을 삭제해도 Git 기록이나 다른 사람의 포크에 남기 때문이다.

소프트웨어 보안 기업 Apiiro가 공개 GitHub를 검색한 결과, 연구 내용을 보도한 The Hacker News에 따르면 103,617개 저장소에서 해당 파일 사본 104,185개가 발견됐다. 이 가운데 약 1.1%인 1,122개에는 비밀 정보가 하나 이상 들어 있었으며, 자격 증명은 종류별로 총 1,379개였다. 3분의 1 이상은 데이터베이스에 직접 접속할 수 있는 정보였고, 데이터베이스 비밀번호는 379개였다. 공개 서버에 접속할 수 있는 SSH 로그인 정보 43개, GitHub·GitLab·npm 토큰 42개, Amazon Web Services 키 23개도 확인됐다.

파일의 주인은 취미로 개발하는 사람들에 그치지 않는다. Apiiro는 파일이 63개 조직에서 나온 것으로 추적했으며, 대부분은 규모가 다양한 소프트웨어 기업이었다. 가장 심각한 사례에는 데이터베이스 업체가 보유한 관리자 수준의 클라우드 키와 의료 기록 데이터베이스의 소유자 비밀번호가 포함됐다. Git 기록에 남은 파일의 이전 버전에서도 509개 저장소에 걸쳐 비밀 정보 734개가 추가로 발견됐고, 저장소 74개의 포크 211개에는 원본과 같은 비밀 정보가 남아 있었다. 여기에 팀이 의도적으로 커밋한 공유 설정 파일과 저장된 에이전트 대화 기록까지 더하면, 1,994개 저장소에 걸쳐 비밀 정보가 2,539개로 늘어난다.

Claude Code도 이 파일이 버전 관리에 포함되지 않도록 조치하기는 한다. Anthropic의 설정 문서에 따르면 도구가 파일을 처음 쓸 때 사용자의 전역 Git 제외 목록에 규칙을 추가해, 해당 컴퓨터에서 Git이 파일을 무시하도록 한다. 하지만 그 규칙은 프로젝트와 함께 팀원의 노트북이나 빌드 서버, 새 컴퓨터로 옮겨가지 않으며, 이미 커밋된 파일에는 아무런 효과가 없다. 연구진이 추적한 저장소 1,105개 가운데 539개에서는 Claude를 공동 작성자로 표시한 커밋이 파일을 변경했다. 이는 에이전트가 파일을 직접 커밋하는 경우가 많다는 점을 시사한다. Apiiro가 문서를 비교한 코딩 에이전트 16개 가운데 기본 설정으로 승인된 명령 전체를 프로젝트 파일에 저장하는 것으로 확인된 것은 Claude Code뿐이다.

일반적인 보안 도구도 이 문제를 상당 부분 놓친다. Apiiro는 널리 쓰이는 오픈소스 비밀 정보 탐지 도구 gitleaks와 TruffleHog를 파일 사본 전체에 적용했다. gitleaks는 1,122개 파일 중 564개를 탐지했고, TruffleHog는 643개를 찾아냈지만, 215개는 두 도구 모두에서 걸러지지 않았다. 대부분은 PGPASSWORD=, sshpass -p 또는 mysql -p 뒤에 입력된 비밀번호였다. 알려진 키 형식을 찾는 도구에는 이런 값이 평범한 단어처럼 보이기 때문이다.

이번 조사 결과에는 감안해야 할 점도 있다. Apiiro는 AI 지원 개발을 위한 보안 도구를 판매하는 기업이므로, 이번 연구에는 자사 제품을 홍보하려는 목적도 있다. 연구진은 자격 증명이 여전히 유효한지 확인하지 않았지만, 통보를 받은 기업 중 한 곳은 해당 키가 실제로 활성 상태였다고 확인했다. 알려진 키 형식과 일치하거나, 공개 서버 주소 옆에 있고 AI 검토자가 비밀 정보라고 판단한 값이 집계 대상에 포함됐다. 따라서 일부는 오탐일 수 있다. Apiiro는 공동 작성자 표시가 있다고 해서 노출된 자격 증명을 모두 Claude가 추가했다고 단정할 수는 없다고도 밝혔다. 그리고 GitHub는 드러난 문제의 일부일 뿐이다. 해당 파일은 프로젝트 폴더 안의 일반 JSON 파일이므로 npm 패키지나 Docker 이미지, 압축 파일, 동기화 폴더에도 함께 들어갈 수 있다.

연구진이 가장 먼저 권하는 조치는 자격 증명 교체다. 정리 작업에 들어가기 전에 파일에 한 번이라도 담겼던 비밀번호와 토큰, 키를 모두 바꿔야 한다. 공개된 비밀 정보는 기록을 다시 쓰더라도 이미 유출된 것이기 때문이다. 그런 다음 git rm –cached로 파일을 Git 추적 대상에서 제외하고, 저장소 자체의 .gitignore에 파일을 추가한 뒤, Claude Code에서 /permissions를 열어 비밀 정보가 포함된 저장 규칙을 삭제해야 한다. 환경 변수를 통해 자격 증명을 참조하면 저장 규칙에는 비밀번호 대신 $DB_URL 같은 이름만 남는다. 일회성 명령이 아니라 패턴을 승인하면 파일에 구체적인 인자가 아예 기록되지 않도록 할 수 있다.

사용자들은 이전에도 이 문제를 알렸다. 2025년 8월 11일 등록된 버그 보고서에는 API 키와 토큰이 포함된 승인 명령이 settings.local.json에 한 글자도 바뀌지 않은 채 저장된다고 적혀 있었다. 자동화 봇은 60일 동안 활동이 없었다는 이유로 1월 3일 해당 보고서를 ‘계획 없음’으로 닫았다. 11월 6일 조사 결과를 공개한 Apiiro에 따르면, 이들이 인용한 관련 보고서 네 건은 모두 같은 봇에 의해 답변 없이 종결됐다. 가장 최근 보고서가 닫힌 날도 11월 6일이었다. 11월 2일 기준으로 Apiiro가 찾아낸 노출 파일은 모두 해당 저장소의 기본 브랜치에 그대로 남아 있었으며, 절반은 최소 217일 동안 공개된 상태였다.

The Hacker News와 Apiiro는 Anthropic의 답변을 전하지 않았으며, 문서에 명시된 동작도 바뀌지 않았다. 비밀번호를 직접 입력한 명령에서 다음번에 ‘다시 묻지 않기’를 선택하면, 비밀번호도 함께 저장된다.

태그: , , , , ,

Google에서 추가하기

토론

댓글 0개가 있습니다.