피드로 돌아가기
LiteLLM vs Bifrost: Why the Supply Chain Attack Changes Everything for LLM Gateways
Dev.toDev.to
Security

LiteLLM이 2026년 3월 공급망 공격으로 PyPI에 백도어된 버전(1.82.7, 1.82.8)을 배포해 3.4백만 일일 다운로드 환경을 노출

LiteLLM vs Bifrost: Why the Supply Chain Attack Changes Everything for LLM Gateways

Pranay Batta2026년 3월 28일10intermediate

Context

Python 기반 LLM 게이트웨이인 LiteLLM은 site-packages 디렉토리의 .pth 파일 실행 메커니즘, 복잡한 종속성 체인, CI/CD 파이프라인의 미고정 GitHub Action 등 구조적 취약점을 가지고 있었다. 이러한 취약점들이 복합적으로 작용하면서 대규모 공급망 공격에 노출되었다.

Technical Solution

  • Python .pth 파일 실행 메커니즘 제거: Go 기반의 Bifrost는 단일 정적 바이너리로 컴파일되어 site-packages 디렉토리와 같은 공유 공간이 존재하지 않음
  • 종속성 체인 단순화: npm(npx -y @maximhq/bifrost) 또는 Docker(docker pull maximhq/bifrost)를 통해 컴파일된 바이너리를 배포하여 런타임 종속성 관리 제거
  • CI/CD 공격 표면 축소: 의존성 해결 및 컴파일이 Bifrost 팀의 업스트림에서 수행되어 사용자 파이프라인의 CI/CD 표면적 감소
  • GitHub Action SHA 고정: 태그 대신 특정 SHA로 GitHub Action을 핀하여 변조된 버전 실행 방지
  • 런타임 훅 메커니즘 제거: Go 언어는 컴파일 후 제3자 코드가 스타트업 훅을 삽입할 수 없는 구조

Impact

  • LiteLLM 공격이 PyPI에 노출된 시간: 약 3시간
  • LiteLLM 일일 다운로드: 3.4백만 이상
  • Bifrost 요청당 오버헤드: 11마이크로초 vs LiteLLM 약 8밀리초
  • Bifrost 지원 제공자: 20개 이상
  • 공격 시 조작된 GitHub 계정: 73개
  • 백도어 버전: 2개(1.82.7, 1.82.8)

Key Takeaway

인프라 계층의 게이트웨이는 Python 패키지의 구조적 취약점(site-packages 훅, 종속성 체인, 런타임 메커니즘)이 아닌 컴파일된 바이너리로 배포되어야 하며, 이는 보안과 무관하게 웹 서버, 데이터베이스, 로드 밸런서가 C, C++, Go, Rust로 구현되는 이유와 동일한 원칙에 해당한다.


인프라 계층(LLM 게이트웨이, API 프록시, 메시지 큐 등)을 운영하는 엔지니어링 팀이 Python 기반 솔루션 선택 시, 공급망 공격 완화를 위해 (1) 설치 버전을 정확히 검증하고 site-packages에서 .pth 파일 존재 여부를 확인하며 (2) 가능하면 단일 컴파일된 바이너리로 배포되는 Go/Rust 대안 평가를 우선시해야 한다.

원문 읽기