LiteLLM 공급망 공격에 대한 분 단위 대응 기록

2 hours ago 1
  • PyPI를 통해 배포된 LiteLLM 1.82.8 악성 패키지 감염을 실시간으로 탐지하고 분석한 분 단위 대응 일지
  • 감염은 Cursor IDE 자동 업데이트 중 발생했으며, litellm_init.pth 파일이 실행되어 자격 증명 탈취와 시스템 감염을 유발
  • 악성 코드는 SSH 키·클라우드 인증 정보 수집, Kubernetes 확산 시도, 포크 폭탄 생성 등 복합적 행위를 수행
  • PyPI 보안팀과 LiteLLM 유지관리자에게 즉시 보고되어 패키지 격리 및 CVE 등록으로 이어짐
  • Claude Code 등 AI 기반 코드 분석 도구가 공격 탐지에 핵심 역할을 하며, AI 생태계 공급망 보안 강화 필요성을 드러냄

LiteLLM 공급망 공격 대응 기록

  • LiteLLM 1.82.8 버전이 PyPI를 통해 배포된 악성 패키지로 확인되어, 감염 탐지부터 격리까지의 과정을 분 단위로 기록한 대응 일지
  • 감염은 Cursor IDE의 자동 업데이트 과정에서 발생했으며, Claude Codeuv 패키지 관리자를 통해 설치된 의존성 중 litellm_init.pth 파일이 실행되어 시스템 감염을 유발
  • 공격은 자격 증명 탈취, 시스템 지속성 설치, Kubernetes 확산 시도, 포크 폭탄(fork bomb) 을 포함한 복합적 행위로 구성
  • PyPI 보안팀과 LiteLLM 유지관리자에게 즉시 보고되어 패키지 격리 및 CVE 발급으로 이어짐
  • AI 기반 코드 분석 도구가 실시간 악성 행위 탐지 및 분석에 핵심 역할을 수행

초기 탐지와 시스템 이상 징후

  • 11:13 UTC경 macOS 노트북에서 11,000개 이상의 Python 프로세스가 생성되어 시스템이 정지 상태에 진입
    • exec(base64.b64decode('...')) 형태의 명령이 반복 실행되며 CPU와 메모리를 포화시킴
    • 강제 종료 후 재부팅 시 지속성(persistence) 관련 흔적은 발견되지 않음
  • 초기에는 Claude Code의 내부 루프나 uv run 스크립트 오류로 인한 비악성 루프 현상으로 판단
  • 이후 htop 스크린샷과 로그를 통해 base64 인코딩된 Python 스크립트가 반복 실행된 사실이 확인됨

감염 원인 규명

  • 11:40경 설치된 Python 도구 내에서 litellm_init.pth 파일이 발견되어 악성 행위로 판명
    • .pth 파일은 Python 시작 시 자동 실행되며 모든 Python 프로세스에서 동작
    • SSH 키, 클라우드 자격 증명, 데이터베이스 비밀번호, 환경 변수, 쉘 히스토리 등을 수집
    • 수집된 데이터는 RSA 암호화 후 https://models.litellm.cloud/로 전송
    • ~/.config/sysmon/sysmon.py에 지속성 설치를 시도했으나 강제 재부팅으로 중단
  • 감염은 Cursor IDE의 자동 업데이트(10:58 UTC) 중 발생
    • futuresearch-mcp-legacy 확장이 uvx를 통해 litellm 1.82.8을 다운로드
    • 해당 버전은 PyPI에만 존재하며 GitHub 릴리스 태그가 없음
    • PyPI 업로드 시각은 10:52 UTC로, 감염 직전 배포된 것으로 확인

악성 코드 구조

  • 1단계(litellm_init.pth): Python 시작 시 자동 실행되어 base64 인코딩된 페이로드를 디코딩 후 실행
  • 2단계: RSA 공개키 포함, 탈취 데이터 암호화용
  • 3단계(B64_SCRIPT): 실제 자격 증명 수집 및 전송 수행
  • 지속성 설치: sysmon.py를 systemd 서비스로 등록 시도
  • Kubernetes 확산 코드: alpine:latest 이미지를 이용해 각 노드에 privileged pod 생성 시도
  • 포크 폭탄 원인: subprocess.Popen([sys.executable, "-c", ...]) 호출이 자식 프로세스에서도 .pth를 재실행하여 무한 루프 발생

피해 범위 및 대응 조치

  • 노출된 자격 증명

    • SSH 키, GCloud 및 Kubernetes 인증 정보, .env 파일 내 API 키, Supabase·ClickHouse·Grafana 비밀번호 등
    • 즉각적 조치 권고
    1. 모든 SSH 및 클라우드 자격 증명 회전
    2. .env 및 .mcp.json 내 비밀키 재발급
    3. ~/.cache/uv 캐시 삭제
    4. PyPI 보안팀(security@pypi.org) 및 LiteLLM 유지관리자에 신고
  • Kubernetes 클러스터 점검 결과

    • 악성 pod(node-setup-*, sysmon) 미발견
    • macOS 환경에서 실행되어 클러스터 내부 확산 실패
    • 단, ~/.kube/config 노출 가능성으로 인해 자격 증명 회전 필요

PyPI 및 공개 대응

  • 11:58 UTC, Docker 격리 환경에서 PyPI로부터 litellm 1.82.8 다운로드 후 악성 .pth 파일 존재 재확인
  • PyPI 보안팀과 BerriAI/litellm 저장소에 즉시 보고
    • 이후 PYSEC-2026-2 (CVE) 로 등록
  • 12:01 UTC, FutureSearch 블로그에 공급망 공격 공개 게시물 작성 및 배포
    • 3분 내 PR 작성·병합 완료
  • 12:04 UTC, r/Python, r/netsec, r/LocalLLaMA, r/MachineLearning, r/devops 커뮤니티에 공유 제안
    • Python 및 보안 커뮤니티에서 빠른 대응 유도

사건의 의미

  • AI 기반 코드 분석 도구 Claude Code가 실시간으로 악성 행위를 식별하고 보안 연구자 개입 전 단계에서 경고를 생성
  • 공급망 공격이 AI 개발자 생태계를 직접 겨냥한 사례로, PyPI 계정 보안 및 자동 업데이트 검증 강화 필요성을 부각
  • AI 도구가 단순 개발 보조를 넘어 사이버 위협 탐지 및 대응 자동화에 활용될 수 있음을 보여준 사례
Read Entire Article