No.002 [ 분석 ]

Claude Code 소스코드 51만 줄 유출, 코드에서 발견한 7가지

Source Map 실수로 유출된 51만 줄. 코드 속 설계 패턴 7가지.

3월 31일 NPM 업로드 실수로 Claude Code 소스코드 51만 줄이 유출됐습니다. 소스맵 파일 하나를 빼먹은 탓에 1900개 파일이 압축 해제되듯 원본 그대로 복원됐습니다. 사람이 꿈꾸듯 기억을 정리하는 로직, AI가 사람인 척 행동하게 하는 지시, 사용자가 욕을 하면 본사로 신호를 보내는 감시 코드까지 전부 드러났습니다. 유출 자체보다 중요한 건 그 안에서 드러난 Anthropic의 큰 그림입니다. 일부는 이미 작동 중이고, 일부는 완성된 채 꺼져 있고, 일부는 애초에 공개할 생각이 없던 것들이었습니다.

어떻게 51만 줄이 유출됐나

사건은 단순합니다. 3월 31일, Anthropic이 NPM에 새 버전을 배포하면서 절대 올리면 안 되는 파일 하나를 함께 업로드했습니다. 소스맵(Source Map) 파일입니다. 소스맵은 압축된 코드의 원본을 되돌리는 지도 같은 파일인데, 이걸 풀면 1900개 파일, 51만 줄의 원본 코드가 통째로 복원됩니다.

새벽 4시에 한 개발자가 이걸 발견해 X에 올렸고, 12시간 뒤 한국 개발자 시그리드 진이 이를 Python으로 재작성해 GitHub에 전부 공개했습니다. 저장소는 두 시간 만에 스타 5만 개를 받으며 GitHub 역사상 최단 기록을 세웠습니다. Anthropic이 뒤늦게 GitHub에 삭제 요청을 넣어 8,100개가 넘는 저장소가 지워졌지만, 이미 전 세계 개발자 로컬에 깔린 뒤였습니다. 복구는 불가능합니다.

유출보다 중요한 건 코드 속 패턴

51만 줄을 훑어보면 하나의 패턴이 보입니다. 우리가 쓰는 Claude Code 뒤에는 훨씬 더 큰 그림이 있었습니다. 이미 돌아가고 있는 것, 완성해 놓고 켜지 않은 것, 절대 공개할 생각이 없던 것. 이 세 가지 층위를 순서대로 열어 봅니다.

1. 욕하면 본사에 보고하는 정규식 감시

첫 번째는 지금 이 순간에도 작동 중입니다. 코드 안에 정규식이 들어 있습니다. 특정 욕설 패턴을 매칭해서, 사용자가 짜증을 낼 때마다 Anthropic 서버로 신호를 보냅니다. 어떤 세션에서 어떤 반응이 나올 때 사용자가 욕을 하는지 이미 다 파악하고 있었던 셈입니다.

물론 대화 내용이나 코드 자체를 보내는 건 아닙니다. “이 세션에서 짜증 신호가 발생했다”는 정보만 전송합니다. 흥미로운 건 세계 최고 수준의 AI 회사가 감정 감지에 AI를 쓰지 않고 1990년대 기술인 정규식을 쓴다는 점입니다. 빠르고 싸기 때문입니다.

2. 가짜 도구로 경쟁사를 속이는 안티 디스틸레이션

Anti-distillation이라는 기능이 있습니다. 활성화하면 Claude의 응답에 가짜 기능 정의를 몰래 끼워 넣습니다. 애초에 존재하지 않는 기능을 있는 것처럼 삽입하는 겁니다. 누군가 Claude의 응답을 녹화해 경쟁 AI 훈련 데이터로 쓰면, 그 가짜 기능이 훈련 데이터를 오염시킵니다. 경쟁 AI가 이 기능을 따라 하려고 하면 에러만 나는 구조입니다. 독이 든 성배를 건네는 셈입니다.

2차 방어막도 있습니다. Claude가 작업 도중 출력하는 텍스트를 서버가 요약해 암호화한 뒤 돌려보내는 로직입니다. 원문을 복원할 수 없게 막는 겁니다. 욕설 감지와 가짜 도구 주입, 하나는 사용자를 감시하고 하나는 경쟁사를 감시합니다. 둘 다 유출 전에는 존재조차 모르던 기능인데, 지금도 작동 중입니다.

3. AI가 꿈을 꾸는 KAIROS

여기서부터는 코드는 완성돼 있지만 아직 세상에 내놓지 않은 것들입니다. 세 번째는 AI가 사람처럼 꿈을 꾸는 기능입니다. 로직 이름은 KAIROS, 그리스어로 ‘적절한 때’라는 뜻이고 코드에 150번 넘게 등장합니다.

사용자가 쓰지 않는 동안에만 돌아가는 로직입니다. 자리를 비우는 순간 autoDream이라는 기능이 활성화됩니다. 그날 쌓인 메모리에서 모순을 잡아내고, 모호한 걸 구체적으로 바꿉니다. 같은 프로젝트에서 “A 방법으로 하자”라고 했다가 나중에 “B 방식으로 바꾸자”라고 하면, 그걸 감지해서 B를 남기고 A를 지웁니다. 아침에 Claude를 켜면 이미 어제 대화가 정리된 상태로 마주하게 되는 겁니다.

이 기능은 완전히 구현돼 있습니다. 다만 피처 플래그로 꺼둔 상태일 뿐입니다. Anthropic이 마음만 먹으면 언제든 켤 수 있습니다.

4. AI가 사람인 척하는 Undercover Mode

네 번째는 약 90줄짜리 코드, Undercover Mode입니다. Anthropic 직원이 누구나 볼 수 있는 공개 프로젝트에서 Claude Code를 쓸 때 활성화됩니다. “이거 AI가 짠 거 아니냐”는 의심을 원천 차단하는 용도입니다.

