처리중입니다. 잠시만 기다려주세요.
TTJ 코딩클래스
정규반 단과 자료실 테크 뉴스 코딩 퀴즈
테크 뉴스
Hacker News 2026.03.24 83

Trivy를 노린 GitHub Actions 공급망 공격 — 태그 변조로 시크릿이 유출된다

Hacker News 원문 보기
Trivy를 노린 GitHub Actions 공급망 공격 — 태그 변조로 시크릿이 유출된다

또다시 터진 GitHub Actions 공급망 공격

컨테이너 이미지와 IaC(Infrastructure as Code) 취약점 스캐너로 널리 사용되는 Trivy가 또다시 공급망 공격의 표적이 되었습니다. 이번에는 GitHub Actions의 태그 시스템을 악용한 공격으로, Trivy의 공식 GitHub Action인 aquasecurity/trivy-action의 태그가 변조되어 CI/CD 파이프라인에서 시크릿(비밀키, 토큰 등)이 외부로 유출될 수 있는 상황이 발생했습니다.

GitHub Actions에서 서드파티 액션을 사용할 때 보통 uses: aquasecurity/trivy-action@v0.20.0처럼 태그를 지정합니다. 문제는 Git 태그라는 것이 본질적으로 가변(mutable)이라는 점입니다. 태그는 특정 커밋을 가리키는 포인터일 뿐이므로, 저장소에 쓰기 권한이 있는 누군가가 기존 태그를 삭제하고 악성 커밋을 가리키는 같은 이름의 태그를 새로 만들 수 있습니다. 사용자 입장에서는 같은 @v0.20.0을 참조하고 있지만, 실제로 실행되는 코드는 완전히 다른 것이 됩니다.

공격의 구체적인 메커니즘

이번 공격에서 확인된 악성 코드는 CI 환경의 환경 변수와 시크릿을 수집하여 외부 서버로 전송하는 동작을 수행했습니다. GitHub Actions 워크플로우가 실행될 때, 러너(runner) 환경에는 GITHUB_TOKEN, 클라우드 서비스 인증 키, npm/PyPI 퍼블리시 토큰 등 다양한 시크릿이 환경 변수로 주입됩니다. 공격자는 이를 빼내기 위해 액션의 진입점 스크립트에 시크릿을 Base64로 인코딩한 뒤 외부 엔드포인트로 HTTP 요청을 보내는 코드를 삽입했습니다.

특히 우려되는 점은 이 공격이 Trivy만의 문제가 아니라는 것입니다. 올해 초에도 tj-actions/changed-files라는 인기 GitHub Action이 동일한 방식으로 공격당한 사례가 있었습니다. 이는 GitHub Actions 생태계 전체의 구조적 취약점을 보여주는 패턴입니다. 수천, 수만 개의 CI 파이프라인이 태그 기반으로 서드파티 액션을 참조하고 있고, 이 중 상당수가 태그 변조에 무방비 상태입니다.

왜 이 문제가 반복되는가

근본적인 원인은 GitHub Actions의 의존성 관리 모델에 있습니다. 패키지 매니저(npm, pip 등)에서는 한번 퍼블리시된 버전을 수정할 수 없는 불변성(immutability)이 보장됩니다. npm에서 lodash@4.17.21을 설치하면 항상 같은 코드를 받게 됩니다. 하지만 GitHub Actions의 태그는 이런 보장이 없습니다.

GitHub은 이 문제에 대한 해결책으로 태그 대신 전체 커밋 SHA를 사용하는 것을 권장합니다. 예를 들어 uses: aquasecurity/trivy-action@v0.20.0 대신 uses: aquasecurity/trivy-action@a1b2c3d4e5f6...처럼 특정 커밋 해시를 고정하는 방식입니다. SHA는 변조가 사실상 불가능하므로 항상 같은 코드가 실행됩니다. 하지만 현실적으로 이 방식은 가독성이 떨어지고, 업데이트 시 매번 새 SHA를 찾아 교체해야 하는 번거로움이 있어 널리 채택되지 않고 있습니다.

Dependabot이나 Renovate 같은 도구를 사용하면 SHA 핀닝을 자동화할 수 있지만, 많은 팀이 이런 설정을 하지 않은 채 태그만 사용하고 있는 것이 현실입니다.

방어 전략: 실무에서 당장 할 수 있는 것들

첫째, 커밋 SHA 핀닝으로 전환하세요. 모든 서드파티 GitHub Actions 참조를 태그에서 커밋 SHA로 바꾸는 것이 가장 확실한 방어입니다. actions/checkout@v4도 예외가 아닙니다. Renovate를 설정해두면 새 버전이 나올 때 자동으로 PR을 만들어주므로 유지보수 부담도 줄일 수 있습니다.

둘째, 워크플로우의 시크릿 범위를 최소화하세요. GITHUB_TOKEN의 권한을 permissions 블록으로 명시적으로 제한하고, 불필요한 시크릿이 특정 job에 노출되지 않도록 분리하세요. 취약점 스캔 같은 작업에는 쓰기 권한이 필요 없는 경우가 대부분입니다.

셋째, GitHub의 allow-list 기능을 활용하세요. Organization 수준에서 허용된 Actions만 사용할 수 있도록 제한하면, 새로운 서드파티 액션이 무분별하게 추가되는 것을 방지할 수 있습니다.

한국 개발자에게 주는 시사점

국내에서도 GitHub Actions는 CI/CD의 사실상 표준으로 자리잡았습니다. 특히 스타트업이나 중소 규모 팀에서는 서드파티 액션을 적극적으로 활용하는 경우가 많은데, 이번 사건은 그 편의성 이면의 위험을 여실히 보여줍니다. Trivy 자체가 보안 스캐닝 도구라는 점에서 아이러니하기도 합니다 — 보안을 강화하려고 도입한 도구가 공격의 벡터가 된 셈이니까요.

지금 당장 팀의 .github/workflows/ 디렉토리를 열어서 서드파티 액션들이 태그로 참조되고 있는지 확인해보세요. 만약 그렇다면, 이번 주말에 SHA 핀닝으로 전환하는 것을 강력히 권장합니다.

정리

GitHub Actions의 태그 기반 참조는 구조적으로 공급망 공격에 취약하며, Trivy 사태는 이것이 이론이 아닌 현실임을 다시 한번 증명했습니다. 여러분의 CI/CD 파이프라인은 안전한가요? 서드파티 액션을 어떤 방식으로 관리하고 계신지 공유해주세요.


🔗 출처: Hacker News

이 뉴스가 유용했나요?

이 기술을 직접 배워보세요

AI 도구, 직접 활용해보세요

AI 시대, 코딩으로 수익을 만드는 방법을 배울 수 있습니다.

AI 활용 강의 보기

"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"

실제 수강생 후기
  • 비전공자도 6개월이면 첫 수익
  • 20년 경력 개발자 직강
  • 자동화 프로그램 + 소스코드 제공

매일 AI·개발 뉴스를 받아보세요

주요 테크 뉴스를 매일 아침 이메일로 전해드립니다.

스팸 없이, 언제든 구독 취소 가능합니다.