---
title: "LiteLLM 1.82.8 파이썬 패키지 공급망 공격 당함 — SSH키, AWS 크레덴셜 전부 털림"
published: 2026-03-24T09:01:00.000Z
canonical: https://jeff.news/article/124
---
# LiteLLM 1.82.8 파이썬 패키지 공급망 공격 당함 — SSH키, AWS 크레덴셜 전부 털림

PyPI에 올라온 litellm==1.82.8 버전에 악성 .pth 파일이 심어진 게 확인됨. import도 필요 없이 파이썬 인터프리터 시작할 때마다 자동 실행되면서 SSH 키, 환경변수, 클라우드 크레덴셜 싹 다 수집해서 외부 서버로 빼돌리는 구조임. 공급망 공격(supply chain attack) 맞고, 영향 받은 사람은 즉시 크레덴셜 교체해야 함.

- **litellm==1.82.8** PyPI 패키지에 악성 `.pth` 파일(`litellm_init.pth`) 포함 확인
- `import litellm` 없어도 **파이썬 시작할 때마다 자동 실행**되는 구조 (`.pth` 파일 특성 악용)
- SSH 키, 환경변수(API 키 포함), AWS/GCP/Azure 크레덴셜, 쿠버네티스 시크릿, 암호화폐 지갑까지 **전방위 수집**
- 수집한 데이터는 **AES-256 + RSA-4096**으로 암호화 후 `https://models.litellm.cloud/` (공식 도메인 아님)으로 전송
- 로컬 개발 환경, CI/CD 파이프라인, 도커 컨테이너, 프로덕션 서버 모두 영향

---

## 상세 내용

### 뭐가 문제임?

**공급망 공격(Supply Chain Attack)**으로, PyPI에 올라간 `litellm==1.82.8` 휠 패키지 안에 악성 파일 `litellm_init.pth` (34,628 bytes)가 포함됨. 이 파일은 패키지 자체 RECORD에도 버젓이 등록되어 있음 ㄷㄷ.

`.pth` 파일은 파이썬 인터프리터가 시작될 때 `site-packages/` 폴더에서 자동으로 실행되는 특성이 있어서, **`import litellm` 한 줄도 없어도 그냥 실행됨**. 설치만 해도 당하는 구조.

### 악성 페이로드 동작 방식

페이로드는 **이중 base64 인코딩**으로 숨겨져 있어서 단순 grep으로는 탐지 안 됨.

**Stage 1 — 정보 수집 (진짜 무섭게 다 털어감)**

- **시스템 정보**: hostname, whoami, uname -a, ip addr, ip route
- **환경변수 전체**: `printenv` 실행 → API 키, 시크릿, 토큰 싹 다
- **SSH 키**: `id_rsa`, `id_ed25519`, `authorized_keys`, `known_hosts`, `config` 등
- **Git 크레덴셜**: `~/.gitconfig`, `~/.git-credentials`
- **AWS 크레덴셜**: `~/.aws/credentials`, `~/.aws/config`, IMDS 토큰 + 보안 자격증명
- **쿠버네티스 시크릿**: `~/.kube/config`, 각종 conf 파일, 서비스 어카운트 토큰
- **GCP/Azure 크레덴셜**: gcloud 기본 크레덴셜, `~/.azure/` 전체
- **도커 설정**: `~/.docker/config.json`, kaniko 설정 포함
- **패키지 매니저 설정**: `.npmrc`, `.netrc`, `.pgpass`, `.my.cnf`, `.mongorc.js` 등
- **셸 히스토리**: bash, zsh, mysql, psql, redis 히스토리
- **암호화폐 지갑**: 비트코인, 이더리움, 솔라나, 카르다노 등 **주요 코인 지갑 전부**
- **SSL/TLS 프라이빗 키**: Let's Encrypt `.pem`, `.key` 파일
- **CI/CD 시크릿**: `terraform.tfvars`, `.gitlab-ci.yml`, `Jenkinsfile`, `.travis.yml` 등
- **DB 크레덴셜**: PostgreSQL, MySQL, Redis, LDAP 설정
- **웹훅 URL**: Slack/Discord 웹훅 URL grep

**Stage 2 — 암호화 및 외부 전송**

수집된 데이터를 임시 파일에 저장한 뒤:
1. `openssl rand`로 **32바이트 AES-256 세션 키** 생성
2. 데이터를 `openssl enc -aes-256-cbc -pbkdf2`로 암호화
3. 세션 키를 **하드코딩된 4096-bit RSA 공개키**로 암호화 (OAEP 패딩)
4. 두 파일을 `tpcp.tar.gz`로 패킹
5. `https://models.litellm.cloud/`로 전송 (공식 도메인 `litellm.ai`가 **아님** — 주의)

### 영향 범위

`litellm==1.82.8`을 설치한 **모든 환경** 해당:
- 로컬 개발 머신
- CI/CD 파이프라인
- 도커 컨테이너
- 프로덕션 서버

다른 버전도 아직 확인 안 됨 → 공격자가 여러 버전을 건드렸을 가능성 있음.

### 지금 당장 해야 할 것

1. `site-packages/` 디렉토리에서 **`litellm_init.pth` 파일 확인 및 삭제**
2. `litellm==1.82.8`이 설치된 적 있는 모든 시스템에서 **크레덴셜 전부 교체** (환경변수, SSH 키, 클라우드 크레덴셜 포함)
3. PyPI에서 해당 버전 **즉시 yanked** 처리 요청
4. BerriAI는 PyPI 퍼블리싱 크레덴셜 및 CI/CD 파이프라인 전체 감사 필요

## 핵심 포인트

- litellm==1.82.8에 악성 .pth 파일 포함 — import 없이 파이썬 시작 시 자동 실행
- SSH 키·환경변수·AWS/GCP/쿠버네티스·암호화폐 지갑까지 전방위 크레덴셜 탈취
- AES-256+RSA-4096 암호화 후 위장 도메인(litellm.cloud)으로 데이터 외부 전송

## 인사이트

LLM 관련 개발 툴이 워낙 빠르게 퍼지다 보니 공급망 공격 타깃으로 딱임 — litellm 쓰는 AI 스타트업이나 ML 엔지니어 환경엔 API 키가 넘쳐나니까 공격자 입장에선 황금 광산이었을 듯. 오픈소스 패키지 설치할 때 버전 고정(pinning) + 해시 검증은 이제 선택이 아닌 필수임.
