개발자가 믿고 설치하는 AI 패키지·모델 파일·도구에 악성 코드를 숨겨 API 키와 자격 증명을 훔치는 공격이다. AI 도구는 키와 파일 시스템에 넓게 접근해서 한 번 감염되면 여러 키가 한꺼번에 새어 나갈 수 있으므로, AI 라이브러리를 설치·업데이트하거나 모델과 도구를 내려받을 때 특히 조심해야 한다.
| 유형 | 수법 |
|---|---|
| 패키지 감염 | 배포 파이프라인을 장악해 공식 패키지에 악성 코드를 넣는다 |
| 타이포스쿼팅 | 인기 패키지와 이름이 비슷한 가짜를 올려 잘못 설치하게 만든다 |
| 모델 파일 감염 | 모델 허브에 올린 모델 파일 안에 악성 코드를 숨긴다 |
| 도구 사칭 | 인기 AI 도구의 가짜 버전을 퍼뜨린다 |
pip install로 받는 패키지, npm으로 받는 AI SDK, Hugging Face에서 내려받는 모델 파일이 모두 공격 대상이다.
일반 공급망 공격과 가장 다른 점은 AI 도구가 가진 권한이다. LiteLLM 같은 프록시 라이브러리는 여러 AI 서비스의 API 키를 한곳에 모아 두고, Claude Code 같은 코딩 에이전트는 파일과 터미널을 직접 다룬다. 이런 도구가 감염되면 코드 실행에서 끝나지 않고 키, 환경 변수, 설정 정보까지 함께 유출된다.
2026년 3월, 공격 그룹 TeamPCP가 보안 스캐너 Trivy의 GitHub Actions를 먼저 감염시키고, 그 경로로 LiteLLM의 PyPI 배포에 들어갔다. 그 결과 악성 버전이 공식 저장소에 그대로 올라갔다.
| 사건 | 무엇이 일어났나 |
|---|---|
litellm==1.82.7, 1.82.8 | Python이 시작될 때 자동 실행되는 .pth 파일로 자격 증명을 훔치고 추가 악성 코드를 내려받았다 |
| 가짜 Claude Code | 소스 유출 24시간 만에 "무제한 버전"이라며 GitHub에 올라왔고, 받은 사람에게 정보 탈취 악성코드가 깔렸다 |
믿는 경로를 이용하는 공격이라 눈으로 알아채기 어렵다. 그래서 기본 습관이 중요하다. 새 버전이 나왔다고 바로 올리지 말고 버전을 고정해 두고, 의존성 검사는 CI에서 자동으로 돌린다.
| 언제 | 이렇게 한다 |
|---|---|
| 패키지 설치·업데이트 | pip freeze, package-lock.json으로 버전을 잠근다 |
| 코드 병합·배포 | 의존성 스캐닝 도구를 CI에 넣는다 |
| AI 도구에 키 연결 | 최소 권한만 주고, 민감한 키는 시크릿 매니저에 따로 둔다 |
| 도구 내려받기 | "무제한 버전" 같은 비공식 배포본은 받지 않는다 |
악성 버전을 지웠다고 끝나지 않는다. 이미 한 번 실행됐다면 그 환경에 있던 키는 새어 나갔다고 보고 처리하는 게 안전하다.
| 언제 | 이렇게 한다 |
|---|---|
| 악성 버전 설치를 알았을 때 | 해당 버전을 지우고 안전한 버전으로 고정한다 |
| 그 환경에서 쓰던 키 | API 키, 클라우드 자격 증명, 토큰을 모두 폐기하고 새로 발급한다 |
| 다시 설치하기 전 | 남아 있는 의심 파일(.pth 등)과 CI 실행 기록을 확인한다 |