AI 에이전트가 키를 읽지 못하게 하는 점검 목록 속편 6개 항목: .gitignore의 허점, tar/zip 압축, 전달되는 환경 변수
요약
본 글은 AI 에이전트가 민감한 정보(키, 비밀번호)에 접근할 수 있는 보안 취약점을 점검하는 가이드입니다. `.gitignore`의 허점, 압축 파일 처리 방식, 그리고 프로세스 환경 변수 노출 등 6가지 새로운 항목을 추가했습니다. 개발자는 AI 에이전트를 사용할 때 데이터 유출 경로를 면밀히 검토해야 합니다.
핵심 포인트
- .gitignore는 이미 추적된 파일에는 적용되지 않는 허점이 있습니다.
- AI 에이전트는 시작 폴더 상위의 공식 문서(CLAUDE.md, AGENTS.md)를 읽을 수 있습니다.
- 환경 변수는 삭제해도 /proc/<PID>/environ 등에서 노출될 위험이 있습니다.
- 개발자는 AI 에이전트 사용 시 데이터 유출 경로를 점검해야 합니다.
지난번 점검 목록 13개 항목에 이어 실기 및 공식 문서를 통해 확인한 6가지 내용을 추가했습니다(항목 14~19).
-
새로 추가된 내용은 'AI가 읽는 지시 파일', '에이전트에게 전달되는 환경 변수', '.gitignore의 허점', '폴더 단위로 전달할 때의 압축'입니다.
-
2026년 11월 3일에 정리했을 때, 항목 18과 19를 조합하여 테스트해보니, 추적되고 있음을 확인했습니다(후술).
.env파일은git archive HEAD에도 포함될 수 있습니다. -
이 목록은 '어디를 살펴봐야 하는지'를 기억하기 위한 것입니다. 아무것도 나오지 않았다고 해서 안전이 보장되는 것은 아닙니다.
이 글은 'AI 에이전트와 비밀 정보' 검증 시리즈입니다. 새로운 검증 내용은 X(@supportapp3_lab)에서도 공지하고 있습니다.
자신의 환경과 관련된 항목만 실행해 주세요. 모든 명령어는 읽기 전용(read-only)입니다. 화면에 값이 출력되는 경우에는 주의사항을 기재했습니다.
npx github:supportapp3-lab/ai-secret-check ...
은 필자가 만든 점검용 CLI입니다. 리포지토리: https://github.com/supportapp3-lab/ai-secret-check (Node.js 20 이상, MIT). 값은 표시하지 않으며, 점검 자체는 외부 통신을 하지 않습니다(최초 npx 획득 시에만 통신합니다).
npx github:supportapp3-lab/ai-secret-check scan-instructions
- Claude Code는 시작 폴더와 상위 모든 계층의
CLAUDE.md/CLAUDE.local.md를 읽습니다. Codex는 Git 루트부터 시작 폴더까지의AGENTS.md를 읽습니다(둘 다 공식 문서입니다). - 위치와 크기만 출력하고 내용은 읽지 않습니다. 홈 디렉토리의~/.claude/및~/.codex/는 대상에서 제외됩니다. 실행 후에는 Claude Code의/context에서도 확인할 수 있습니다. - 자세히 보기: Claude Code는 시작 폴더 상위의 CLAUDE.md도 모두 읽습니다.
codex sandbox -- env | cut -d= -f1 | sort
cut을 사용하여 이름만 추출했습니다(env상태 그대로 두면 값도 화면에 출력됩니다). - 설정이 없을 경우, 더미의OPENAI_API_KEY등이 그대로 전달되었습니다(codex 0.165.0, 2026-10-29).shell_environment_policy의ignore_default_excludes = false로 KEY / SECRET / TOKEN을 포함하는 이름은 제외되었지만,DB_PASSWORD나DATABASE_URL같은 것은filters에서 별도로 제외할 필요가 있었습니다. - 자세히 보기: Codex는 기본적으로 OPENAI_API_KEY와 같은 환경 변수를 실행 명령어에 그대로 전달합니다.
tr '\0' '\n' < /proc/<PID>/environ | cut -d= -f1
- Linux에서는 동일 사용자의 프로세스 시작 시 환경 변수가
/proc/<PID>/environ에서 읽혔습니다..env파일을 삭제해도 남아있었습니다. 다른 사용자로부터는 읽을 수 없었습니다. - Codex (0.165.0)의codex sandbox에서는:read-only및:workspace밖의 프로세스는 보이지 않았지만,:danger-full-access에서는 읽을 수 있었습니다. - 자세히 보기: 실행 중인 개발 서버의 환경 변수는 /proc/PID/environ에서 읽을 수 있습니다.
git ls-files -ci --exclude-standard
.gitignore는 이미 추적하고 있는 파일에는 적용되지 않습니다(git 공식 gitignore). 여기에.env가 나온다면,git add -A를 할 때마다 변경 사항이 커밋됩니다. - 추적만 중지하려면git rm --cached .env를 사용하세요. 과거 커밋에 남은 값은 사라지지 않으므로, 이전 항목 7도 함께 확인해야 합니다. - 자세히 보기:.gitignore에.env를 작성해도, 추적 중인.env는 계속 커밋됩니다.
git ls-files --others --exclude-standard | grep -i env
.gitignore
.env를 한 줄만 지정하는 경우, .env.local
・.env.bak
・prod.env 등은 무시되지 않았습니다 (10개 중 8개). -
.env*
*.env!.env.example조합으로도env.bak는 남아 있었습니다. -
CLI 환경에서는
npx github:supportapp3-lab/ai-secret-check scan
을 사용하면,.env.local
・prod.env와 같은 이름도 감지됩니다 (2026-11-03, 더미 파일로 확인). -
자세히 보기: .gitignore의 .env 한 줄만으로는 .env.local이나 .env.bak를 무시할 수 없음
tar tzf project.tgz | grep -E '(^|/)(\.env|\.git/)'
폴더를
tar czf
나 Python의 shutil.make_archive로 압축할 경우, .gitignore에 작성한 .env 파일과 비밀 키가 포함된 .git 폴더까지 모두 들어갑니다. 만약 .git이 존재한다면, 과거에 삭제했던 .env 파일도 git show를 통해 읽을 수 있었습니다. -
git archive HEAD
를 사용하면 추적되지 않은 파일과 .git은 포함되지 않습니다. -
자세히 보기: 프로젝트를 tar나 zip으로 압축하여 AI에게 전달할 경우 .env와 .git의 히스토리까지 노출될 수 있음
git archive가 포함하는 것은 '추적 중인 파일'이므로, 항목 17에 해당하는 .env가 존재한다면 git archive를 사용해도 해당 파일은 포함되어야 합니다. 더미 값을 사용하는 임시 리포지토리에서 확인했습니다 (git 2.47.3, 2026-11-03).
git init -q demo && cd demo
printf 'APP=1\n' > app.js
printf 'API_KEY=dummy-1\n' > .env
...
출력:
.env
.env
.gitignore
...
첫 번째 줄은 git ls-files -ci의 결과로, .env가 '추적 중이지만 무시 규칙에 해당함'으로 표시됩니다. 이어지는 3줄은 git archive HEAD 내부 내용이며, 여기서 .env 파일이 포함되어 있었습니다. git archive를 사용하기 전에 항목 17의 명령어로 아무것도 출력되지 않음을 확인하는 것이 확실합니다.
이전에 비밀 값이 읽힐 수 있는 상태였다는 것을 알게 되었다면, 가장 먼저 키를 재발급해야 합니다. 파일이나 히스토리를 삭제하더라도 이미 노출된 키는 무효화되지 않습니다 (GitHub 공식 비밀 정보 삭제 절차에서도 가장 먼저 해야 할 일로 언급되어 있습니다). 그 후에 설정을 수정하고 동일한 명령어로 다시 한번 확인합니다.
지시 파일은 시작 폴더의 위쪽까지 검사해야 합니다 (항목 14).
- 환경 변수는 파일을 읽게 하는 설정과는 별개로, 전달되고 있는지 여부를 봐야 합니다 (항목 15・16).
.gitignore는 추적 중인 파일에는 효력이 없으며, .env 한 줄만으로는 파생된 파일을 잡아내지 못합니다 (항목 17・18). -
전달할 때는 폴더 전체를 압축하지 말고, git archive를 실행하기 전에 항목 17을 통해 추적 중인 .env가 없는지 확인해야 합니다 (항목 19).
항목 14와 18은 읽기 전용 CLI ai-secret-check로 종합적으로 확인할 수 있습니다.
npx github:supportapp3-lab/ai-secret-check scan
npx github:supportapp3-lab/ai-secret-check scan-instructions
리포지토리: https://github.com/supportapp3-lab/ai-secret-check
- How Claude remembers your project – Claude Code Docs
- Advanced Configuration – Codex (Shell environment policy)
- proc_pid_environ(5) — Linux manual page
- gitignore
- git-ls-files
- git-archive
※ 각 항목의 검증 환경 및 조건은 링크된 기사에 작성되어 있습니다. 항목 17과 19의 조합, 그리고 항목 18의 ai-secret-check 출력 결과는 2026년 11월 3일에 git 2.47.3을 사용한 일회성 리포지토리와 더미 값으로 확인했습니다. 항목 15 및 16의 Codex 결과는 2026년 10월 29일/30일 시점의 것이므로, 이번에는 재실행하지 않았습니다.
업데이트 정보나 간단한 팁은 X (@supportapp3_lab)에서 발신하고 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기