GWS로 우리 회사 AX 하는 법 무료 배포
CICD 공급망 공격, 우리 회사 파이프라인은 안전한가요?
인사이트
오픈소스 라이브러리 한 줄을 가져다 썼을 뿐인데, 우리 회사 클라우드 자격 증명이 외부로 새어 나가는 일이 가능할까요?
지난 2026년 3월, Python 패키지 저장소 PyPI에서 실제로 그런 일이 일어났습니다. litellm이라는 라이브러리에 악성 코드가 포함된 버전이 배포됐고, 이 패키지를 설치한 환경의 환경 변수와 API 토큰까지 빨려나갈 수 있는 구조였죠.
흥미로운 건 공격이 시작된 곳이 litellm 자체가 아니었다는 점인데요. 공격자는 패키지를 직접 손대지 않았어요. 대신 그 패키지를 배포하던 CI/CD 파이프라인을 먼저 침해해서, 정식 경로로 악성 버전을 올렸습니다.
이번 글에서는 litellm 사건이 어떤 구조로 일어났는지 짚어보고, 우리 회사 CI/CD를 같은 패턴으로부터 지키기 위해 인프라 관점에서 무엇을 점검해야 하는지 정리해 드릴게요!
PyPI litellm 사건, 무슨 일이 있었나요?
2026년 3월 24일, PyPI에서 배포되던 litellm 패키지에 악성 코드가 포함된 버전이 발견됐습니다.
litellm은 OpenAI·Anthropic·Gemini 같은 여러 LLM API를 하나의 인터페이스로 호출할 수 있게 해주는 Python 라이브러리예요. 요즘 AI 기능을 백엔드에 붙이는 회사라면 한 번쯤 만져보는 패키지인 만큼, 영향 범위가 크다는 점에서 큰 주목을 받았습니다.
이 사건에서 주목할 점은 패키지 코드 자체에 취약점이 있던 게 아니라, litellm을 PyPI에 올리던 배포 파이프라인이 먼저 침해됐다는 점입니다.
좀 더 정확히 풀어보면 이런 순서로 일어났습니다.
- 컨테이너 이미지 취약점 스캔 도구인 Trivy GitHub Action이 먼저 침해
- 이 Action을 사용하던 CI/CD 환경에서 실행되는 코드가 변조
- 파이프라인에 저장돼 있던 자격 증명 노출
- 공격자가 PyPI 배포 권한 확보
- 정식 채널로 악성 litellm 버전 업로드
공격은 어떤 경로로 이뤄졌나요?
- GITHUB_TOKEN: GitHub 저장소 접근 및 워크플로 자동화에 사용
- PYPI_API_TOKEN: PyPI에 Python 패키지를 업로드·업데이트할 때 사용
- AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY: AWS 리소스 접근·관리에 사용하는 클라우드 인증 정보
- DOCKER_TOKEN: 컨테이너 이미지 업로드·다운로드용 레지스트리 인증 토큰
이 중 하나만 노출돼도 공격자는 노출된 토큰으로 우리 회사 패키지를 임의로 재배포할 수도 있고, 컨테이너 이미지를 갈아끼우거나, 클라우드 리소스에 접근해 데이터를 빼낼 수도 있습니다.
이번 litellm 사건도 정확히 이 순서를 밟았습니다. 침해된 Trivy Action이 빌드 환경에서 실행되는 동안 파이프라인에 부여돼 있던 PyPI 배포 권한이 공격자에게 넘어갔고, 그 권한으로 정식 PyPI 채널에 악성 버전이 올라간 거예요.
악성 버전 안에는 환경 변수와 인증 정보를 수집해 외부로 전송하는 코드가 포함돼 있었습니다. 패키지는 설치되는 시점에 코드가 실행될 수 있기 때문에, 이걸 설치한 다른 회사·다른 CI/CD 환경의 자격 증명까지 위험에 노출됐던 거죠.
왜 이런 공급망 공격이 가능했을까요?
요즘 공급망 공격은 개발과 배포 과정 전체를 하나의 연결된 신뢰 체인(Trust Chain)으로 보고, 그중 가장 약한 연결을 노려 침투하는 구조로 행해집니다.
현대 소프트웨어 개발 환경을 떠올려볼게요. 우리 회사 개발팀은 외부 오픈소스 라이브러리를 패키지 매니저로 가져다 쓰고, CI/CD 파이프라인이 빌드·테스트·배포를 자동으로 하고, 각 단계 사이에 외부 SaaS와 클라우드 API가 연동돼 있을 거예요. 이 구조가 업무 생산성을 높여주긴 하지만 외부 의존이 늘어난다는 의미이기도 합니다.
특히 GitHub Actions처럼 서드파티 Action을 적극적으로 가져다 쓰는 환경은 이 위험을 더 키웁니다. Action은 본질적으로 외부에서 만든 코드를 우리 회사 빌드 환경 안에서 실행하는 구조니까요. 평소엔 편리하지만, 그 Action 하나가 변조되는 순간 우리 회사 파이프라인의 자격 증명·소스코드·빌드 결과물이 동시에 위험해질 수 있습니다.
이번 litellm 사건이 단적인 예시예요. 공격자는 litellm 코드를 직접 손대지 않았고, 그 패키지를 배포하던 파이프라인의 의존 도구(Trivy Action) 하나만 공격했습니다. 그게 자격 증명을 노출시키고, 자격 증명이 패키지 배포 권한을 열고, 그 권한이 다시 수많은 후속 환경으로 공격 영향을 퍼뜨렸습니다.
그래서 공급망 공격 방어는 애플리케이션 보안만으로는 부족합니다. 개발 파이프라인 자체를 하나의 보안 영역으로 보고, 그 안의 자격 증명·외부 코드·권한 부여 범위를 다시 들여다봐야 해요.
우리 회사 CI/CD를 지키는 3가지 방법
1) 외부 Action은 커밋 해시로 고정하세요!
2) 자격 증명은 최소 권한만 부여하세요!
- 배포 대상 특정 S3 버킷에만 접근
- 배포 대상 특정 ECR 리포지토리에만 push
- 운영 중인 특정 서비스의 배포 작업만 허용
3) 장기 Access Key 대신 OIDC 임시 인증을 도입하세요!
우리 회사 파이프라인, 지금 안전한가요?
- 외부 GitHub Action을 @main · @latest 같은 변동 태그로 사용 중인 워크플로가 있나요?
- CI/CD에 저장된 토큰들이 각각 어떤 권한 범위를 가지고 있는지 한 줄로 답할 수 있나요?
- AWS·GCP 등 클라우드 자격 증명을 장기 Access Key 형태로 환경 변수에 보관하고 있나요?
- 사용 중인 서드파티 Action 목록과 각 버전을 누가 마지막으로 점검했는지 추적할 수 있나요?
- 만약 CI/CD 토큰 중 하나가 외부로 노출됐다면, 어떤 리소스가 위험에 들어가는지 시나리오로 정리돼 있나요?