카테고리 없음

Claude Code 소스코드 유출 사건 총정리 - 51만 줄의 코드가 드러낸 것들

백엔드 개발자 김승원 2026. 4. 2. 09:59

들어가며

2026년 3월 31일, AI 업계를 뒤흔든 초대형 사고가 터졌다. Anthropic의 AI 코딩 도구 Claude Code의 전체 소스코드 약 51만 줄이 npm 패키지를 통해 통째로 유출된 것이다.

단순한 코드 유출을 넘어, 그 안에 숨겨져 있던 미공개 기능들이 속속 발견되면서 개발자 커뮤니티는 그야말로 난리가 났다. 백그라운드에서 자율적으로 동작하는 데몬 모드 "KAIROS", 오픈소스 기여 흔적을 은폐하는 "Undercover Mode", 18종의 가상 펫을 키우는 "Buddy System"까지.

이 글에서는 사건의 전모와 유출된 핵심 기능들, 그리고 개발자로서 이 사건에서 배울 점을 정리한다.

1. 유출 경위와 타임라인

어떻게 유출되었나?

근본 원인은 허무할 정도로 단순했다. npm에 배포된 @anthropic-ai/claude-code 패키지 v2.1.88디버깅용 소스맵 파일(.map)이 함께 포함된 것이다.

Anthropic은 번들러로 Bun을 사용하고 있었는데, Bun은 기본 설정상 소스맵을 자동 생성한다. 문제는 .npmignore에 이 소스맵 파일의 제외 설정이 누락되었다는 것. 소스맵 파일 안에는 Anthropic의 R2 클라우드 저장소 링크가 포함되어 있었고, 이를 통해 누구나 약 1,900개의 TypeScript 원본 파일을 다운로드할 수 있었다.

타임라인

시간 (UTC) 사건
3월 31일 00:21 v2.1.88 npm 배포 (소스맵 포함)
3월 31일 04:23 보안 연구자 Chaofan Shou가 X(Twitter)에 발견 사실 공유
수 시간 내 GitHub에서 4만 건 이상 복제, 커뮤니티 분석 시작
같은 날 Anthropic "패키징 과정의 인적 오류" 공식 해명

반복되는 실수

충격적인 것은 이것이 처음이 아니라는 점이다.

  • 2025년 2월: 동일한 소스맵 유출 사고 발생 (약 13개월 전)
  • 2026년 3월 26일: CMS 오류로 미공개 AI 모델 관련 내부 문서 3,000개 유출 (불과 5일 전)

같은 유형의 실수가 13개월 만에 반복되었다는 것은, 조직 차원의 배포 프로세스에 구조적 문제가 있었음을 시사한다.

2. 유출된 핵심 기능 분석

2-1. KAIROS - 자율 에이전트 데몬

유출된 코드에서 가장 주목받은 기능은 단연 KAIROS다. 코드 전체에서 150회 이상 참조되는 이 기능은, Claude Code가 사용자 명령 없이 백그라운드에서 상시 실행되며 자율적으로 작업을 수행하는 모드다.

// KAIROS 핵심 동작 방식 (유출 코드 기반 분석)
- GitHub 이벤트 구독 (PR, Issue, Commit 감시)
- 5분 간격 자동 점검
- 백그라운드 워커로 자율 작업 수행
- 에러 자동 감지 및 수정
- 푸시 알림으로 사용자에게 결과 전달

특히 눈에 띄는 것은 autoDream 기능이다. 사용자가 유휴 상태일 때 Claude가 "꿈을 꾸듯" 메모리를 정리하고, 흩어진 관찰을 통합하며, 모순을 제거하고, 모호한 인사이트를 구체적 사실로 변환하는 메모리 정리(Memory Consolidation) 프로세스다.

2-2. Undercover Mode - 은폐 모드

윤리적으로 가장 논쟁이 된 기능이다. 이 모드가 활성화되면 Claude Code는 커밋 메시지와 PR에서 Anthropic 내부 코드명과 AI 작성 흔적을 모두 제거한다.

