LiteLLM 1.82.7 & 1.82.8 PyPI 패키지 공급망 공격 — 자격증명 탈취 악성코드 포함
Tell HN: Litellm 1.82.7 and 1.82.8 on PyPI are compromised
TL;DR Highlight
LiteLLM의 PyPI 패키지 1.82.7, 1.82.8 버전이 자격증명 탈취 악성 .pth 파일을 포함해 Python 인터프리터 시작만으로 자동 실행되어 광범위한 공급망 공격을 야기했다.
Who Should Read
LiteLLM을 사용 중인 백엔드 개발자 및 MLOps 엔지니어. 특히 AI 서비스 개발 환경에 litellm을 pip install로 설치해 사용하는 모든 개발자는 즉시 확인이 필요하다.
Core Mechanics
- litellm==1.82.8 (및 1.82.7) PyPI wheel 패키지 안에 악성 .pth 파일(litellm_init.pth, 34,628 바이트)이 포함되어 있다. .pth 파일은 Python이 site-packages를 로드할 때 자동으로 실행되는 파일이라, `import litellm`을 하지 않아도 Python 인터프리터가 시작되기만 하면 악성 코드가 바로 실행된다.
- 악성 페이로드는 이중 base64로 인코딩되어 있으며, 실행되면 호스트 시스템에서 민감 정보를 대량 수집한다. 수집 대상은 hostname, whoami, 네트워크 정보(ip addr, ip route), 모든 환경변수(API 키, 토큰 포함), SSH 개인키 전체(id_rsa, id_ed25519 등), ~/.git-credentials, AWS 자격증명(~/.aws/credentials + IMDS 메타데이터 토큰), Kubernetes config 파일들(~/.kube/config 등)이다.
- LiteLLM 메인테이너의 확인에 따르면, 이번 공격은 CI/CD 파이프라인에서 사용하는 보안 스캐너 Trivy(취약점 스캐너)가 먼저 해킹당한 것에서 시작됐다. 'TeamPCP'라는 공격 그룹이 Trivy를 통해 LiteLLM 저장소 접근 권한을 탈취했고, 창업자/CTO 계정(krrishdholakia)도 함께 침해된 것으로 보인다.
- Docker 프록시 이미지를 사용하는 경우는 영향을 받지 않았다. LiteLLM의 proxy Docker 이미지는 requirements.txt에 버전을 고정(pin)해두기 때문에 악성 버전이 자동으로 당겨지지 않았다.
- PyPI 측에서는 해당 패키지를 격리(quarantine) 조치하여 현재는 다운로드가 차단된 상태다. 안전한 마지막 버전은 1.82.6으로 확인됐으며, CrewAI(litellm 의존 라이브러리) 측도 이미 1.82.6으로 버전을 고정하는 커밋을 올렸다.
- 패키지 안에 악성 파일이 있음을 확인하는 방법은 간단하다. wheel 파일을 zip으로 열어 .pth 파일이 있는지 확인하거나, RECORD 파일에 litellm_init.pth 항목이 있는지 보면 된다. 정상 패키지라면 .pth 파일이 있어서는 안 된다.
- 이번 공격은 보안 연구자들이 'TeamPCP'로 추적 중인 그룹의 소행으로, 같은 그룹이 수주 전부터 Trivy 공급망을 통해 여러 프로젝트를 공격해온 것으로 파악됐다. GitHub 이슈에 봇 댓글이 170개 이상 스팸으로 달린 것도 같은 패턴이다.
Evidence
- LiteLLM 메인테이너 Krrish가 직접 댓글로 상황을 설명했다. 공격 경로는 CI/CD에서 사용하던 Trivy(오픈소스 취약점 스캐너)가 먼저 해킹당했고, 이를 통해 LiteLLM 빌드 파이프라인이 침해된 것으로 보인다는 설명이다. 보안 연구자 ramimac이 작성한 타임라인 문서(https://ramimac.me/trivy-teampcp/)에 TeamPCP 그룹의 활동이 상세히 기록되어 있다.
- CrewAI가 이미 5시간 전에 슬그머니 litellm을 1.82.6으로 고정하는 커밋을 올렸지만 커밋 메시지에 보안 관련 내용을 전혀 언급하지 않았다는 지적이 있었다. 이에 대해 사용자들 사이에서 '의존 라이브러리가 보안 이슈를 숨기는 식으로 대응하는 것은 문제가 있다'는 비판이 나왔다.
- macOS 환경을 위한 카나리아(honeypot) 탐지 도구를 만든 개발자가 자신의 오픈소스 툴(https://github.com/dweinstein/canary)을 공유했다. 가짜 시크릿 파일을 심어두고 패키지가 접근하면 알림을 받는 방식으로, '다음 공격은 CPU 과부하 같은 눈에 띄는 증상이 없을 수 있으니 이런 탐지 도구가 필요하다'는 의견이었다.
- 한 개발자는 Harbor(다른 패키지)를 설치했더니 CPU가 즉시 100%로 치솟으면서 시스템이 먹통이 됐다고 경험을 공유했다. 프로세스를 보니 `grep -r rpcuser\rpcpassword` 형태의 프로세스가 fork bomb처럼 대량으로 생성되어 암호화폐 지갑 정보를 탐색하려 했다고 한다. 빠르게 발견해서 백도어 설치 전에 막았다는 경험담이다.
- 공급망 보안 전반에 대한 논의도 활발했다. '의존성은 한 번도 믿을 수 있었던 적이 없다', 'LLM이 이 위험을 100배 증폭시켰다(스팸 패키지/악성 코드 생성이 쉬워졌으므로)', '이제는 개발 환경 자체를 에이전트 런타임처럼 샌드박스화해야 한다(egress 필터, seccomp, gVisor 등)' 같은 의견들이 나왔다. pnpm의 minimumReleaseAge처럼 새 버전을 즉시 사용하지 않고 일정 기간 후에만 허용하는 기능이 Python 생태계에도 필요하다는 제안도 있었다.
How to Apply
- 현재 litellm을 사용 중이라면 즉시 버전을 확인하고, 1.82.7 또는 1.82.8을 사용 중이면 `pip install litellm==1.82.6`으로 다운그레이드해야 한다. requirements.txt나 pyproject.toml에 `litellm==1.82.6`으로 버전을 고정(pin)해두면 재발을 방지할 수 있다.
- 혹시 해당 버전이 설치된 환경에서 Python을 실행한 적이 있다면, 해당 머신의 환경변수, SSH 키, AWS 자격증명, Kubernetes config가 유출됐을 가능성이 있다. AWS 키 로테이션, SSH 키 재생성, 쿠버네티스 서비스 어카운트 토큰 갱신을 즉시 진행해야 한다.
- 새로운 패키지를 설치할 때 .pth 파일 포함 여부를 확인하는 검증 단계를 CI/CD에 추가할 수 있다. `pip download <package> --no-deps -d /tmp/check` 후 wheel을 zip으로 열어 `.pth` 파일 존재 여부를 체크하는 스크립트를 파이프라인에 넣으면, 이런 유형의 공격을 조기에 탐지할 수 있다.
- LiteLLM을 Docker 기반으로 운영하는 경우, 공식 proxy Docker 이미지는 requirements.txt에 버전이 고정되어 있어 이번 사건의 영향을 받지 않았다. 앞으로도 중요 라이브러리는 Docker 이미지 내에서 버전을 고정하고, `pip install litellm` 처럼 최신 버전을 무조건 당기는 방식은 피하는 것이 좋다.
Code Example
# 악성 패키지 여부 확인 스크립트
pip download litellm==1.82.8 --no-deps -d /tmp/check
python3 -c "
import zipfile, os
whl = '/tmp/check/' + [f for f in os.listdir('/tmp/check') if f.endswith('.whl')][0]
with zipfile.ZipFile(whl) as z:
pth = [n for n in z.namelist() if n.endswith('.pth')]
print('PTH files:', pth) # 정상이라면 빈 리스트여야 함
for p in pth:
print(z.read(p)[:300]) # 내용 확인
"
# 안전한 버전으로 고정
pip install litellm==1.82.6
# requirements.txt에 버전 고정
# litellm==1.82.6Terminology
관련 논문
Claude Code, Codex, Cursor에서 바로 쓰는 Smart Model Routing 도구
프롬프트마다 적합한 AI 모델을 50ms 이내에 자동으로 선택해주는 프록시 라우터로, API 비용을 40~70% 절감할 수 있다고 주장하는 오픈소스 도구다. 단, 프롬프트 캐싱 손실 문제로 커뮤니티 반응은 엇갈린다.
900KB Transformer를 과적합시켜 100MB CSV를 7MB로 압축한 실험
단일 파일을 통째로 암기하도록 Transformer를 과적합(overfitting)시킨 뒤 arithmetic coding으로 압축하는 실험으로, 100MB CSV를 7MB(~0.5 bits/byte)까지 줄이는 데 성공했다. 모델이 '범용 이해' 대신 '특정 파일 완전 암기'를 목표로 한다는 점에서 전통적 ML 학습과 정반대 방향이라 흥미롭다.
Anthropic이 나를 Claude Code에서 밴했는데 어떻게 해야 할지 모르겠다
VPN 사용 또는 동일 카드 재사용으로 Anthropic Claude Code 계정이 이유 불명으로 정지당한 사용자의 사례와, 커뮤니티에서 나온 대안 및 우회 방법 논의.
Moebius: 0.2B 파라미터로 10B급 성능을 내는 이미지 인페인팅 모델
FLUX.1-Fill-Dev(11.9B) 대비 2% 미만의 파라미터(0.22B)로 동급 또는 그 이상의 인페인팅 품질을 달성하면서 추론 속도는 15배 빠른 경량 모델. 소비자용 GPU나 엣지 디바이스에서도 고품질 인페인팅이 가능해진다.
AI Compute Extensions (ACE) Specification — x86 CPU에 ML 연산 가속 명령어 추가
x86 Ecosystem Advisory Group이 행렬 곱셈과 저정밀도 데이터 포맷을 하드웨어 수준에서 가속하는 새로운 x86 명령어 확장 스펙 ACE를 공개했다. ML 워크로드를 CPU에서 더 효율적으로 돌리기 위한 ISA(명령어 집합 구조) 수준의 변화라 향후 AI 추론 환경에 영향을 줄 수 있다.
고해상도 Neural Cellular Automata: 세포에서 픽셀로
EPFL과 Google Research가 공동 개발한 Neural Cellular Automata(NCA)를 고해상도로 확장하는 기법으로, 기존 NCA의 해상도 한계를 경량 신경망 디코더로 극복한 SIGGRAPH 2026 논문이다.