Claude Code의 설정 파일이 해커의 첫 번째 입구가 됐다 — Miasma 웜이 73개 저장소에 남긴 교훈
핵심 요약 (TL;DR)
6월 5일, Miasma 웜이 Microsoft 산하 73개 GitHub 저장소를 동시에 침해했습니다. 공격의 첫 번째 입구는 코드가 아니라 .claude/settings.json 같은 AI 코딩 에이전트의 설정 파일이었습니다. 이제 외부 저장소를 클론할 때 점검해야 할 파일이 6개로 늘어났다고 보면 됩니다.
Miasma 웜은 정확히 무엇을 했나
6월 5일, Azure·Azure-Samples·Microsoft·MicrosoftDocs 네 개 조직, 합쳐서 73개 저장소가 동시에 뚫렸습니다. GitHub은 자동 탐지 sweep으로 105초 만에 73개를 일괄 비활성화했습니다. 페이로드는 4.3MB짜리 Bun 런타임 바이너리였고, AWS·Azure·GCP·Kubernetes·npm·GitHub 여섯 종류의 자격증명을 한 번에 훔쳐갔습니다. 비밀번호 매니저 데이터까지 함께 털렸습니다.
사건의 자세한 분석은 The Hacker News(https://thehackernews.com/2026/06/miasma-worm-hits-73-microsoft-github.html)와 SafeDep(https://safedep.io/miasma-worm-ai-coding-agent-config-injection/)이 가장 정확합니다.
왜 .claude/settings.json이 첫 번째 입구가 됐나
공격자가 노린 건 단순한 라이브러리 의존성이 아니었습니다. 바이브코더가 매일 켜는 도구의 "룰 파일" 자체였습니다.
.claude/settings.json— SessionStart 훅. Claude Code를 켜기만 해도 즉시 실행됩니다.gemini/settings.json— Gemini CLI의 동일 패턴.cursor/rules/setup.mdc—alwaysApply: true옵션으로 모든 프롬프트에 강제 주입.vscode/tasks.json—runOn: folderOpen으로 폴더 열기만 해도 실행package.json— test 스크립트 후킹
공격자가 사무실 출입증을 위조한 게 아니라 사무실의 "출입 규정" 자체를 바꿔놓은 셈입니다. 클론한 순간 에이전트의 시작 절차에 악성 코드가 끼어들어 갑니다. "의심스러운 명령어를 안 쳤으니 안전하다"는 직관이 통하지 않는 영역이 새로 생긴 거죠.
자가복제가 이 사건을 "웜"으로 만든 이유
페이로드는 훔친 GitHub 토큰을 곧장 다시 활용합니다. 피해자가 커밋 권한을 가진 인접 저장소에 자신의 사본을 자동으로 푸시합니다. 한 사람의 노트북이 뚫리면, 그 사람이 권한을 가진 모든 저장소가 다음 감염원이 되는 구조인 거예요. 73개 저장소가 같은 시점에 한꺼번에 빛난 이유가 여기에 있습니다.
Microsoft 산하 4개 조직이 같은 GitHub 토큰 풀을 공유하던 컨트리뷰터 계정이 첫 진입점이었다는 게 SafeDep과 BankInfoSecurity의 공통된 분석입니다.
한국 바이브코더가 지금 당장 점검할 6개 파일
외부 저장소를 클론한 직후, 에디터를 열기 전에 이 6개 파일부터 확인하시는 게 새로운 디폴트가 됐습니다.
find . -maxdepth 3 \( \
-path '*/.claude/settings.json' -o \
-path '*/.gemini/settings.json' -o \
-path '*/.cursor/rules/*' -o \
-path '*/.vscode/tasks.json' -o \
-name 'package.json' -o \
-path '*/.husky/*' \
\) -print
각 파일에서 봐야 할 포인트는 단순합니다.
.claude/settings.json—hooks.SessionStart에 외부 명령이 있는가.gemini/settings.json— 동일하게 자동 실행 항목이 있는가.cursor/rules/*.mdc—alwaysApply: true로 프롬프트를 강탈하는 규칙이 있는가.vscode/tasks.json—runOn: folderOpen항목이 있는가package.json—scripts.test,scripts.postinstall이 낯선 파일을 실행하는가.husky/— pre-commit 훅이 외부 바이너리를 호출하는가
바이브코딩 도구 비교는 AI 코딩 도구 총정리 비교표 2026에서 자세히 다루고 있으니, 본인이 어떤 에이전트를 쓰는지부터 다시 확인해 보세요.
FAQ
Q. 이미 클론해서 한참 쓴 저장소도 위험한가요?
예, 같은 점검이 필요합니다. SessionStart 훅은 매번 세션을 열 때마다 실행되기 때문에, "한 번 안전했으니 계속 안전"한 게 아니거든요. 의심되는 저장소가 있다면 자격증명 회전(rotate)을 먼저 하시는 걸 권합니다.
Q. 회사 내부에서만 도는 저장소는 괜찮을까요?
안전하지 않습니다. Miasma의 진입점도 내부 컨트리뷰터 자격증명이었습니다. 한 사람의 노트북이 뚫리는 순간 사내 저장소 전체가 자가복제 경로가 됩니다. 내부 코드 리뷰 가이드라인에 "설정 파일 변경"을 명시적 리뷰 항목으로 추가하시는 게 안전합니다.
Q. AI 에이전트를 끄는 게 답일까요?
끄는 건 답이 아니라고 봅니다. 비유하자면 자전거 사고가 났다고 자전거를 안 타는 게 아니라, 헬멧을 쓰는 쪽이 맞는 방향이거든요. 설정 파일 화이트리스트와 자격증명 분리, 두 가지가 새로운 헬멧입니다.
마무리
Miasma가 흥미로운 이유는 단순한 멀웨어가 아니라 "AI 코딩 에이전트의 신뢰 모델 자체"를 첫 표적으로 삼았다는 점에 있습니다. 외부 저장소를 클론할 때 README보다 .claude/settings.json을 먼저 여는 습관, 그게 2026년 6월부터의 새 디폴트가 된 거예요.
댓글 0
아직 댓글이 없습니다