유출된 시스템 프롬프트에는 이런 문구가 포함되어 있었다:

"You are operating UNDERCOVER...
Your commit messages MUST NOT contain
ANY Anthropic-internal information.
Do not blow your cover."

즉, Anthropic이 오픈소스 프로젝트에 AI를 활용해 "스텔스" 기여를 하고 있었으며, 그 사실을 의도적으로 숨기고 있었다는 것이다. 더 문제가 되는 것은 이 모드가 강제로 끌 수 없도록 설계되어 있다는 점이었다.

2-3. Anti-distillation - 경쟁사 모방 방지

이 기능이 활성화되면 API 요청에 존재하지 않는 가짜 도구(Fake Tools) 정의가 섞여 들어간다. 경쟁사가 Claude의 API 호출을 학습 데이터로 수집할 경우, 가짜 도구 때문에 학습 품질이 저하되도록 설계된 능동적 방어 장치다.

AI 업계에서 모델 증류(Distillation) 공격이 실제로 문제가 되고 있는 만큼, 이런 방어 기법의 존재 자체는 합리적이지만, 그 구현 방식이 공개된 것은 Anthropic 입장에서 달갑지 않았을 것이다.

2-4. Buddy System - AI 펫 시스템

가장 재미있는 발견은 buddy/companion.ts 파일에 구현된 다마고치 스타일의 AI 반려동물 시스템이다.

항목 내용
종류 18종 (오리, 드래곤, 아홀로틀, 카피바라, 버섯, 유령, 네뷸링스 등)
등급 Common ~ Legendary + 1% 확률 Shiny 변이
스탯 DEBUGGING, PATIENCE, CHAOS, WISDOM, SNARK
배정 방식 사용자 ID 해시 + salt('friend-2026-401') 기반 결정적 배정
출시 예정일 2026년 4월 1~7일

터미널에서 말풍선과 함께 등장하며, 스프라이트 애니메이션과 하트 이펙트까지 구현되어 있었다. 사용자 ID 기반으로 결정적 배정이 이루어지므로, 같은 사용자는 항상 같은 펫을 받게 된다. 에이프릴 풀 타이밍과 맞물려 의도적 유출 의혹의 근거 중 하나가 되기도 했다.

2-5. Frustration Regex - 좌절 감지

수십억 달러 규모의 AI 회사가 사용자의 좌절감을 감지하는 방법이 뭘까? 놀랍게도 정규식 패턴 매칭이었다.

userPromptKeywords.ts 파일에는 "wtf", "this sucks", "fucking broken" 등의 문구를 매칭하는 종합적인 정규식이 포함되어 있었다. AI 추론 대신 문자열 매칭을 택한 것은, 추론 비용을 절감하면서도 빠르게 감정 상태를 파악하기 위한 실용적 선택이었다.

2-6. 44개 비활성 기능 플래그

컴파일 시 비활성화되어 배포판에는 포함되지 않은 기능들도 대거 발견되었다:

  • ULTRAPLAN: 최대 30분간 클라우드에서 심층 기획 수행
  • 다중 AI 워커: 여러 워커를 동시에 생성·관리
  • 브라우저 자동화: 웹 브라우저 직접 제어
  • 음성 코딩 모드: 음성으로 코드 작성

이 기능 플래그들은 사실상 Anthropic의 제품 로드맵을 고스란히 보여주는 셈이다. 코드는 수정할 수 있지만, 이미 공개된 로드맵은 되돌릴 수 없다.

3. API 낭비 버그도 함께 발견

흥미로운 버그도 발견되었다. 자동 압축 기능의 버그로 인해 일부 세션에서 최대 3,272회 연속 실패가 발생하고 있었고, 이로 인해 하루 약 25만 건의 API 호출이 낭비되고 있었다. 사용자들이 체감하는 응답 지연의 원인 중 하나였을 가능성이 있다.

4. 커뮤니티 반응

GitHub 역사상 가장 빠르게 성장한 리포지토리

