npm 배포 한 번에 51만 줄 유출 — 클로드코드 소스코드 전체가 공개됐다

클로드코드

앤트로픽의 클로드코드 CLI 전체 소스 코드가 밖으로 나왔어요. 보안 침해가 아니에요. 빌드 파이프라인에서 소스 맵 파일을 제거하지 않은 채 npm에 배포한 거예요. 한마디로, 인적 오류.

지난달 31일 보안 연구원 차오판 쇼우가 X에 이 사실을 알렸어요. 앤트로픽이 그날 배포한 클로드코드 npm 패키지 버전 2.1.88에 포함된 소스 맵 파일을 통해 전체 소스 코드를 확인할 수 있다는 것. 클로드 모델 자체는 포함되지 않았지만, 그 외의 거의 모든 게 나왔어요.

차오판 쇼우가 공개한 클로드코드 맵 파일

51만 2,000줄 이상의 코드. 약 1,900개의 타입스크립트 파일. 슬래시 명령어 라이브러리 전체. 내장 도구 전부. 클로드코드가 어떻게 설계되고 어떻게 작동하는지, 설계도 전체가 공개된 셈이에요.

차오판 쇼우가 관련 파일의 아카이브 링크를 공유하자마자 깃허브 공개 저장소에 게시됐어요. 수만 회 포크. 속도가 무서웠어요.

커뮤니티는 역설계에 돌입하고, 전용 웹사이트까지 만들었다

클로드코드의 비밀을 파헤치기 위한 전용 웹사이트 CCLeaks까지 만들어졌어요.

CCLeaks 홈페이지

X의 @himanshustwts는 클로드코드의 메모리 아키텍처에 대한 기술적 구성을 분석해 공유했어요. 그에 따르면 클로드코드의 메모리 시스템은 제약을 갖고 구조화돼 있으며, 스스로 복구되는 시스템이래요. 메모리는 저장소가 아니라 인덱스이고, 지식은 외부에 있고, 메모리 마크다운 파일의 내용은 포인터만 있다고. 인덱스, 주제별 파일, 트랜스크립트 등 3계층 구조로 설계됐으며 엄격한 글쓰기 원칙을 갖고 있다는 거예요.

몬타의 선임 소프트웨어 엔지니어 가브리엘 안하이아는 전체 소스코드의 내용을 해설했어요. 정리하면 이래요.

클로드코드는 노드JS가 아니라 Bun으로 실행돼요. 리액트와 Ink를 활용해 터미널 UI를 렌더링하고, 모듈식 도구 기반 아키텍처를 갖고 있어요. 플러그인 방식의 툴 아키텍처를 사용하는데, 파일 읽기, 배시 실행, 웹 가져오기, LSP 통합 등 각 도구는 권한을 부여받는 구조예요. 기본 도구 정의에만 2만 9,000줄의 타입스크립트 코드로 이뤄져 있어요.

클로드코드의 핵심인 쿼리 엔진은 4만 6,000줄의 단일 모듈이에요. 모든 LLM API 호출, 스트리밍, 캐싱, 오케스트레이션을 이 하나의 모듈에서 처리해요. 4만 6,000줄짜리 단일 모듈이라니. (읽다가 한참 멈췄어요.)

복잡하고 병렬 처리가 가능한 작업을 위해 하위 에이전트, 이들이 '스윔(swim)'이라고 부르는 걸 생성할 수 있어요. 각 에이전트는 특정 도구 권한을 갖고 자체 컨텍스트에서 실행돼요.

IDE 브릿지 시스템인 양방향 통신 계층은 JWT 인증 채널을 통해 VS코드, 젯브레인스 같은 IDE 확장과 CLI를 연결해요. 그리고 세션 간에 사용자, 프로젝트, 기본 설정 등에 대한 컨텍스트를 저장하는 파일 기반 메모리 디렉토리를 갖고 있고요.

클로드코드 메모리 아키텍처

이걸 보면 느낌이 와요. 그냥 CLI 도구가 아니에요. 정교하게 설계된 에이전트 시스템이에요.

앤트로픽의 대응 — "인적 오류였다"

앤트로픽은 "클로드코드 릴리스에 내부 소스 코드가 포함되는 오류가 발생했다"고 인정했어요. "고객의 민감 데이터나 자격증명은 유출되지 않았다"고 선을 그었고, "보안 침해가 아닌 인적 오류로 인한 릴리스 패키징 문제"라며 재발 방지 조치를 취하고 있다고 덧붙였어요.

근데 문제는 이미 벌어진 뒤라는 거잖아요.

경쟁사와 커뮤니티가 클로드코드의 작동 방식과 상세한 설계도를 들여다볼 수 있게 됐어요. 사이버공격자 입장에서는 앤트로픽의 안전장치를 우회해 클로드코드를 공격할 다양한 방법을 연구할 수 있는 교본을 얻은 셈이고요. 현재 깃허브에 소스를 올린 사용자는 지적재산권 침해 시비를 우려해 소스코드 공개 대신 파이썬 기능 포트를 제공하는 저장소로 용도를 변경했지만, 이미 수만 회 포크와 미러 서버가 등장한 뒤였어요.

타이밍이 최악이었다

이 사건이 앤트로픽에 특히 타격이 되는 이유가 있어요. 앤트로픽은 미 국방부와 AI 안전 해제를 두고 갈등하면서 대중의 호응을 얻어 앱 사용자 수를 비약적으로 늘린 상태였거든요. 클로드코드는 기업과 개발자 사이에서 높은 인기를 구가하던 핵심 제품이었고요. 성공의 한가운데서 터진 사고예요.

맵 파일은 난독화나 번들링된 코드를 디버깅하기 위한 용도로 사용돼요. 일반적으로 현업 시스템 환경에서는 필요하지 않아서 외부에 공개되는 소스에서 제외하는 게 권장되는, 기본 중의 기본이에요. 사람의 실수로 공개되는 코드에 맵 파일을 남겨뒀다는 것 자체가 운영 신뢰성을 우려하게 만들더라고요.

안하이아의 말이 정곡이었어요. "단 하나의 잘못된 구성이나 파일 필드로 패키지의 모든 게 노출될 수 있다." 그리고 한마디 더. "아이러니하게도 엔지니어가 더 나은 코드를 작성하도록 돕기 위해 설계된 도구가 빌드 구성 오류 때문에 무용지물이 됐다."

51만 줄짜리 정교한 에이전트 시스템을 만든 팀이 .npmignore 한 줄을 빠뜨렸어요. 결국 보안 사고의 원인은 거창한 게 아니에요. 모든 엔지니어링 팀에 대한 경고이기도 하죠. 빌드 파이프라인을 점검하고, 게시 구성에서 제외해야 할 파일이 있는지 확인하라는 것. 단 하나의 잘못된 설정이 전부를 드러낼 수 있으니까요.