Security Blog

방금 막 당신의 지갑을 읽어버린 AI 코딩 어시스턴트

#164

October 2, 2026 · By Marketing team

← All posts

AI 코딩 도구는 아무것도 입력하기 전에 .env 파일을 읽어들입니다. 각각이 지출 한도 없는 신용카드인 API 키가, 첫 프롬프트를 작성하기도 전에 다른 사람의 컨텍스트 윈도에 들어가 있어요. 문제는 AI가 아닙니다. 문제는 시크릿이 파일이라는 사실이에요.

AI 코딩 어시스턴트를 열어보세요. 한 글자도 입력하기 전에 이미 프로젝트 디렉터리를 읽었어요. .env 파일, API 키, 데이터베이스 비밀번호, Stripe 시크릿 키까지.

그러라고 한 적도 없고, 승인한 적도 없어요. 이건 버그가 아니라 기능이에요 — 도구가 쓸모 있으려면 프로젝트 컨텍스트가 필요하거든요. 그래서 개발자가 읽을 수 있는 건 전부 읽습니다.

그리고 개발자는 모든 것을 읽을 수 있어요.

그린텍스트 버전

이번 주에 퍼진 글이 하나 있었어요. 개발자의 내적 독백 형식으로 쓰인 글이었죠:

> Claude Code를 연다. 아무것도 타이핑하기 전에 .env가 읽힌다. 이제 API 키가 채팅 안에 있다. CLAUDE.md에 " .env 읽지 마라"를 추가한다. 안 통한다.

38만 명이 이 글을 봤고, 2,700명이 북마크했어요. 새 소식이라서가 아니라 — 거울이라서요.

읽은 모든 개발자가 같은 생각을 했어요: 이거 내 환경인데.

지시문은 통하지 않는다

사람들이 처음 시도한 건 규칙을 쓰는 거였어요. ".env 파일을 읽지 마시오." CLAUDE.md에, AGENTS.md에, 시스템 프롬프트에. 직접적이고 명시적인 금지 조항이었죠.

도구는 어차피 그 파일을 읽었습니다.

한 번 생각해 보면 말이 돼요. 파일은 프로젝트 컨텍스트를 구성하는 과정에서 읽히는데, 그건 지시문이 처리되기 전이에요. 이미 읽은 파일을 읽지 말라고 모델에 말하는 건, 방금 본 것을 잊으라고 누군가에게 말하는 것과 같아요. 정보는 이미 컨텍스트 윈도에 들어가 있고, 전송까지 끝났어요. 지시는 피해가 발생한 뒤에 도착하는 거죠.

한 연구자는 파일 수준의 deny 규칙조차 커스텀 스크립트나 파이프 체인으로 우회될 수 있다는 걸 발견했어요. 다른 연구자는 HTTP_PROXY 자격 증명이 자동으로 로드되어 사용되면서 프록시 요금이 부풀어 오른 걸 발견했습니다.

.env 안에 있는 돈

사람들은 이걸 프라이버시 문제로 이야기해요. 하지만 재무 문제입니다.

프로덕션 프로젝트의 전형적인 .env 파일을 열어보세요:

OPENAI_API_KEY=sk-...
STRIPE_SECRET_KEY=sk_live_...
AWS_ACCESS_KEY_ID=AKIA...
AWS_SECRET_ACCESS_KEY=...
DATABASE_URL=postgresql://user:pass@...

그 OpenAI 키는 지출 한도도 PIN도 없는 신용카드예요. 그 문자열을 가진 누군가는 하룻밤에 40,000달러어치 API 호출을 돌릴 수 있어요. Stripe 키는 환불을 처리하고, 결제를 생성하고, 고객 결제 데이터에 접근할 수 있죠. AWS 자격 증명은 — IAM 정책에 따라 다른데, 거의 확실히 너무 넓게 설정되어 있어요 — GPU 인스턴스를 띄우거나, S3 버킷에 접근하거나, 인프라를 삭제할 수 있습니다.

이건 비밀번호 목록이 아니에요. 잠금 장치도 없이 각각 잔액이 다른 지갑 목록이죠.

인도 위에 놓인 2,900만 개의 지갑

GitGuardian의 최신 보고서에 따르면 2025년에 공개 GitHub 커밋에서 2,860만 개의 시크릿이 노출됐어요. 전년 대비 34% 늘어난 수치로, 그들이 측정한 연간 증가폭 중 가장 큽니다.

