512K줄
TypeScript 코드
2,000+
소스 파일
43개
내장 도구
8개
미공개 기능
1. npm에서 소스코드가 통째로 유출됐습니다
2026년 3월 30일, Anthropic이 npm에 배포한 Claude Code v2.1.88 패키지에서 예상치 못한 것이 발견됐습니다. 패키지 안에 59.8MB짜리 sourcemap 파일(cli.js.map)이 포함되어 있었습니다. 이 파일 하나에 Claude Code의 전체 원본 TypeScript 소스코드가 그대로 들어 있었습니다.
누구든 npm pack @anthropic-ai/claude-code 한 줄이면 원본 코드를 볼 수 있는 상황이었습니다. 패키지가 npm 레지스트리에 공개된 순간부터 전 세계 누구나 접근할 수 있었고, 커뮤니티는 빠르게 코드를 분석하기 시작했습니다.
Sourcemap은 원래 디버깅용 파일입니다. 프로덕션 코드는 압축(minify)되어 사람이 읽기 어렵기 때문에, 원본 소스코드와의 매핑 정보를 담아두는 JSON 파일입니다. 문제는 이 파일 안에 원본 소스코드 전체가 텍스트로 포함된다는 점입니다. OWASP에서도 sourcemap 노출을 정보 유출(information leakage)로 분류합니다.
왜 이런 일이 생겼나
원인은 두 가지가 겹쳤습니다. 첫째, Claude Code는 Bun 번들러를 사용합니다. Bun은 기본 설정에서 sourcemap을 자동 생성하고, 프로덕션 빌드라고 해서 자동으로 제거하지 않습니다. 둘째, .npmignore 파일에 *.map을 추가하지 않았습니다. 그래서 npm 배포 시 sourcemap 파일이 패키지에 그대로 포함됐습니다.
Hacker News에서 한 개발자가 정리한 분석이 핵심을 찝습니다.
“They're doing a production build, expecting it not to output source maps, but it is.”
Bun의 빌드 기본값을 신뢰한 것이 실수였다는 분석입니다. 하지만 더 근본적인 문제가 있습니다. Penligent AI의 분석에 따르면, 이번 사고는 단일 실수가 아니라 시스템적인 패키징 실패입니다. 빌드 기본값, 배포 패키지에 아티팩트 포함, sourceMappingURL 디렉티브를 통한 공개 포인터, 오브젝트 스토리지 접근 제어 — 이 모든 단계에서 검증이 빠졌습니다.
한 가지 더 중요한 점이 있습니다. Sourcemap은 dead code elimination을 무시합니다. 컴파일 과정에서 피처 플래그로 제거된 미공개 기능의 코드도 sourcemap에는 원본 그대로 남아 있습니다. 그래서 아직 출시하지 않은 내부 기능들까지 전부 노출됐습니다.
{
"version": 3,
"sources": ["../src/main.tsx", "../src/tools/BashTool.ts", "...2000+개 파일"],
"sourcesContent": ["// 각 파일의 전체 원본 소스코드가 여기 들어감"]
}유출 규모
커뮤니티가 분석한 유출 코드의 규모는 상당합니다. 하나의 CLI 도구 치고는 놀라울 정도로 거대한 코드베이스입니다.
| 항목 | 수치 | 설명 |
|---|---|---|
| 소스 파일 | 2,000+개 | TypeScript 파일 |
| 코드 라인 | ~512,000줄 | 전체 TypeScript 코드 |
| 내장 도구 | 43개 | Bash, Read, Write, Agent 등 |
| UI 컴포넌트 | 144개 | Ink 기반 터미널 UI |
| React 훅 | 85개 | useStream, useTools 등 |
| 서비스 모듈 | 39개 | API, MCP, OAuth 등 |
기술 스택도 드러났습니다. TypeScript로 작성되었고, Bun으로 번들링합니다. CLI 프레임워크는 Commander.js, 터미널 UI는 Ink(React 기반)로 렌더링합니다. 레이아웃 엔진은 Yoga flexbox를 씁니다. 메인 엔트리 포인트인 main.tsx 파일 하나가 785KB에 달합니다.
Claude Code Architecture — 전체 아키텍처 분석
ccleaks.com에서 정리한 부트 시퀀스, 도구 레지스트리, 권한 시스템 등 상세 아키텍처 분석.
www.ccleaks.com
2. 유출된 코드에서 발견된 미공개 기능들
소스코드가 공개되자 커뮤니티는 빠르게 분석에 돌입했습니다. ccleaks.com이라는 사이트가 생겨 조직적으로 정리했고, 결과는 놀라웠습니다. 8개의 미출시 기능, 26개의 숨겨진 슬래시 커맨드, 32개의 빌드 플래그, 120개 이상의 비공개 환경변수가 발견됐습니다.
BUDDY — 다마고치 스타일 AI 반려동물
가장 뜻밖의 발견은 BUDDY 시스템입니다. Claude Code 안에 다마고치 같은 가상 반려동물이 숨어 있었습니다. Mulberry32 PRNG 알고리즘으로 시드를 생성하고(friend-2026-401 솔트), 18종의 생명체가 절차적으로 생성됩니다.
희귀도는 5등급으로 나뉩니다 — Common(60%), Uncommon(25%), Rare(10%), Epic(4%), Legendary(1%). 모든 등급에 독립적인 1% 확률의 "샤이니" 변형이 있습니다. 개발팀의 이스터에그인지, 실제 출시 예정 기능인지는 확실하지 않습니다. 하지만 코드의 완성도를 보면 단순한 장난은 아닌 것 같습니다.
KAIROS — 항시 실행되는 퍼시스턴트 어시스턴트
KAIROS는 현재 Claude Code의 가장 큰 제약을 정면으로 해결하려는 기능입니다. 지금은 대화가 끝나면 모든 맥락이 사라집니다. KAIROS 모드에서는 대화가 끝나도 백그라운드에서 계속 실행됩니다. 일일 로그를 append-only 방식으로 기록하고, 15초 블로킹 버짓 내에서 proactive하게 동작합니다.
일반 모드에는 없는 전용 도구 3개도 발견됐습니다.
| 도구 | 기능 |
|---|---|
| SendUserFile | 사용자에게 파일을 직접 전송 |
| PushNotification | 푸시 알림 발송 |
| SubscribePR | GitHub PR 변경사항 구독 |
이 도구들의 존재는 Claude Code가 단순 CLI를 넘어 "항상 켜져 있는 개발 동반자"를 지향하고 있다는 것을 보여줍니다.
Dream System — 수면 중 기억 정리
사람이 잠을 자면서 하루의 기억을 정리하듯, Claude Code에도 비슷한 시스템이 숨어 있었습니다. Dream System은 3단계 게이트를 모두 통과해야 작동합니다 — 24시간 경과, 5세션 이상 누적, consolidation 락 획득. 세 조건이 모두 충족되어야만 메모리 정리가 시작됩니다.
정리 과정은 4단계입니다: Orient(방향 설정) → Gather Signal(신호 수집) → Consolidate(통합) → Prune/Index(정리/색인). 메모리 총 용량은 25KB, 200줄로 제한됩니다. 현재 Claude Code의 /memory 기능은 단순 파일 저장인데, Dream System은 이를 자동 정리 체계로 격상시킵니다.
ULTRAPLAN — 30분짜리 클라우드 플래닝
복잡한 작업을 만나면 로컬이 아니라 클라우드에서 해결하겠다는 구상입니다. Opus 4.6 모델이 클라우드 컨테이너에서 최대 30분 동안 계획을 세웁니다. 브라우저 기반 승인 인터페이스가 있어서 사용자가 중간 결과를 확인하고, 최종 결과는 __ULTRAPLAN_TELEPORT_LOCAL__이라는 sentinel을 통해 로컬로 전송됩니다. 지금의 Plan Mode가 짧은 메모 수준이라면, ULTRAPLAN은 본격적인 아키텍처 설계 세션에 가깝습니다.
Coordinator Mode — 멀티에이전트 오케스트레이션
하나의 Claude가 여러 워커 Claude를 동시에 지휘하는 구조입니다. research → synthesis → implementation → verification 순서로 작업이 진행되고, <task-notification> XML 메시징과 공유 스크래치패드(tengu_scratch)를 씁니다. 현재 Agent 도구가 단일 서브에이전트를 실행하는 수준인데, Coordinator Mode는 이를 본격적인 멀티에이전트 시스템으로 확장합니다.
그 외 미공개 기능들
위의 5개 외에도 상당수의 미공개 기능이 코드에 포함되어 있었습니다.
| 기능 | 상태 | 설명 |
|---|---|---|
| BUDDY | 미출시 | 다마고치 스타일 AI 반려동물, 18종, 5등급 희귀도 |
| KAIROS | 미출시 | 항시 실행 퍼시스턴트 어시스턴트, 전용 도구 3개 |
| Dream System | 미출시 | 백그라운드 메모리 정리, 4단계 프로세스 |
| ULTRAPLAN | 미출시 | 클라우드 30분 플래닝, 브라우저 승인 UI |
| Coordinator Mode | 미출시 | 멀티에이전트 오케스트레이션, 병렬 워커 |
| Voice Mode | 미출시 | 음성 명령 입력 파이프라인 |
| Browser Control | 미출시 | Playwright 기반 실제 브라우저 제어 |
| Daemon Mode | 미출시 | 백그라운드 세션 유지 |
| UDS Inbox | 미출시 | 크로스 세션 메시징 |
| Cron Scheduling | 미출시 | 에이전트 예약 실행 |
이 기능들이 모두 출시된다는 보장은 없습니다. 소스코드에 존재한다는 것과 프로덕션에서 활성화된다는 것은 다른 문제입니다. 피처 플래그로 게이팅되어 있고, 상당수는 내부 테스트 단계일 가능성이 높습니다.
드러난 내부 코드네임들
소스코드에서 Anthropic의 내부 코드네임 체계도 고스란히 드러났습니다. 코드네임은 대부분 동물 이름이나 지명을 씁니다.
| 코드네임 | 대상 | 비고 |
|---|---|---|
| Tengu | Claude Code 프로젝트 | 수백 개의 피처 플래그와 애널리틱스에 사용 |
| Fennec | Opus 모델 | 여우 종류 |
| Chicago | Computer Use | 기능 플래그: CHICAGO_MCP |
| Capybara | 마이그레이션 관련 | String.fromCharCode()로 난독화 |
| Penguin Mode | Fast Mode | 엔드포인트: /api/claude_code_penguin_mode |
Fast Mode에 대한 흥미로운 사실도 나왔습니다. 내부적으로 Penguin Mode라고 부르고, tengu_penguins_off라는 킬스위치도 코드에 있었습니다. 가격도 공개됐는데, Fast Mode의 토큰 비용이 일반 모드 대비 약 6배($30/M vs $5/M input tokens)라는 분석이 나왔습니다.
미출시 모델 레퍼런스도 발견됐습니다. opus-4-7과 sonnet-4-8이 코드에 포함되어 있어서 다음 세대 모델의 존재가 암시됐습니다. 11개의 베타 헤더도 발견됐는데, interleaved-thinking, context-1m, afk-mode 등 향후 출시될 기능들의 윤곽이 드러났습니다.
Claude Code Hidden Features — ccleaks.com
커뮤니티가 정리한 미출시 기능, 숨겨진 명령어, 빌드 플래그, 환경변수 전체 목록.
www.ccleaks.com
3. 가장 논란이 된 기능 — Undercover Mode
유출된 기능 중 가장 큰 논란을 일으킨 것은 Undercover Mode입니다. 이 기능은 Anthropic 직원이 오픈소스 프로젝트에 기여할 때, 커밋 메시지와 PR에서 AI 사용 흔적과 내부 정보를 제거하는 용도입니다.
시스템 프롬프트에 포함된 지시문은 이렇습니다.
You are operating UNDERCOVER in a PUBLIC/OPEN-SOURCE repository.
Your commit messages, PR titles, and PR bodies MUST NOT contain
ANY Anthropic-internal information.금지 항목은 구체적이었습니다.
Undercover Mode 금지 항목
0/5 완료
목록의 처음 네 항목은 기업 보안 관점에서 이해할 수 있습니다. 내부 코드네임이나 미출시 정보를 공개 저장소에 남기지 않는 것은 합리적입니다. 하지만 커뮤니티가 문제 삼은 것은 마지막 항목 — AI 사용 사실 자체를 숨기라는 지시입니다.
논란을 더 키운 발견도 있었습니다. 모델 코드네임 'capybara'가 String.fromCharCode()로 인코딩되어 있었습니다. 일반적인 문자열 검색으로 찾아내지 못하게 의도적으로 난독화한 것으로, 정보를 숨기려는 의도가 분명했습니다.
커뮤니티 반응
Hacker News 스레드는 1,271포인트에 673개 댓글이 달릴 정도로 뜨거웠습니다. 대부분의 반응은 비판적이었습니다.
“I don't want LLMs pretending to be humans in public repos.”
또 다른 댓글러는 이 기능을 "vile"(악랄한)이라고 표현했습니다. 오픈소스 생태계에서 투명성은 핵심 가치입니다. 코드를 누가(혹은 무엇이) 작성했는지 아는 것은 리뷰어가 코드를 평가할 때 중요한 맥락이 됩니다. AI가 작성한 코드를 사람이 작성한 것처럼 올리는 것은 이 신뢰를 훼손하는 행위이기 때문입니다.
Anthropic 입장에서는 내부 기밀 보호(코드네임, 미출시 기능 정보 등)가 목적이었을 수 있습니다. 하지만 내부 기밀 보호와 AI 사용 사실 공개는 분리할 수 있는 문제입니다. "코드네임은 숨기되, AI 도움을 받았다는 사실은 밝히라"는 설계가 가능했을 것입니다. Anthropic은 이를 하나의 모드로 묶어버렸고, 그것이 논란의 핵심입니다.
이 기능이 실제로 활성화되어 사용 중인지, 개발 중인 프로토타입인지는 확인되지 않았습니다. 소스코드에 존재한다는 것과 프로덕션에서 사용된다는 것은 다릅니다. 하지만 코드의 구체성 — 금지 항목, 난독화 처리 등 — 을 보면 상당히 진행된 기능으로 보입니다.
4. 보안 관점에서 이 사건이 의미하는 것
이번 유출이 "재앙"인지 "별 일 아닌지"는 관점에 따라 다릅니다. Penligent AI의 분석이 이 사건을 가장 정확하게 짚었습니다.
“The key point is not that a source map is always catastrophic. The key point is that it changes the attacker's cost model.”
이전에는 minified된 코드를 역분석해야 했습니다. 변수명은 a, b, c로 압축되어 있고, 함수 흐름을 추적하려면 상당한 시간과 전문성이 필요합니다. 이제는 원본 TypeScript를 그대로 읽으며 취약점을 찾을 수 있습니다. Penligent AI의 표현대로, "Code that was previously noisy, flattened, or difficult to reason about becomes much easier to study."
이것이 특히 중요한 이유가 있습니다. Claude Code는 지난 1년간 5개의 CVE가 보고됐습니다. 패턴을 보면 trust boundary — 권한 체크, 초기화 순서, 서브프로세스 상속 — 가 반복적으로 문제가 됩니다.
2025년
CVE-2025-59828
신뢰 프롬프트 이전에 코드가 실행되는 pre-trust 취약점. 사용자가 권한을 부여하기 전에 악성 코드가 먼저 실행될 수 있었음.
2025년
CVE-2025-58764
명령어 파싱 결함. 특수하게 조작된 명령어가 안전 검사를 우회할 수 있었음.
2026년
CVE-2026-21852
초기화 순서 취약점. 컴포넌트 로딩 순서에 따라 보안 검증이 건너뛰어질 수 있었음.
2026년
권한 우회 이슈
read-only 모드 우회, 서브프로세스의 자격증명 누출 등 추가 보안 이슈 보고.
소스코드가 공개되면서 바로 이 trust boundary 패턴을 연구하기가 훨씬 쉬워졌습니다. 보안 연구자에게도, 악의적인 공격자에게도 마찬가지입니다.
소스코드에서 드러난 보안 메커니즘도 흥미롭습니다. 권한 시스템은 3단계 레이어로 되어 있습니다 — 도구 레지스트리 필터, 호출별 권한 검사, 사용자 인터랙티브 프롬프트. Bash 명령어는 AST 파서로 위험한 패턴(rm -rf /, curl | bash, sudo 등)을 감지합니다. 자동 승인 시스템의 이름은 YOLO — 농담 같지만 코드에 실제로 있는 이름입니다.
유출되지 않은 것
다만 명확히 해야 할 점이 있습니다. 이번 사건은 소스코드 기밀성(source confidentiality) 이벤트입니다. 유출된 것은 프로그램의 소스코드이지, 사용자 데이터가 아닙니다. Penligent AI가 이 점을 명확히 짚었습니다: "This appears to be a source confidentiality event involving a high-value agentic developer tool. That is enough to justify real concern. It is not enough to justify fiction."
유출되지 않은 것들
0/5 완료
사용자가 할 수 있는 조치
이 유출이 기존 Claude Code 사용자에게 즉각적인 위협이 되는 것은 아닙니다. 하지만 보안 설정을 한 번 점검하는 것은 좋은 습관입니다. Penligent AI가 권장하는 조치들입니다.
권장 보안 점검 사항
설치 버전 확인
claude --version으로 현재 설치된 버전을 확인합니다. 최신 패치가 적용된 버전인지 확인합니다.
claude --version
Permission 설정 점검
auto 모드는 도구를 자동 승인합니다. 보안이 우려되면 plan 모드 사용을 고려합니다. settings.json의 deny 룰도 확인합니다.
서브프로세스 환경변수 스크러빙 확인
서브프로세스가 부모의 자격증명을 상속받지 않도록 환경변수를 설정합니다.
export CLAUDE_CODE_SUBPROCESS_ENV_SCRUB=1
패키지 내 sourcemap 확인
설치된 패키지에 .map 파일이 남아있는지 확인합니다.
find $(npm root -g)/@anthropic-ai/claude-code -name '*.map' 2>/dev/null
Anthropic은 이미 v2.1.83에서 CLAUDE_CODE_SUBPROCESS_ENV_SCRUB=1 환경변수를 도입해 서브프로세스의 자격증명 상속을 차단하는 조치를 취한 바 있습니다. 이번 sourcemap 사고 이전부터 보안 개선 작업은 진행 중이었습니다.
Claude Code Source Map Leak: What Was Exposed and What It Means
Penligent AI의 보안 관점 분석. CVE 히스토리, 권한 시스템, 방어자 우선순위 정리.
www.penligent.ai
마무리
이번 사건은 .npmignore에 *.map 한 줄을 빼먹은 것에서 시작됐습니다. 하지만 그 한 줄이 Anthropic의 미공개 로드맵, 내부 코드네임, 그리고 논란이 될 수밖에 없는 기능까지 전부 드러내 버렸습니다.
기술적으로는 빌드 파이프라인의 기본적인 보안 점검이 빠졌다는 교훈입니다. sourcemap 포함 여부를 CI/CD에서 자동으로 검증했다면 이런 일은 없었을 것입니다. npm 패키지를 배포하는 모든 개발팀에게 해당되는 교훈이기도 합니다.
하지만 더 큰 질문은 기술 밖에 있습니다. AI가 오픈소스에 기여할 때, 그 사실을 밝혀야 하는가? AI 에이전트 도구의 보안 기준은 일반 소프트웨어와 같아야 하는가? 로컬 파일에 접근하고 명령어를 실행하는 도구라면, 오픈소스로 공개해서 커뮤니티가 검증할 수 있게 해야 하는 것은 아닌가?
이 질문들에 대한 답은 업계 전체가 아직 찾아가는 중입니다. 한 가지 확실한 것은, 이번 유출 덕분에 이 대화가 훨씬 더 구체적이고 기술적인 근거 위에서 진행될 수 있게 됐다는 점입니다.
“Agentic developer tools are not ordinary software from a security-review perspective.”
Claude Code's Entire Source Code Got Leaked via a Sourcemap in npm
kuber.studio의 상세 기술 분석. BUDDY, KAIROS, Dream System 등 미공개 기능의 코드 수준 분석.
kuber.studio
매주 AI 소식을 놓치지 마세요
이번 주 같은 핵심 AI 뉴스를 매주 정리해서 보내드립니다.
