홈으로 돌아가기

PyPI LiteLLM Telnyx 공격: 공급망 보호

Trivy를 통한 litellm 및 telnyx 침해에 대한 PSF 보고서: 악성 릴리스가 비밀을 훔치고 지속성을 보장. 권장 사항에는 OSS 프로젝트 보호를 위한 P3D 쿨다운 기간, hashes가 포함된 lock-files 및 trusted publishers가 포함.

악성 LiteLLM 및 Telnyx 릴리스: 자신을 보호하는 방법
Advertisement 728x90

PyPI 공급망 공격: LiteLLM과 Telnyx 사례 및 실용적 대응 방안

공격자들은 Trivy 의존성에서 API 토큰을 유출하여 litellm과 telnyx 패키지를 손상시켰습니다. 2026년 3월 19일, 악성 버전이 배포되었습니다: litellm 1.82.7 및 1.82.8, telnyx 4.87.0 및 4.87.2. 이 코드는 모듈을 임포트할 때 활성화되어 환경에서 비밀 정보를 스캔하고 원격 서버로 데이터를 유출합니다.

litellm의 악성 페이로드는 SSH 키, Git/Docker 자격 증명, .env 파일, K8s 토큰, 데이터베이스 비밀번호, LDAP 설정, 셸 기록, 암호화 키를 수집합니다. 또한 메타데이터 서버와 AWS Secrets Manager에서 클라우드 토큰을 추출하려 시도합니다. 데이터는 models.litellm.cloud로 전송됩니다. 지속성을 위해 "System Telemetry Service"라는 SystemD 서비스나 checkmarx.zone에서 지시를 로드하는 K8s 파드를 생성합니다.

telnyx에서는 _client.py의 악성 코드가 8.42.209.203에 호스팅된 WAV 파일에서 스테이지를 로드합니다. Windows에서는 Startup 폴더에 msbuild.exe를 배치하여 자동 실행되도록 하고, 다른 OS에서는 Python 스크립트를 사용합니다. 버전 4.87.1에는 실행을 차단하는 오타가 포함되어 있었습니다. 통신은 암호화 키를 통해 TeamPCP와 연결됩니다.

Google AdInline article slot

개발자들은 토큰을 교체하고, 릴리스를 삭제하며, PyPI에서 신뢰할 수 있는 게시자를 구현하여 대응했습니다.

인기 있는 OSS 패키지 공격의 특징

일반적인 PyPI 공격(예: 타이포스쿼팅 또는 새 패키지)과 달리, 여기서는 기존의 높은 트래픽 프로젝트에 악성 코드가 주입되었습니다. 공격 체인: 저장소 손상 → PyPI/GitHub 토큰 도난 → 악성코드 배포 → 개발자 머신에서 자격 증명 수집 → 반복적 손상.

LiteLLM은 공격 기간 동안 119,000회 이상 다운로드되었습니다. 약 40-50%의 설치가 버전 지정 없이(최신 버전) 이루어졌으며, 분당 약 1700회 설치되었습니다. PyPI 대응 시간:

Google AdInline article slot
  • LiteLLM: 게시부터 격리까지 — 2시간 32분 (사용자 신고 13건).
  • Telnyx: 3시간 42분 (신뢰할 수 있는 사용자에 의한 자동 격리).

악성코드에 대한 PyPI의 대책

매일 약 700-800개의 새 프로젝트가 추가됩니다. PyPI는 커뮤니티에 스캔 및 "악성으로 신고" 기능을 통한 보고를 의존합니다. 이 기능은 2024년에 도입되어 격리 속도를 높였습니다. 신뢰할 수 있는 게시자는 자동화된 대응을 가능하게 합니다.

권장사항: 의존성 냉각 기간

새 릴리즈 설치를 지연하면 악성코드 탐지 시간을 확보할 수 있습니다. 형식: RFC 3339 (P3D = 3일).

  • uv: 전역적으로 ~/.config/uv/uv.toml 또는 pyproject.toml에서:
[tool.uv]
exclude-newer = "P3D"
  • pip v26.1+: pip.conf에서:
[install]
uploaded-prior-to = P3D
  • pip 26.0 (절대 날짜):
python -m pip install --uploaded-prior-to=$(date -d '-3days' -Idate) package

보안 패치를 위한 해결책: --uploaded-prior-to=P0D 또는 Dependabot/Renovate(지연을 무시함) 사용.

Google AdInline article slot

재현성을 위한 의존성 고정

해시가 포함된 잠금 파일은 재설치 중 코드 대체를 방지합니다.

| 도구 | 명령어 | 형식 |

|------------|---------|--------|

| uv | uv lock | uv.lock |

| pip-tools | pip-compile --generate-hashes | requirements.txt |

| pipenv | pipenv lock | Pipfile.lock |

pip freeze는 해시가 없어 불충분합니다. pip lock(pylock.toml)이 기대됩니다.

OSS 프로젝트 보호

  • PyPI에서 신뢰할 수 있는 게시자를 구현하세요.
  • PyPI/GitHub에 2FA + 하드웨어 키를 사용하세요.
  • 토큰 권한(범위)을 제한하세요.
  • 웹훅을 통해 게시를 모니터링하세요.
  • Trivy/Grype로 저장소를 스캔하세요.

개발자 머신의 경우:

  • 손상된 환경을 격리하세요.
  • 모든 자격 증명을 교체하세요.
  • 지속성(SystemD, K8s 파드, Startup)을 확인하세요.
  • 트래픽/로그를 분석하세요.

핵심 요약

  • 공격은 실제 OSS 패키지를 악용합니다; 새 릴리즈를 검증하세요.
  • P3D 냉각 기간 + 잠금 파일 = 기본적인 보호.
  • 격리 전 119,000회 이상의 LiteLLM 설치; 최신 버전은 위험합니다.
  • 유출에는 클라우드 메타데이터와 Secrets Manager가 포함됩니다.
  • 신뢰할 수 있는 게시자와 커뮤니티가 PyPI 대응을 가속화합니다.

— Editorial Team

Advertisement 728x90

다음 읽기