GitHub 5,561개 저장소 덮친 Megalodon, CI/CD가 공격 표면으로

공급망 공격의 표적이 패키지 설치 스크립트에서 CI/CD workflow로 더 깊숙이 이동했다. Megalodon으로 불리는 캠페인은 5,561개 GitHub 저장소에 악성 GitHub Actions workflow를 심어, 빌드 환경에 들어 있는 credential과 secret을 훔치려 한 대규모 자동화 공격이다.

SecurityWeek 보도는 SafeDep 분석을 인용해, 공격자가 2026년 5월 18일 약 6시간 동안 5,718개 악성 commit을 밀어 넣었다고 전했다. 감염된 workflow는 push와 pull request에서 동작하도록 추가되거나, 특정 trigger를 가진 기존 workflow를 바꾸는 방식으로 dormant backdoor를 만들었다.

핵심은 훔치려 한 데이터의 폭이다. 보도에 따르면 payload는 CI environment variables, AWS credentials, GCP access tokens, Azure credentials, SSH private keys, Docker·Kubernetes configuration, API keys, database connection strings, GitHub Actions tokens, GitLab CI/CD tokens 등을 노렸다. 빌드 runner는 배포 권한과 cloud 접근권을 함께 들고 있는 경우가 많아, 애플리케이션 서버보다 더 넓은 권한을 가진 진입점이 될 수 있다.

이번 캠페인은 Tiledesk package의 악성 버전이 발견되면서 드러났다. SecurityWeek는 같은 npm 계정이 clean 2.18.5와 compromised versions를 모두 배포했지만, 공격자가 npm 계정을 직접 건드린 것이 아니라 GitHub repository를 오염시킨 뒤 maintainer가 poisoned source에서 package를 publish한 구조였다고 설명했다.

대응의 초점도 바뀐다. dependency lockfile만 보는 검토로는 부족하다. CODEOWNERS로 workflow file 변경을 강제 review하고, GitHub Actions token 권한을 줄이며, OIDC cloud federation의 token request log를 확인해야 한다. 특히 5월 18일 build-bot, auto-ci, ci-bot, pipeline-bot류 author로 들어온 workflow 변경은 별도 감사 대상이다.

Megalodon은 개발 인프라가 소프트웨어 공급망의 중심이라는 사실을 다시 확인시켰다. 코드 자체가 깨끗해도, 그 코드를 빌드하고 배포하는 자동화가 오염되면 downstream package와 cloud account가 동시에 위험해진다.