LiteLLM 1.107.0 악성코드 감염…AI 키 노린 공급망 공격
LiteLLM 1.107.0이 PyPI·Docker에 악성코드를 품고 배포됐다. AI 공급자 API 키까지 노린 공격의 경위와 안전한 버전, 대응 방법을 정리했다.
LLM API 호출을 한곳에서 중계하는 오픈소스 LiteLLM의 개발팀이 10월 21일(UTC) 릴리스 파이프라인이 탈취돼 자격 증명을 훔치는 악성코드가 든 1.107.0 버전이 PyPI와 Docker 레지스트리에 배포됐다고 공식 블로그에서 밝혔다. 개발팀은 1.107.0을 한 번이라도 실행한 서버라면 정보가 이미 빠져나갔다고 가정하고 모든 비밀 값을 교체하라고 권고했다.
핵심 정리
- LiteLLM 1.107.0 휠 7종이 10월 21일 11시 39분(UTC, 한국 시간 20시 39분) PyPI에 올라갔다가 13시 23분 삭제됐다.
- Docker Hub의 latest·v1.107.0 등 태그도 11시 46분부터 14시 20분(UTC)까지 악성 이미지를 가리켰다.
- LiteLLM은 공격자가 도난당한 것으로 보이는 GitHub CLI OAuth 토큰으로 개발자 계정 3개를 악용했다고 설명했다.
LiteLLM 1.107.0 악성코드는 무엇을 훔치나
LiteLLM 1.107.0에 심긴 악성코드는 서버의 자격 증명을 수집해 외부로 보내는 정보 탈취기와, 1시간마다 원격 코드를 내려받아 실행하는 백도어로 이뤄졌다. 공급망 보안 업체 SafeDep의 LiteLLM 1.107.0 악성코드 분석에 따르면 설치 시 cook.pth와 sitecustomize.py 파일이 깔려 파이썬 프로세스가 시작될 때마다 실행된다.
탈취 대상은 SSH 키, AWS·Azure·GCP 자격 증명, CI/CD 비밀 값, 브라우저 비밀번호, 환경 변수 등이다. LiteLLM 프록시 데이터베이스에 저장된 LLM 공급자 API 키도 노렸다. 수집한 데이터는 암호화해 정상 도메인처럼 보이는 litellm.dev로 보냈다.
릴리스 파이프라인은 어떻게 뚫렸나
LiteLLM이 공개한 10월 21일 보안 사고 보고서에 따르면 GitHub 브랜치 보호 규칙이 10시 8분(UTC) 릴리스 워크플로 변경을 한 차례 막았지만, 5초 뒤 권한 있는 개발자 계정이 보호 설정을 무시했다. 두 번째 계정이 배포 승인을 통과시켰고, 공격자가 통제하는 저장소에서 빌드한 결과물이 정식 릴리스로 나갔다. 세 번째 계정은 워크플로 실행 기록을 지워 조사를 어렵게 했다.
개발팀은 토큰이 어떻게 유출됐는지 아직 밝히지 못했다고 했다. GitHub의 공식 v1.107.0 소스 태그에는 악성 파일이 없다.
영향받은 배포본과 노출 시간
| 배포처 | 영향받은 대상 | 노출 시간(UTC) |
|---|---|---|
| PyPI | litellm==1.107.0 휠 7종 | 11:39~13:23 |
| Docker Hub | v1.107.0, latest, main-latest, main-stable 태그 | 11:46~14:20 |
| GHCR | litellm 등 이미지 3종의 같은 태그 | 11:46~13:51 이전 |
버전을 고정하지 않고 pip로 설치했거나 latest 태그 컨테이너 이미지를 받은 환경이 가장 위험하다. LiteLLM은 이전 버전은 모두 안전하며, 사내 전용 레지스트리로 받는 엔터프라이즈 릴리스 고객도 영향이 없다고 밝혔다.
개발자가 지금 해야 할 일
LiteLLM은 감염 환경에서 pip install부터 실행하지 말라고 경고했다. 먼저 악성 파일을 지우고 /tmp/remote_code_loader.lock을 쥔 백그라운드 프로세스를 종료한 뒤, litellm==1.106.2로 고정해 다시 설치해야 한다. 가상환경과 이미지는 처음부터 새로 만드는 편이 낫다. IAM 자격 증명, 프록시 DB의 공급자 키, 마스터·가상 키, 데이터베이스 비밀번호도 모두 바꿔야 한다.
LiteLLM 공급망 공격 반복되는 이유
LiteLLM이 탈취된 것은 올해만 두 번째다. StepSecurity 분석에 따르면 2026년 3월에도 1.82.7·1.82.8 버전에 자격 증명 탈취 코드가 들어갔다. LiteLLM은 여러 AI 모델의 API 키를 한곳에서 관리하는 도구라 한 번 뚫리면 여러 공급자 키가 한꺼번에 털린다. 같은 날 AI 키를 노린 Railway 환경 변수 유출 사고도 공개되는 등 AI 개발 인프라를 겨냥한 공격이 잇따른다.
전망
LiteLLM은 GitHub 조직에서 피해 없는 사용자 한 명만 남기고 모두 제외했고, 관련 토큰을 폐기했으며 워크플로를 이전 상태로 되돌렸다. 유출 경로가 확인되지 않아 추가 접근 가능성은 남아 있다. 개발팀은 상세 침해 지표를 추가로 공개할 예정이다.
자주 묻는 질문
LiteLLM 어떤 버전이 안전한가?
악성코드가 든 버전은 PyPI의 litellm 1.107.0과 같은 시간대에 배포된 Docker 이미지다. LiteLLM은 그 이전 버전은 모두 안전하다며 1.106.2로 고정해 설치하라고 권고했다.
LiteLLM 1.107.0을 설치했는지 어떻게 확인하나?
site-packages 안에 litellm-1.107.0.dist-info 폴더나 cook.pth, sitecustomize.py 파일이 있는지 찾아보면 된다. 흔적이 있고 서버가 인터넷에 연결돼 있었다면 정보가 유출됐다고 보고 모든 비밀 값을 교체해야 한다.
LiteLLM 엔터프라이즈 고객도 영향을 받았나?
LiteLLM은 사내 전용 레지스트리로 배포되는 엔터프라이즈 릴리스 고객은 영향을 받지 않았다고 밝혔다. 공개 PyPI나 Docker Hub에서 1.107.0을 받아 썼다면 오픈소스 사용자와 같은 점검이 필요하다.
댓글 0
현재 댓글 작성이 비활성화되어 있습니다.