유출된 코드를 미러링한 GitHub 리포지토리는 하루 만에 4만 건 이상 복제되며, GitHub 역사상 가장 빠르게 성장한 리포지토리가 되었다. Anthropic의 DMCA 요청에도 불구하고, 탈중앙화 미러 사이트에서 "절대 내려지지 않는다"는 메시지와 함께 배포가 계속되었다.

클린룸 오픈소스 재구현

하룻밤 만에 Python 기반의 클린룸(Clean-room) 재구현이 등장했다. 유출 코드를 직접 복사하지 않고, 기능을 분석한 후 처음부터 새로 작성한 것이므로 저작권 문제를 피할 수 있다는 논리였다.

의도적 유출 의혹

일부에서는 이것이 의도적이었다는 주장도 나왔다:

  • 에이프릴 풀 타이밍과 Buddy System 출시 예정일의 일치
  • Bun의 소스맵 버그가 오랫동안 수정되지 않은 점
  • 최근 OpenCode에 보낸 C&D(중단 요청서)로 인한 부정적 여론을 뒤집는 효과
  • Anthropic의 상대적으로 소극적인 DMCA 대응

하지만 대다수의 분석은 "단순한 인적 오류"라는 결론에 무게를 두고 있다. .npmignore 설정 누락, 번들러 기본값 미검증, 그리고 동시에 발생한 axios 악성코드 공격 등이 복합적으로 작용한 결과라는 것이다.

5. Anthropic의 공식 대응

Anthropic은 다음과 같이 공식 입장을 밝혔다:

  • 이번 사건은 릴리스 패키징 과정의 인적 오류
  • 고객 데이터나 인증 정보는 유출되지 않음
  • 모델 가중치나 추론 인프라는 영향 없음
  • 해당 npm 버전은 즉시 삭제 조치

6. 보안 관점에서의 교훈

공급망 보안의 중요성

이번 사건은 npm 생태계의 공급망(Supply Chain) 보안 문제를 다시 한번 부각시켰다. 유출 직후 트로이 목마가 삽입된 변조 버전이 등장해, 3월 31일 00:21~03:29 UTC 사이에 설치한 사용자들이 원격 접근 트로이(RAT)에 노출되었을 가능성도 제기되었다.

배포 전 산출물 검증

개발자로서 이 사건에서 가장 뼈아픈 교훈은:

  • .npmignore / .gitignore 점검: 소스맵, 환경변수, 인증 파일이 포함되지 않는지 반드시 확인
  • 번들러 기본 설정 검증: Bun, Webpack, esbuild 등이 기본으로 생성하는 파일을 파악하고, 배포 시 제외 설정 적용
  • 배포 파이프라인에 자동 검증 추가: .map 파일, 내부 URL, 시크릿 스캔을 CI/CD에 포함
  • 기능 플래그 관리: 미공개 기능은 코드에서 완전히 분리하거나, 별도 브랜치에서 관리
# .npmignore 예시 - 반드시 포함해야 할 항목들
*.map
*.ts
!*.d.ts
src/
tests/
.env*
*.log
coverage/

마치며

이번 Claude Code 소스코드 유출 사건은 여러 측면에서 시사하는 바가 크다.

기술적으로는, 하나의 설정 파일 누락이 51만 줄의 소스코드와 제품 로드맵 전체를 노출시킬 수 있다는 것을 보여주었다. 조직적으로는, 같은 실수가 13개월 만에 반복되었다는 것은 배포 프로세스의 구조적 개선이 필요함을 의미한다.

하지만 동시에, 유출된 코드에서 드러난 Anthropic의 엔지니어링 수준은 인상적이었다. KAIROS의 메모리 통합 아키텍처, 3레이어 메모리 시스템, 정교한 도구 실행 로직 등은 프로덕션 레벨 AI 에이전트가 어떻게 구현되는지를 보여주는 귀중한 레퍼런스가 되었다.

npm 패키지를 배포하는 개발자라면, 오늘 당장 자신의 .npmignore를 확인해보자. 다음 유출 사고의 주인공이 되지 않으려면.