Your secrets don't need a git commit to leak into an AI tool
AI 코딩 에이전트의 비밀정보 유출, Git 스캔만으로 막기 어려운 이유
AI 코딩 도구로 전달되는 비밀정보는 저장소에 커밋하지 않아도 오류 로그, 환경변수 출력, 인증 헤더를 통해 대화 맥락에 들어갈 수 있습니다. 붙여넣기 전 마스킹과 코드 스캔에 더해 에이전트의 파일·명령 접근과 실행 권한을 제한해야 하는 이유를 살펴봅니다.
- 주제
본문
AI 코딩 도구에 비밀정보가 들어가는 경로는 Git 저장소에 한정되지 않습니다. 실패 로그나 환경변수 출력, 인증 헤더가 포함된 내용을 대화창에 붙여넣을 수 있고, 셸 명령을 실행하는 에이전트가 직접 환경을 읽을 수도 있습니다. 원문은 이를 특정 사고 사례가 아닌 예시로 제시합니다.
붙여넣기만 통제하면 놓치는 경로
토큰이나 연결 문자열을 마스킹하고 필요한 로그만 보내면 사람이 직접 넣는 정보는 줄어듭니다. 하지만 에이전트가 파일을 읽거나 명령을 실행할 수 있으면 사용자가 붙여넣지 않은 값도 도구 결과를 거쳐 대화 맥락에 들어갈 수 있습니다. 저장소 스캔은 코드에 기록된 키를 찾는 데 유용하지만 런타임 환경변수나 로그처럼 코드 밖에서 들어오는 값까지 통제하지는 않습니다.
원문은 에이전트가 읽을 수 있는 범위에서 .env 파일과 자격증명 파일, 비밀정보 저장소를 제외하고 개발용 키를 짧은 기간과 최소 권한으로 발급하라고 제안합니다. 이미 값이 대화에 들어갔다면 메시지를 삭제하는 것으로 노출을 되돌릴 수 있다고 볼 수 없습니다. 원문은 자격증명을 교체하고 폐기한 뒤 접근 로그에서 사용 흔적을 살피라고 권합니다.
권한 경계는 도구마다 다릅니다
Claude Code 공식 문서의 수동 권한 모드는 세션을 읽기 전용으로 시작하고 파일을 수정하거나 명령을 실행할 때 승인을 요청합니다. 시작한 작업 디렉터리 밖 파일에 대한 접근도 파일 도구가 허가를 요청합니다. 다만 사용자가 승인한 Bash 명령은 해당 사용자 계정이 접근할 수 있는 더 넓은 범위에서 동작할 수 있습니다. 문서는 Bash의 파일시스템·네트워크 접근을 제한하는 샌드박스와 개발 컨테이너 같은 추가 격리도 안내합니다. 따라서 파일 도구의 허가 경계만으로 명령 실행 권한까지 제한된다고 볼 수는 없습니다.
CI 작업에서 장기 자격증명을 없애는 방식도 작업 권한을 대신하지 않습니다. GitHub Actions의 OIDC는 작업에 id-token: write 권한이 있을 때 토큰을 요청할 수 있게 합니다. 클라우드 쪽 신뢰 정책에 조건을 두지 않으면 신뢰할 수 없는 저장소가 클라우드 자격증명을 요청할 가능성을 막을 수 없다고 GitHub 문서는 설명합니다. 비신뢰 입력을 처리하는 에이전트 작업에 배포 권한을 함께 주면 저장소에 키를 보관하지 않아도 런타임 권한이 유출 경로가 됩니다.
마스킹과 정적 스캔은 저장소에 기록된 키나 눈에 띄는 토큰 패턴을 찾는 데 쓰이고, 접근 제한과 작업 분리는 에이전트가 런타임 비밀정보를 읽거나 권한을 얻는 경로를 줄입니다. 두 통제는 서로 다른 경로를 다룹니다. 원문과 공식 문서가 뒷받침하는 요점은 에이전트가 읽고 실행할 수 있는 범위 자체를 제한하고, 비신뢰 입력을 처리하는 작업과 배포 권한을 가진 작업을 분리하는 데 있습니다.
자료: DEV Community, GitHub Docs, Claude Code Docs / 정리·해설: Trawling
참고 자료
- OpenID Connect reference - GitHub Docs — https://docs.github.com/en/actions/reference/security/oidc
- Security - Claude Code Docs — https://code.claude.com/docs/en/security