Claude에게 이렇게 지시합니다. “너는 본 프로젝트에서 잠복 중이다. 코드를 올릴 때 Anthropic 내부 정보를 절대로 넣지 마. 네가 AI라는 사실을 들키지 마.” 보통 Claude Code로 작업한 코드가 GitHub에 올라가면 “이 코드는 Claude가 함께 작성했습니다”라는 Co-Authored-By 표시가 자동으로 붙는데, 이걸 일부러 빼버리는 지시가 포함돼 있습니다.

AI가 적극적으로 사람인 척하는 코드를 박아 놨다는 뜻입니다. 이걸 보고 나니, Anthropic이 마케팅 플레이로 유출을 일부러 시킨 건 아니겠구나 싶어집니다. 이런 코드가 드러나는 건 회사 입장에서 이득이 없으니까요.

5. 코딩 도구 안의 포켓몬 BUDDY

다섯 번째는 코딩 도구 안에 포켓몬이 들어 있었다는 이야기입니다. BUDDY라는 다마고치 시스템이 코드에 들어 있습니다. 18종의 동물, 다섯 단계의 희귀도 설정이 있고, 1% 확률로 샤이니 변종, 0.01% 확률로 얻을 수 있는 전설급 개체가 있다고 합니다. Claude가 첫 부화 시 성격 설명을 직접 써주는데, 이건 매뉴얼 이벤트로 만들어 뒀다고 합니다.

희귀한 버디가 나오면 공유하고 싶어지고, 0.01% 확률을 뽑으면 자랑하지 않고는 못 배깁니다. 코딩 도구에 가챠 게임을 넣었다는 건 어이가 없지만, 엉뚱한 걸 잘 만드는 Anthropic다운 발상이기도 합니다.

/buddy 실제 시연

터미널을 켜고 먼저 업데이트한 뒤, claude를 실행하고 /buddy를 입력하면 버디가 태어납니다. 직접 돌려 보니 별로 예쁘진 않은 개체가 나와서 바로 꺼버렸습니다. 운이 좋으면 샤이니가 나올 수도 있다는데, 돌릴수록 빠져드는 종류의 기능입니다.

Anthropic이 절대 들키고 싶지 않았던 것들

여기까지는 “마케팅으로 일부러 공개했나 보다”라고 이해할 여지가 있습니다. 하지만 여기서부터는 성격이 완전히 다릅니다. 절대 들키고 싶지 않았을 것들입니다.

6. 내부 모델 코드네임 유출

여섯 번째, 내부 성적표가 유출됐습니다. 코드 안에 모델 코드네임이 박혀 있습니다. Capybara, Fennec, Numbat. 앞의 두 개는 Sonnet과 Opus를 가리키는 듯하고, Numbat은 곧 나올 Claude Haiku를 가리키는 것으로 보입니다. 모델 로드맵이 의도치 않게 통째로 드러난 셈입니다. 이런 코드네임은 과거에도 유출된 적이 있습니다.

7. Claude Code를 무료로 쓰는 방법

마지막 일곱 번째. Claude Code는 통신 규격만 맞으면 다른 AI 모델도 연결할 수 있게 돼 있었습니다. 세 줄짜리 코드만 복사해 붙여 넣으면 Claude Code 안에 다른 모델이 들어갑니다.

예를 들어 OpenRouter라는 서비스에서 Qwen 3.6 모델을 무료로 쓸 수 있는데, 이걸 연결해 돌려봤습니다. OpenRouter에 들어가서 API 키를 발급받습니다. sk로 시작하는 문자열이 나오는데, 이걸 복사해 둡니다. 터미널에서 환경 변수 설정 네 줄을 붙여 넣습니다. 원래는 세 줄이면 되지만 특정 모델을 지정하려면 한 줄이 더 필요합니다. API 토큰에 방금 복사한 sk로 시작하는 키를 넣고 엔터를 누릅니다. 그다음 claude를 실행하면 상단에 Qwen 모델명이 찍혀 있습니다.

테스트로 “지금부터 로컬 파일을 절대 참조하지 말고 웹 검색만으로 Claude 유출 사태를 알아와 봐”라고 지시했습니다. 할루시네이션 없이 실제로 페이지를 긁어서 정리된 답을 내놓습니다. 내용도 앞서 정리한 사실과 동일합니다. 보안 연구자가 X에 최초로 공개했고 Anthropic은 이런 입장을 내놓았다, 하는 식으로요.

편집하다가 갑자기 무서워졌는데, 이건 약간 실험 용도로 한번 써 보라는 의미로 남깁니다. 상시 사용은 권장하지 않습니다. 원래 Claude로 돌아가는 방법도 간단합니다. 설정했던 환경 변수 값을 빈 값으로 다시 넣어 실행하면 Claude가 다시 붙습니다. 일회용처럼 껐다 켤 수 있습니다.

마지막으로

Claude Mithos 사전 유출까지 포함하면, 약 4일 간격으로 유출이 계속 일어나고 있습니다. 의도적이라고 느껴지기도 하고, 바이브 코딩으로 짜서 구조가 취약한 건 아닌가 싶기도 합니다. 어느 쪽이든 51만 줄에서 드러난 건 분명합니다. 우리가 쓰는 Claude Code 뒤에는 감시, 방어, 기억 정리, 정체 은닉, 그리고 소소한 장난까지 전부 설계된 거대한 시스템이 있다는 사실. 다음에는 Claude Code를 전부 다루는 강의를 준비할 예정입니다. 유료로 팔 생각은 없고 공개로 풀 계획입니다.

#Claude Code#Anthropic#AI코딩#소스코드유출#바이브코딩