본문으로 건너뛰기
피드

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

security 약 6분
vote
0
댓글
북마크

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

AI 에이전트 보안, 이제 권한이 아니라 ‘실행 증거’ 싸움으로 간다

오페이크가 AI 에이전트의 ID, 실행 환경, 도구 호출, 정책 적용 여부를 암호학적으로 검증하는 오페이크 3.0을 공개했다. 핵심은 에이전트 매니페스트와 컨피덴셜 MCP라는 두 오픈소스 기술이며, 기밀 컴퓨팅과 서명된 실행 증거를 결합해 감사자나 규제기관도 독립적으로 확인할 수 있게 하는 방향이다. AI 에이전트가 업무 시스템과 데이터를 직접 만지는 시대에는 접근 권한보다 ‘무슨 일을 했는지 증명할 수 있느냐’가 더 중요해지고 있다.

security

취약점 제보가 더 이상 특별하지 않은 시대가 왔다

전 Go 보안팀 리드였던 필리포 발소르다가 LLM 이후 취약점 제보의 의미가 바뀌었다고 주장한다. 예전에는 희소한 통찰과 비공개 제보가 귀했지만, 이제는 잠재 취약점을 찾는 것보다 실제 영향도를 빠르게 가려내는 triage가 병목이라는 얘기다.

security

스패로우, AI가 만든 코드 취약점 잡는 ‘Sparrow MCP’ 출시

스패로우가 AI 코딩 에이전트가 생성한 코드의 보안 취약점과 사용된 오픈소스를 실시간으로 검사하는 보안 어시스턴트 ‘Sparrow MCP’를 출시했다. 핵심 기능은 취약점 분석과 소프트웨어 자재명세서(SBOM) 생성이며, 앤트로픽의 모델 컨텍스트 프로토콜(MCP)을 지원하는 AI와 연결할 수 있다는 점이다. AI 코딩이 빨라질수록 보안 검증과 오픈소스 추적이 개발 파이프라인 안으로 더 깊게 들어오는 흐름이다.

security

오픈AI, 오픈소스 취약점 고치는 ‘패치 더 플래닛’ 시작

오픈AI가 트레일 오브 비츠와 함께 주요 오픈소스 프로젝트의 취약점을 AI로 찾고, 사람 검토를 거쳐 실제 패치까지 연결하는 프로그램을 시작했다. 파이썬, 고, cURL, 시그스토어, NATS 서버 같은 핵심 프로젝트가 초기 대상이고, 지금까지 수백 건의 보안 이슈와 수십 건의 병합된 패치가 나왔다. 핵심은 AI가 보안팀을 대체하는 게 아니라, 탐지·검증·패치·공개 조율을 빠르게 만드는 보조 엔진이라는 점이다.

security

오픈AI, 취약점 찾기부터 패치까지 돕는 ‘코덱스 시큐리티’ 공개

오픈AI가 사이버보안 이니셔티브 데이브레이크를 확대하면서 보안 전용 도구 코덱스 시큐리티와 GPT-5.5-사이버를 공개했다. 목표는 취약점 탐지에서 끝나는 게 아니라 검증, 위험도 평가, 패치 개발, 테스트, 배포까지 AI로 지원하는 것이다. cURL, Go, Python, Sigstore 등 30개 이상 오픈소스 프로젝트도 패치 지원 프로그램에 참여한다.