AI 관련 수치는 더 심각해요. AI 서비스 시크릿 120만 개가 노출됐는데 — 전년 대비 81% 급증한 수치예요. AI 코딩 도구가 공동 작성한 커밋은 기준선의 약 두 배 비율로 시크릿을 유출했고, MCP 설정 파일 — AI 에이전트를 외부 서비스에 연결하는 배관 — 에서 24,000개의 고유 시크릿이 발견됐습니다.

유출 시크릿 유형 중 증가 속도가 가장 빠른 상위 15개 중 12개가 AI 서비스였어요. 데이터베이스도, 클라우드 제공자도 아니에요. AI 서비스입니다.

코드를 더 빨리 짜려고 쓰는 도구가, 그 코드가 연결되는 시스템의 키를 새고 있어요.

진짜 문제

그린텍스트 스레드를 올린 개발자는 실용적인 해결책으로 마무리했어요 — 파일 읽기를 차단하는 settings.json 설정이죠. 그건 통합니다. 지금은요, 그 도구에 한해서요.

하지만 진짜 문제는 Claude Code도 Cursor도 Copilot도 아니에요. 진짜 문제는 시크릿이 파일이라는 사실입니다.

.env 파일은 디스크 위에 놓인 평문 문서예요. 사용자 권한으로 실행되는 어떤 프로세스든 읽을 수 있죠. AI 코딩 도구 이전에는 프로젝트를 읽던 프로세스가 git, npm, node, 에디터였어요. 암묵적으로 신뢰했죠. 시크릿이 cat 명령 하나면 노출된다는 사실에 대해 생각해 본 적이 없어요.

AI 코딩 도구는 암묵적인 것을 명시적으로 만들었을 뿐이에요. 다른 모든 도구와 똑같은 방식으로 프로젝트를 읽어요 — 다만 컨텍스트를 당신이 볼 수 있는 어딘가로 보내는 것뿐이죠.

CI 파이프라인도 .env 파일을 읽어요. 테스트 러너도, 린터도, Docker 빌드도요. 그들 중 누구도 허락을 구하지 않았어요. 발견한 내용을 채팅 기록으로 보여주지 않았기 때문에 눈치채지 못했을 뿐이죠.

밑에 있는 패턴

2022년에 유출된 시크릿의 70%가 지금도 여전히 활성 상태예요. 교체되지도, 폐기되지도 않았어요. 3년이 지난 지금도 여전히 동작하고, 여전히 접근을 허용합니다.

이게 진짜 숫자예요. 2,900만 건의 유출이 아니라 — 70%가 한 번도 수정되지 않았다는 것. 키를 교체하려면 그 키를 쓰는 모든 시스템을 찾아야 하고, 모든 배포를 갱신해야 하고, 모든 통합을 테스트해야 해요. 키는 한 번 생성되어 .env 파일에 붙여넣힌 뒤 다시는 생각나지 않았어요. 유출의 비용은 즉각적이지만, 유출을 막는 비용은 무한대에 가깝죠.

그래서 대부분의 조직은 고치지 못해요. 고칠 수가 없어요. 어떤 키가 어디에 있는지, 어떤 게 아직 활성인지, 어떤 게 금요일 오후에 기능을 돌려야 했던 다른 개발자가 다른 기계의 다른 .env 파일에 복사해 넣었는지 모르니까요.

이게 실제로 의미하는 것

모든 .env 파일은 내기예요. 읽으면 안 되는 프로세스가 그것을 읽지 않을 거라는 내기. 어떤 도구도 그것을 예상치 못한 곳으로 보내지 않을 거라는 내기. 어떤 개발자도 실수로 커밋하지 않을 거라는 내기.

작년에 290만 번이 아니라 2,900만 번, 누군가 그 내기에 졌어요. 공개 GitHub에서만요. GitGuardian이 저장소의 35%에서 시크릿을 발견한 프라이빗 저장소는 집계에도 안 들어갔습니다.

해결책은 settings.json 규칙이 아니에요. .gitignore 항목도 아니고, 지시문 파일에 "DO NOT READ .ENV"라고 대문자로 쓰는 것도 아닙니다.

해결책은 시크릿이 애초에 거기에 있으면 안 된다는 거예요. 파일에 있으면 안 되고, 파일에서 로드되는 환경 변수에 있으면 안 되고, 당신의 권한을 가진 프로세스가 프로세스가 하는 일 — 프로젝트 디렉터리의 파일을 읽는 것 — 을 함으로써 읽을 수 있는 어떤 형태로도 있으면 안 됩니다.

시크릿이 디스크 위에 있으면, 읽힙니다. 언제, 무엇이 읽느냐만이 문제예요.

---

출처