피드로 돌아가기
litellm 1.82.8 PyPI 패키지에 포함된 악성 `litellm_init.pth` 파일이 자격 증명 탈취 수행
GeekNewsGeekNews
Security

litellm 1.82.8 PyPI 패키지에 포함된 악성 `litellm_init.pth` 파일이 자격 증명 탈취 수행

PyPI의 litellm 1.82.8 패키지가 .pth 파일 자동 실행 기능을 악용해 API 키·SSH 키·클라우드 토큰 등 모든 자격 증명을 탈취

neo2026년 3월 25일10intermediate

Context

PyPI 공개 패키지 저장소를 통해 배포되는 라이브러리가 공급망 공격 대상이 되고 있으며, 악성 코드가 Python 인터프리터 시작 시 자동 실행되는 .pth 파일 메커니즘을 악용하면 import 명령 없이도 실행 가능하다.

Technical Solution

  • Python 인터프리터 시작 시 자동 실행되는 .pth 파일(litellm_init.pth)을 악성 페이로드 전달 벡터로 활용: litellm 1.82.8 휠 패키지의 site-packages/에 삽입
  • 이중 base64 인코딩으로 악성 스크립트를 난독화: 탐지 회피 목적으로 페이로드 숨김
  • 시스템 정보 및 자격 증명 자동 수집: hostname, whoami, uname, 환경 변수, SSH 키(~/.ssh/), Git 자격 증명(~/.gitconfig), AWS/GCP/Azure 토큰, Kubernetes 설정(/etc/kubernetes/, ~/.kube/config), Docker 설정(~/.docker/config.json), .npmrc/.netrc/.vault-token, 쉘 히스토리, 암호화폐 지갑(~/.bitcoin/, ~/.ethereum/keystore/), SSL/TLS 개인키(/etc/ssl/private/), CI/CD 시크릿(terraform.tfvars, .gitlab-ci.yml, Jenkinsfile), 데이터베이스 자격 증명, Webhook URL 일괄 수집
  • 수집 데이터를 AES-256-CBC 알고리즘으로 암호화 + RSA 4096비트 공개키로 세션 키 보호: openssl rand로 32바이트 세션 키 생성 후 openssl enc -aes-256-cbc -pbkdf2로 암호화
  • 암호화된 데이터를 tpcp.tar.gz로 패킹해 https://models.litellm.cloud/로 전송: 공식 도메인(litellm.ai)과 다른 탈취 서버 사용

Impact

발견된 악성 코드는 litellm 1.82.7 버전에도 존재하며, 로컬 개발 환경, CI/CD 파이프라인, Docker 컨테이너, 프로덕션 서버에 설치된 경우 모든 자격 증명이 노출될 수 있다.

Key Takeaway

PyPI와 같은 공개 패키지 저장소에 배포된 라이브러리는 언어 런타임의 초기화 메커니즘(.pth, pycache, site-packages)을 악용한 공급망 공격에 취약하므로, 의존성을 커밋 해시로 고정하고 새 릴리스는 검증 후 프로덕션에 배포하며, 설치 후 자격 증명을 주기적으로 회전해야 한다.


Python 프로젝트를 운영하는 엔지니어는 pip 설치 이후 site-packages/ 내 .pth 파일의 존재 여부를 정기적으로 감사하고, requirements.txt에서 버전을 정확한 숫자로 고정(예: litellm==1.82.6)하며, CI/CD 환경의 모든 자격 증명(AWS 액세스 키, 개인 토큰, SSH 키)을 3~6개월 단위로 회전하고, 의존성 업데이트 시 GitHub의 릴리스 노트와 커뮤니티 토론을 먼저 검토한 후 스테이징 환경에서 보안 감사를 수행해야 한다.

원문 읽기