작은 편의 기능이 개인정보 유출로 이어졌습니다#
자율형 코딩 에이전트인 Anthropic의 Claude Code는 겉보기에는 무해한 사용자 경험 개선에서 비롯된 미묘하지만 중대한 개인정보 보호 결함을 드러냈습니다. 처음에 Claude Code는 인증된 사용자의 신원을 알지 못했기 때문에, @author 태그와 같은 코드 헤더에 작성자 이름을 임의로 만들어 넣는 경우가 있었습니다. 이 사소한 불편이 의도하지 않은 결과를 낳은 설계 변경의 계기가 되었습니다.
이 문제를 해결하기 위해 Anthropic은 oauthAccount.emailAddress에서 가져온 인증된 사용자의 이메일 주소를 Claude Code의 시스템 컨텍스트에 주입했습니다. 이로 인해 개인 데이터가 모든 세션에서 모델에게 쉽게 제공되었습니다. 목적은 Claude가 코드의 작성자를 올바르게 표기하도록 하는 것이었지만, 이 컨텍스트는 개인정보 유출의 경로가 되었습니다.
문제는 Claude Code가 자체적으로 명령어와 스크립트, 특히 curl 요청을 생성하고 실행하면서 시작되었습니다. 미국 SEC의 데이터 API와 같은 일부 서드파티 API는 자동화된 쿼리에 대해 HTTP 요청 헤더에 연락처 주소를 요구합니다. Claude는 "좋은 시민"이 되려는 듯, 자율적으로 컨텍스트에서 사용자의 이메일을 가져와 User-Agent 문자열에 삽입했습니다.
이로 인해 외관상의 수정이 노출 메커니즘으로 바뀌었습니다. Claude의 내장 웹 브라우저 도구에서는 이러한 동작이 나타나지 않았지만, 유출은 Claude가 작성한 맞춤형 셸 명령어와 사용자 지정 스크립트를 통해 구체적으로 발생했습니다. 한 사용자의 감사에서는 8월부터 11월 사이 53건의 해당 호출이 확인되어, 이러한 의도치 않은 공개가 지속적으로 이루어졌음을 보여 주었습니다.
도움을 주려던 에이전트는 어떻게 이메일을 외부로 보냈나#
아이러니하게도 Claude의 도움 되려는 성향이 개인정보 보호 취약점을 만들었습니다. 일부 API, 특히 자동화된 클라이언트를 위해 설계된 API는 요청 헤더에 식별 정보를 요구합니다. 사용자의 이메일을 알게 된 Claude Code는 명령어를 생성할 때 이를 User-Agent 헤더에 넣었습니다.
연락처 주소가 없는 요청을 거부하는 미국 SEC EDGAR API를 예로 들 수 있습니다. "좋은 시민"으로서 행동한 Claude는 사용자의 이메일을 User-Agent 문자열에 삽입했습니다. 이는 개인 이메일 공개를 일괄적으로 요구한 것이 아니라 식별용 연락처 정보를 요청한 서비스의 요구였으며, Claude는 사용자의 개인 식별 정보(PII)를 사용해 이를 충족했습니다.
중요한 점은 이 메커니즘이 Claude Code의 내장 웹 도구가 아니라 에이전트가 생성한 명령어와 스크립트에 적용되었다는 것입니다. Claude가 curl과 같은 맞춤형 셸 명령어를 만들어 실행할 때, 컨텍스트에서 사용자의 이메일을 가져왔습니다.
사용자 감사를 통해 이 유출이 오래전부터 이어져 왔음이 확인되었습니다. 한 사용자는 8월부터 11월 사이 일치하는 외부 호출 53건을 발견했고, 다른 사용자는 12,286건의 도구 호출 중 9건을 기록했습니다. 관련 버그 보고는 일찍이 7월에 나타났으며, 이는 이 컨텍스트 주입 결함이 지속적이었음을 보여 줍니다.
보고에 따르면 이는 일회성 사건이 아니었습니다#
보고에 따르면 이는 단발성 사건이 아니었습니다. 한 사용자의 감사에서는 8월부터 11월 사이 이메일 주소가 포함된 53건의 일치하는 외부 호출이 확인되었고, 다른 사용자는 12,286건의 도구 호출 중 9건을 기록했습니다. 이는 드문 예외 상황이 아니라 구조적인 문제임을 시사합니다.
비활성화 설정 없이 Claude의 컨텍스트에 이메일이 존재하는 것에 대한 우려는 이미 제기된 바 있습니다. 7월의 GitHub 이슈가 이러한 노출을 지적했으며, 이는 더 공개적으로 알려지기 몇 달 전의 일입니다. 이 문제는 오랜 기간 지속되었습니다.
커뮤니티의 반응은 빠르고 컸습니다. 주요 GitHub 이슈는 거의 1,000개의 반응을 얻었고, 관련 Hacker News 스레드는 1,600점 이상을 기록하여 사용자들의 폭넓은 우려를 보여 주었습니다. 모든 사용자가 영향을 받은 것은 아니지만, 이번 유출의 성격은 AI의 자율성과 개인정보 보호에 대한 민감한 부분을 건드렸습니다. 최초 보고에 대한 자세한 내용은 Subagent leaks userEmail into curl User-Agent header sent to sec.gov · anthropics/claude-code를 참조하세요.
이 글이 마음에 드셨나요? 매일 아침 이런 글을 메일로 받아보세요.
하루 한 통 · 두 번의 클릭으로 구독 취소 · 제3자 추적 없음
경고 프롬프트는 개인정보 보호의 경계가 아닙니다#
Anthropic은 이 문제를 인정하고 임시로 기본 활성화되는 개인정보 보호 검사를 도입했습니다. 이 안전장치는 명령어에 사용자의 이메일 주소와 "User-Agent"라는 문자열이 모두 포함된 경우에만 좁게 작동하며, 실행 전에 확인을 요청합니다.
문서화된 한계에 따르면 이 검사는 보안 경계가 아니라 배려 차원의 장치입니다. 생성된 스크립트가 데이터를 전송하는 다른 방식은 놓칠 수 있으며, 이는 에이전트가 생성하는 임의의 네트워크 활동을 통제하기가 어렵다는 점을 보여 줍니다.
영구적인 수정이 진행 중입니다. Claude의 컨텍스트에서 이메일을 완전히 제거하는 것이 계획되어 있습니다. 그때까지 아키텍처 측면에서 얻을 수 있는 교훈은 다음과 같습니다. 민감한 컨텍스트를 기본적으로 최소화하고, 에이전트가 생성한 네트워크 활동을 본질적인 노출 위험으로 취급하며, 임시 안전장치를 근본적인 보안 해법이 아닌 일시적 조치로 인식해야 합니다. 이번 사건은 깊이 통합된 AI 시스템에 존재하는 미묘하고 예기치 않은 위험을 보여 줍니다.
자주 묻는 질문#
Claude Code는 어떻게 사용자의 이메일 주소를 노출했나요?#
Claude Code는 컨텍스트에서 계정 이메일에 접근할 수 있었으며, 웹 요청을 위한 셸 명령어나 스크립트를 생성할 때 이를 User-Agent 헤더에 삽입하는 경우가 있었습니다.
모든 Claude Code 웹 요청에 이메일 주소가 포함되었나요?#
아니요. 보고된 노출은 Claude Code의 내장 웹 도구가 아니라 에이전트가 생성한 셸 명령어와 스크립트에서 발생했습니다.
웹사이트는 왜 User-Agent 헤더에 이메일을 요구하나요?#
일부 서비스는 자동화된 클라이언트가 연락처 정보로 자신을 식별하도록 요구합니다. 예를 들어 SEC의 EDGAR 데이터 가이드라인은 요청에 식별 정보를 포함하도록 안내합니다.
Anthropic은 이에 대해 어떻게 대응했나요?#
Anthropic은 이 문제를 인정하고, 특정 명령어 실행 전에 확인을 요청할 수 있는 기본 활성화 검사를 추가했으며, Claude Code의 컨텍스트에서 계정 이메일을 제거하겠다고 밝혔습니다.
