0
LiteLLM PyPI 공급망 공격 - 발견부터 공개까지 72분의 기록
security
요약
기사 전체 정리
LiteLLM PyPI 공급망 공격 - 발견부터 공개까지 72분의 기록
주의
> litellm v1.82.8은 PyPI에 악성코드가 포함된 상태로 업로드됨. GitHub에는 v1.82.6까지만 존재하며, 해당 버전은 PyPI 퍼블리싱 크리덴셜 탈취를 통해 직접 업로드된 것으로 추정됨.
사건 발견 경위
- 엔지니어가 작업 중 노트북이 갑자기 멈춤. htop으로 확인해보니
exec(base64.b64decode('...'))패턴의 Python 프로세스가 11,000개 넘게 생성되어 있었음 - 강제 재부팅 후 Claude Code로 원인 조사를 시작함. 처음에는 Claude Code의 런어웨이 루프로 의심했는데, 실제로는 그게 아니었음
- 조사하다 보니
litellm_init.pth라는 34KB 파일이 진범으로 밝혀짐..pth파일은 Python 시작 시 자동 실행되는 파일이라는 거임
악성코드 동작 방식
- 감염 경로: Cursor의
futuresearch-mcp-legacy가uvx로 실행될 때 litellm을 전이 의존성으로 설치함. litellm v1.82.8이 PyPI에 올라온 지 단 6분 만에 피해자 시스템에 설치됨 - 크리덴셜 탈취 대상: SSH 키, AWS 시크릿, GCP 인증정보, Kubernetes 토큰, .env 파일, 데이터베이스 비밀번호, 암호화폐 지갑, 쉘 히스토리까지 전부 긁어감
- 데이터 유출: 수집한 데이터를 RSA+AES로 암호화한 뒤
models.litellm.cloud로 전송함. 이 도메인은 정상 litellm 인프라가 아님 - 지속성 확보:
~/.config/sysmon/sysmon.py에 systemd 서비스로 영구 설치를 시도함. 다행히 강제 재부팅으로 파일이 0바이트 상태에서 중단됨 - K8s 확산: 클러스터 내 모든 노드에 privileged alpine:latest 파드를 생성해서 악성코드를 퍼뜨리려 함
- 포크 폭탄:
.pth파일이subprocess.Popen으로 자식 Python 프로세스를 생성하는데, 자식 프로세스도 .pth를 트리거하니까 무한 재귀가 발생해서 11,000개 프로세스가 생긴 거임. 이건 의도한 게 아니라 부작용이었음
타임라인 (UTC 기준)
| 시간 | 이벤트 |
|---|---|
| 10:52 | 악성 litellm v1.82.8 PyPI에 업로드 (GitHub 태그 없음) |
| 10:58 | futuresearch-mcp-legacy가 감염된 버전을 의존성으로 설치 |
| 11:07 | 악성코드가 persistence 설치 시도 |
| 11:09 | 포크 폭탄으로 인한 강제 재부팅 (persistence 중단됨) |
| 11:13 | Claude Code로 조사 시작 |
| 11:40 | litellm 패키지에서 악성코드 확인 |
| 11:58 | Docker 컨테이너에서 PyPI 다운로드하여 악성코드 존재 재확인 |
| 12:00 | PyPI 보안팀과 LiteLLM 메인테이너에게 이메일 발송 |
| 12:02 | Claude Code가 공개 블로그 포스트 작성 + PR 생성 (3분 소요) |
| 12:04 | Reddit(r/Python, r/netsec, r/LocalLLaMA)에 공유 |
핵심 포인트
- GitHub에 없는 버전: v1.82.8은 PyPI에만 존재하고 GitHub 릴리스 태그가 없음. 누군가 PyPI 퍼블리싱 크리덴셜을 탈취해서 직접 올린 것으로 보임
- K8s 확산은 실패함: 악성코드가 macOS에서 실행됐기 때문에 Linux 전용 경로(
/var/run/secrets/kubernetes.io/serviceaccount/token)가 존재하지 않아서 K8s 횡이동이 실패함 - AI가 탐지 속도를 높임: 보안 전문가가 아닌 개발자가 Claude Code의 도움으로 72분 만에 전체 분석과 공개 대응을 완료함. Claude Code가 블로그 포스트 작성과 PR 생성까지 3분 만에 해냄
중요
> 이 사건은 PyPI 공급망 공격이 얼마나 빠르게 진행될 수 있는지 보여줌. 패키지 업로드 후 6분 만에 첫 피해자가 감염됐고, 보안 전문가가 아닌 일반 개발자가 AI 도구만으로 72분 만에 전체 대응을 완료했다는 거임.
댓글
댓글
댓글을 불러오는 중...