본문으로 건너뛰기
피드

LiteLLM PyPI 공급망 공격 - 발견부터 공개까지 72분의 기록

security 약 6분

litellm v1.82.8 PyPI 공급망 공격의 발견과 대응 과정을 분 단위로 기록한 트랜스크립트. 엔지니어가 노트북 멈춤 현상을 Claude Code로 조사하다 악성코드를 발견하고 72분 만에 공개 대응을 완료함.

  • 1

    litellm v1.82.8이 PyPI에 악성코드 포함 상태로 업로드됨 (GitHub에는 v1.82.6까지만 존재)

  • 2

    .pth 파일이 Python 시작 시 자동 실행되어 SSH키, AWS, GCP, K8s 크리덴셜 등을 탈취하고 RSA+AES 암호화 후 유출

  • 3

    패키지 업로드 후 6분 만에 첫 피해자 감염, 72분 만에 공개 대응 완료

  • 4

    포크 폭탄은 .pth의 subprocess 재귀 호출로 인한 부작용으로 11,000개 프로세스 생성

  • 5

    Claude Code가 악성코드 분석부터 블로그 포스트 작성, PR 생성까지 전 과정을 지원

⚠️주의

> 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-legacyuvx로 실행될 때 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분 만에 전체 대응을 완료했다는 거임.

보안 전문가가 아닌 일반 개발자가 AI 도구만으로 공급망 공격을 실시간 탐지하고 대응한 첫 사례. AI가 공격 도구로만 쓰이는 게 아니라 방어 속도도 극적으로 높일 수 있다는 걸 보여줌.

댓글

댓글

댓글을 불러오는 중...

security

윈도우 11 BitLocker 우회 취약점 ‘YellowKey’ 공개, WinRE 경로가 문제로 지목됨

YellowKey라는 BitLocker 우회 취약점 공개 글이 올라왔고, 작성자는 Windows Recovery Environment에만 있는 특정 구성요소가 보호된 볼륨 접근을 허용한다고 주장한다. 공개 내용은 Windows 11과 Windows Server 2022/2025가 영향권이고 Windows 10은 제외된다고 설명하며, Microsoft 보안 조직과의 공개 조율도 언급한다.

security

해고 직후 정부 DB 96개 삭제 혐의, 내부자 접근권 회수의 무서운 사례

미국 정부 고객을 상대하던 IT 업체에서 해고된 쌍둥이 형제가 몇 분 뒤 정부 정보가 담긴 데이터베이스 96개를 삭제한 혐의를 받고 있다. 기사에는 이들이 이전에도 컴퓨터 범죄 전력이 있었고, 회사 네트워크에서 5,400개 계정 정보를 모아 Python 스크립트로 외부 서비스 로그인을 시도했다는 정황도 나온다.

security

EFF, 국경 전자기기 수색에도 영장이 필요하다고 제4순회항소법원에 주장

EFF와 ACLU 등은 미국 제4순회항소법원에 국경에서 휴대폰·노트북 같은 전자기기를 수색하려면 영장이 필요하다는 의견서를 냄. 사건은 Dulles 공항에서 미국 시민의 휴대폰이 영장 없이 수색된 뒤 형사 사건으로 이어진 사례이며, EFF는 수동 수색과 포렌식 수색 모두 같은 높은 기준을 적용해야 한다고 주장함.

security

안드로이드 17, 내 폰 OS가 진짜인지 직접 보여준다

구글이 안드로이드 17에 OS 검증 기능을 넣는다. 사용자는 기기가 공식 안드로이드 빌드를 돌리고 있는지, 부트로더 상태와 빌드 정보까지 확인할 수 있고, 구글 앱과 API의 정식 배포 여부를 검증하는 공개 원장도 제공된다.

security

마이크로소프트 취약점 공개전이 또 터짐, 이번엔 2건

익명의 공개자가 마이크로소프트 관련 취약점 2건을 추가로 공개했다고 주장했어. 구체적인 기술 분석은 본문에 거의 없지만, 패치 튜즈데이를 앞두고 더 큰 공개를 예고해 윈도우 보안 운영팀 입장에선 신경 써야 할 신호야.