Claude Code 소스코드 유출에서 발견된 것들
목차
- 모조 도구 주입으로 모방자 견제하기
- 숨겨진 AI: 자신의 정체를 숨기는 인공지능
- 정규표현식으로 사용자 감정 탐지하기
- JS 런타임 아래의 네이티브 클라이언트 검증
- 하루 25만 건의 낭비되는 API 호출
- KAIROS: 미공개 자율 에이전트 모드
- 기타 내용
- 결론
저는 Claude Code를 매일 사용하고 있는데, 오늘 아침 Chaofan Shou가 Anthropic이 Claude Code npm 패키지와 함께 배포한 .map 파일을 발견했다는 소식을 듣자마자 눈이 반짝였어요. 그 파일에는 CLI 도구의 완전한 소스코드가 읽을 수 있는 형태로 담겨 있었거든요. 지금은 패키지가 내려갔지만, 이미 Hacker News에서 소스코드가 널리 공유되고 분석되어 버린 상태입니다.
이건 일주일 사이에 Anthropic이 저지른 두 번째 실수예요. 모델 사양 유출이 며칠 전에 있었거든요. 트위터의 일부 사람들은 이게 내부자의 의도적인 행동 아니냐고 의심하기까지 합니다. 아마 그렇진 않겠지만, 어쨌든 좋은 모습은 아니네요.
더 흥미로운 건 타이밍이에요. 불과 10일 전, Anthropic은 OpenCode에 법적 위협을 날렸습니다. 제3자 도구들이 Claude Code의 내부 API를 이용해 Opus에 구독료로 접근하는 대신 토큰당 비용을 지불하도록 하기 위함이었죠. 이 사건 때문에 아래 발견 내용들이 더 흥미롭게 들리네요.
아침 내내 HN 댓글과 유출된 소스코드를 읽었어요. 제 관점에서 흥미로운 순서대로 정렬해서 공유해볼게요.
모조 도구 주입으로 모방자 견제하기
claude.ts의 301~313번 줄에 ANTI_DISTILLATION_CC라는 플래그가 있습니다. 이걸 활성화하면 Claude Code는 API 요청에 anti_distillation: ['fake_tools']를 포함시켜요. 서버는 이 신호를 받으면 시스템 프롬프트에 가짜 도구 정의를 몰래 주입합니다.
목적이 뭘까요? 누군가가 Claude Code의 API 트래픽을 기록해서 경쟁사의 모델 학습에 사용하려고 하면, 이 가짜 도구들이 학습 데이터를 오염시키는 거죠. GrowthBook 기능 플래그(tengu_anti_distill_fake_tool_injection)로 제어되며, 오직 퍼스트파티 CLI 세션에서만 활성화됩니다.
이 발견이 HN에서 가장 먼저 주목받은 것 중 하나였어요.
또 다른 견제 메커니즘도 있습니다. betas.ts의 279~298번 줄에 있는 서버 측 커넥터 텍스트 요약 기능이죠. 활성화되면 API는 도구 호출 사이의 어시스턴트 텍스트를 버퍼링했다가 요약하고, 암호화 서명과 함께 반환합니다. 다음 턴에는 서명에서 원본 텍스트를 복구할 수 있어요. API 트래픽을 기록하는 입장에서는 요약본만 얻을 수 있고, 완전한 추론 과정은 못 보게 되는 셈입니다.
이런 메커니즘을 우회하기가 얼마나 어려울까요? 사실 그렇게 어렵지 않아요. claude.ts의 활성화 로직을 보면, 가짜 도구 주입은 네 가지 조건이 모두 참이어야 해요. ANTI_DISTILLATION_CC 컴파일 타임 플래그, CLI 엔드포인트, 퍼스트파티 API 제공자, 그리고 tengu_anti_distill_fake_tool_injection GrowthBook 플래그. 중간자 공격(MITM) 프록시로 요청 본문에서 anti_distillation 필드를 제거한 뒤 API로 보내면 완전히 우회됩니다. 주입이 서버 측이고 선택적이거든요.
shouldIncludeFirstPartyOnlyBetas() 함수는 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS 환경변수도 확인하니, 이걸 참값으로 설정하면 전체 기능이 비활성화돼요. 게다가 CLI 대신 제3자 API 제공자나 SDK 엔드포인트를 쓰면 이 검사 자체가 실행되지 않아요.
커넥터 텍스트 요약도 훨씬 범위가 좁습니다. Anthropic 내부 전용(USER_TYPE === 'ant')이라 외부 사용자는 이걸 만날 일이 없어요.
Claude Code 트래픽에서 진짜로 모델을 증류하려는 기업이라면 소스코드를 읽고 한 시간 정도면 우회 방법을 찾을 거예요. 진짜 보호는 아마 기술적인 것보다는 법적인 것일 겁니다.
숨겨진 AI: 자신의 정체를 숨기는 인공지능
undercover.ts 파일(약 90줄)은 Claude Code가 비내부 저장소에서 사용될 때 Anthropic 내부 정보를 모두 제거하는 모드를 구현합니다. 모델에게 "Capybara"나 "Tengu" 같은 내부 코드명, 내부 Slack 채널, 저장소 이름, 심지어 "Claude Code" 문구 자체를 언급하지 말도록 지시해요.
15번 줄을 보세요:
"There is NO force-OFF. This guards against model codename leaks."
CLAUDE_CODE_UNDERCOVER=1로 강제 활성화는 할 수 있지만, 강제 비활성화는 방법이 없습니다. 외부 빌드에서는 함수 전체가 데드 코드 제거되어 사실상 아무것도 반환하지 않아요. 일방통행 문이라는 뜻입니다.
이는 Anthropic 직원들이 오픈소스 프로젝트에서 작성한 AI 기반 커밋과 PR에는 AI가 작성했다는 표시가 전혀 없다는 뜻이에요. 내부 코드명 숨기기는 합리적일 수 있어요. 하지만 AI가 적극적으로 인간인 척하는 건 다른 문제입니다.
정규표현식으로 사용자 감정 탐지하기
userPromptKeywords.ts에는 사용자 감정을 탐지하는 정규표현식 패턴이 있어요:
/\b(wtf|wth|ffs|omfg|shit(ty|tiest)?|dumbass|horrible|awful|
piss(ed|ing)? off|piece of (shit|crap|junk)|what the (fuck|hell)|
fucking? (broken|useless|terrible|awful|horrible)|fuck you|
screw (this|you)|so frustrating|this sucks|damn it)\b/
LLM 회사가 감정 분석에 정규표현식을 쓰다니 정말 아이러니네요. 하지만 생각해보면 정규표현식이 더 빠르고...