Trivy 공급망 공격 — GitHub Actions 보안 도구가 비밀번호를 훔친 12시간
GitHub Actions 보안 도구 Trivy가 공급망 공격에 당했습니다. 12시간 동안 SSH 키·AWS 토큰·API 비밀번호 등 50종 이상이 유출됐을 수 있습니다. 감염 확인법과 긴급 대응 4단계를 정리했습니다.
GitHub Actions 보안 스캐너가 오히려 비밀번호를 훔치고 있었습니다. CI/CD 파이프라인에서 가장 많이 쓰이는 오픈소스 보안 도구 Trivy(깃허브 스타 3만 3천)가 공급망 공격(Supply Chain Attack, 소프트웨어를 만드는 과정 자체를 노리는 해킹)에 당했습니다. 3월 19일부터 20일 사이, 최대 12시간 동안 악성 코드가 심어진 버전이 배포됐고, 이 기간에 Trivy를 사용한 모든 프로젝트의 SSH 키, AWS·GCP·Azure 접속 정보, API 토큰, 데이터베이스 비밀번호가 유출됐을 수 있습니다.
Trivy란? GitHub Actions 보안 스캐너 소개
Trivy는 Aqua Security가 만든 무료 보안 검사 도구입니다. 개발자들이 자기 프로젝트에 보안 구멍이 없는지 자동으로 확인할 때 사용합니다. 쉽게 말해, 코드의 건강 검진 도구입니다.
GitHub Actions(코드를 올리면 자동으로 테스트·배포하는 시스템)에서 특히 많이 쓰이며, Docker 컨테이너, 서버 설정, 프로그래밍 라이브러리의 알려진 취약점을 찾아줍니다. 깃허브 스타 3만 3,500개, 423개 이상의 프로젝트가 의존하는 핵심 도구입니다. GitHub Actions의 기본 개념이 궁금하다면 GitHub 연동과 자동 배포 가이드에서 확인할 수 있습니다.
공급망 공격 타임라인 — 12시간의 기록
이번 사건의 핵심은 공급망 공격(Supply Chain Attack)입니다. 해커가 Trivy 자체를 해킹한 게 아니라, Trivy를 배포하는 과정에 악성 코드를 심었습니다. 택배 상자 안에 몰래 도청기를 넣은 것과 비슷합니다.
Trivy 공급망 공격 상세 타임라인 (UTC 기준)
3월 19일 17:43 — 공격자가 Trivy v0.69.4에 악성 코드를 심은 버전을 배포
3월 19일 21:42 — Trivy 바이너리 복구 (약 3시간 노출)
3월 19일 21:44 — setup-trivy 복구 (약 4시간 노출)
3월 20일 05:40 — trivy-action 복구 (약 12시간 노출)
유출 가능 정보 — SSH 키, 클라우드 인증, API 토큰
악성 코드는 정보 탈취 프로그램(infostealer)이었습니다. 컴퓨터에 저장된 비밀 정보 50가지 이상의 경로를 훑어서 다음을 수집했습니다:
• SSH 키 — 서버에 접속할 때 쓰는 디지털 열쇠
• AWS, GCP, Azure 인증 정보 — 클라우드 서비스 접속 권한
• Kubernetes 토큰 — 서버 관리 시스템 접근 권한
• Docker 설정 파일 — 컨테이너 환경의 비밀 정보
• .env 파일 — API 키, 데이터베이스 비밀번호 등을 저장하는 설정 파일
• 암호화폐 지갑 정보
수집된 정보는 AES-256-CBC + RSA-4096으로 암호화된 뒤 외부로 전송됐습니다. 심지어 실행 중인 프로세스의 메모리(/proc/<pid>/mem)까지 읽어서, 메모리에만 올라가 있던 비밀 정보도 탈취했습니다.
▲ Trivy가 정상 작동할 때의 모습. 서버의 보안 취약점을 찾아주는 도구지만, 이번에는 이 도구 자체가 악성 코드에 감염됐습니다.
Trivy 공급망 공격이 가능했던 원인
사실 이 공격은 두 번째 공격이었습니다. 2월 말에 첫 번째 공급망 공격이 발생해서 3월 1일에 비밀번호를 교체했지만, 모든 비밀번호를 동시에 바꾸지 않았습니다. 공격자는 교체 과정의 빈틈을 이용해 새 비밀번호를 다시 탈취했고, 3월 19일에 두 번째 공격을 실행한 것입니다.
GitHub의 공식 보안 권고문에 따르면, 핵심 원인은 "비밀번호 교체가 원자적(동시에)이지 않았다"는 것입니다.
Trivy 사용자 긴급 대응 가이드 4단계
3월 19일~20일 사이에 Trivy를 사용한 적이 있다면, 즉시 다음을 확인해야 합니다:
1단계: 감염 여부 확인
사용 중인 Trivy 버전이 v0.69.4인지, trivy-action이 0.0.1~0.34.2 범위인지 확인합니다.
2단계: 안전한 버전으로 교체
Trivy → v0.69.2 또는 v0.69.3
trivy-action → v0.35.0
setup-trivy → v0.2.6
3단계: 모든 비밀 정보 교체
해당 파이프라인에서 접근 가능했던 SSH 키, API 토큰, 클라우드 인증 정보를 모두 새로 발급합니다.
4단계: 이상 활동 점검
GitHub 계정에 tpcp-docs라는 이름의 낯선 저장소가 생겼는지 확인합니다. 공격자가 데이터 유출용으로 만드는 백업 저장소입니다.
GitHub Actions 보안 강화 — 커밋 SHA 고정이 답이다
이번 공격이 가능했던 이유는, 대부분의 프로젝트가 GitHub Actions에서 도구를 불러올 때 버전 태그(예: @v0.34.2)를 사용하기 때문입니다. 문제는 버전 태그는 언제든 바꿀 수 있다는 점입니다. 공격자가 같은 태그에 다른 코드를 넣으면, 아무것도 모른 채 악성 코드를 실행하게 됩니다.
해결책은 간단합니다. 버전 태그 대신 커밋 SHA 해시(변경 불가능한 고유 식별자)를 사용하면 됩니다:
# 위험한 방법 (버전 태그 — 변경 가능)
- uses: aquasecurity/trivy-action@v0.34.2
# 안전한 방법 (커밋 SHA — 변경 불가능)
- uses: aquasecurity/trivy-action@a1c0606...
이 방법은 Trivy뿐 아니라 모든 GitHub Actions에 적용해야 합니다. GitHub 공식 보안 가이드에서도 동일하게 권장합니다.
2026년 오픈소스 공급망 공격 동향
이번 Trivy 사건은 고립된 사고가 아닙니다. 2026년 들어 오픈소스 공급망 공격이 급증하고 있습니다:
• Glassworm 공격 (3월) — GitHub 저장소 151개에 보이지 않는 유니코드 악성 코드 삽입
• Langflow CVE (3월) — AI 자동화 도구의 API 키가 20시간 만에 해커에게 넘어감
• Trivy 공급망 해킹 (3월) — 보안 도구 자체가 감염되어 비밀 정보 탈취
공통점은 "믿고 쓰는 도구가 무기가 된다"는 것입니다. 오픈소스 도구를 사용할 때는 항상 버전을 SHA로 고정하고, 자동 업데이트를 맹신하지 않는 습관이 필요합니다. AI 도구를 활용한 자동화 워크플로를 구축할 때도 보안은 가장 먼저 고려해야 할 사항입니다.
관련 콘텐츠 — GitHub 연동과 자동 배포 가이드 | Easy클코로 AI 시작하기 | 무료 학습 가이드 | AI 뉴스 더보기