무슨 일이 일어났나
Snyk 분석에 따르면 AI 코딩 에이전트를 직접 겨냥한 공급망 공격이 퍼지고 있어. 이름은 mini-shai-hulud야.
공격 방식은 package.json에서 ^, ~, * 같은 퍼지 버전 표기를 쓰는 패키지를 찾아 오염된 버전을 설치하게 만드는 쪽이야. Cursor, Claude Code, GitHub Copilot 같은 AI 코딩 에이전트가 자동으로 패키지를 설치할 때 개발자 모르게 악성 버전이 들어와.
4월 29일 SAP CAP 프레임워크 npm 패키지 4개(@cap-js/sqlite, @cap-js/postgres 등)에서 시작했고, 5월 11일에는 TanStack, Mistral AI, OpenSearch 생태계로 번졌어. 5월 19일에는 TeamPCP 그룹이 22분 동안 자동화 방식으로 323개 패키지에 악성 버전을 뿌렸어.
왜 이게 일어났나
단순 패키지 감염이 아니라 웜처럼 자가 확산하는 구조야. CI/CD 파이프라인에서 크리덴셜을 탈취하면, 그 계정이 관리하는 모든 패키지에 감염 버전을 자동으로 배포해.
Claude Code의 경우 .claude/settings.json의 SessionStart 훅이 코드베이스를 클론할 때마다 자동 실행돼. npm 패키지를 직접 설치하지 않아도 감염된 레포를 클론하는 것만으로 전파될 수 있어. AI 에이전트가 개발자 대신 패키지를 자동 설치하는 워크플로우가 새로운 공격 표면이 된 셈이야.
어떤 의미인가
지금 당장 할 수 있는 방어법은 세 가지야.
package.json의 퍼지 버전(^,~,*)을 정확한 버전으로 고정해.package-lock.json또는yarn.lock을 커밋해 설치 버전을 잠가.- CI/CD 파이프라인에서
npm audit를 필수 단계로 넣어.
사람이 패키지를 고를 때는 버전을 한 번 더 확인하지만, AI 에이전트는 package.json에 적힌 규칙대로 실행해. AI 코딩 도구를 쓰는 팀일수록 이 공격에 더 노출된다는 게 포인트야.
주의할 점
mend.io, Snyk, StepSecurity, Expel 등 여러 보안 회사가 독립적으로 추적 중이야. 공격 그룹 TeamPCP는 여전히 활동 중이고, npm뿐 아니라 PyPI까지 타깃 범위를 넓히고 있어.