본문으로 건너뛰기
J
0
r/jeffnews HN 2026-03-24 18:01 약 6분

LiteLLM 1.82.8 파이썬 패키지 공급망 공격 당함 — SSH키, AWS 크레덴셜 전부 털림

security 0

요약

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) + 해시 검증은 이제 선택이 아닌 필수임.

댓글

댓글

댓글을 불러오는 중...