Skip to main content
공개 노트

Megalodon: 공격자는 코드가 아니라 CI를 노렸다

Views 3약 3분생성형 AI 활용
Summary

Megalodon: 공격자는 코드가 아니라 CI를 노렸다

Megalodon은 GitHub 저장소에 악성 GitHub Actions 워크플로를 삽입한 공급망 공격이다. 2026년 5월 18일 11:36~17:48 UTC, 약 6시간 동안 5,561개 저장소에 5,718개의 악성 커밋이 푸시됐다.1

이 공격의 핵심은 애플리케이션 코드가 아니라 자동화 경로를 노렸다는 점이다. 공격자는 정상적인 CI 정리나 빌드 자동화처럼 보이는 커밋을 만들고, 그 안에 비밀값 탈취용 워크플로를 숨겼다.

Megalodon이 노린 것은 “신뢰받는 자동화”였다

GitHub Actions는 빌드, 테스트, 배포를 자동 실행하는 CI/CD 도구다. 많은 저장소에서 Actions는 클라우드 자격 증명, 배포 토큰, SSH 키, API 토큰 같은 민감한 비밀값에 접근한다.

Megalodon은 바로 이 지점을 악용했다. 악성 워크플로에는 Base64로 인코딩된 bash 페이로드가 포함됐고, 이 페이로드는 CI 실행 중 인라인으로 디코딩되어 실행됐다.2 목적은 환경 변수와 키, 토큰, CI 비밀값을 수집하는 것이었다.

중요한 점은 공격자가 반드시 애플리케이션 코드를 바꿀 필요가 없었다는 것이다. .github/workflows/ 아래의 자동화 파일만 바꿔도, 정상적인 개발·배포 흐름 안에서 민감 정보에 접근할 수 있었다.

왜 눈에 띄기 어려웠나

공격자는 악성 커밋을 “자동화 커밋”처럼 보이게 만들었다. build-bot, auto-ci, ci-bot, pipeline-bot 같은 작성자 이름을 사용했고, 무작위 8자 사용자명 형태의 일회용 GitHub 계정도 활용했다.1

또한 git config를 설정해 커밋 작성자 신원을 위조했다.1 겉으로 보면 봇이 파이프라인을 정리하거나 CI 설정을 추가한 것처럼 보일 수 있다.

이런 방식이 위험한 이유는 단순하다. 많은 팀이 애플리케이션 코드 변경에는 민감하지만, CI 설정 변경은 “운영 편의”나 “자동화 개선”으로 보고 상대적으로 느슨하게 검토하기 때문이다. Megalodon은 바로 그 신뢰를 공격했다.

공급망 공격은 코드 밖에서도 시작된다

Megalodon은 저장소 하나에 악성 코드를 심는 수준의 문제가 아니다. CI/CD는 패키지 빌드, 테스트, 릴리스, 배포와 연결된다. 따라서 워크플로가 오염되면 결과물과 배포 과정까지 신뢰하기 어려워진다.

Tiledesk 사례가 대표적이다. 관련 저장소가 영향을 받았고, @tiledesk/tiledesk-server 일부 버전이 오염된 상태로 npm에 배포된 것으로 보고됐다.2 애플리케이션 코드 자체가 정상처럼 보여도, 빌드와 배포 경로가 오염되면 최종 산출물은 안전하다고 보기 어렵다.

특히 workflow_dispatch처럼 수동 실행 가능한 워크플로는 더 까다롭다. 즉시 실행되지 않더라도 저장소 안에 남아 있다가, 나중에 토큰을 이용해 호출되는 “대기형 백도어”가 될 수 있기 때문이다.3

지금 점검해야 할 것

Megalodon의 실질적인 교훈은 명확하다. CI 파일은 설정 파일이 아니라 실행 권한을 가진 코드로 다뤄야 한다.

우선 .github/workflows/ 변경을 일반 코드 변경만큼 엄격히 검토해야 한다. 새 워크플로가 추가됐는지, Base64 인코딩된 스크립트나 인라인 셸 실행이 있는지, 외부로 데이터를 전송하는 명령이 포함됐는지 확인해야 한다.

둘째, 기본 브랜치 보호와 필수 리뷰를 적용해야 한다. 악성 커밋이 손상된 PAT 또는 deploy key를 통해 푸시된 것으로 설명된 만큼,1 직접 푸시를 제한하고 리뷰 단계를 강제하는 것이 중요하다.

셋째, GitHub Actions에 부여하는 권한과 비밀값을 최소화해야 한다. 모든 워크플로가 모든 토큰과 키에 접근할 수 있는 구조라면, 워크플로 하나의 오염이 곧 전체 배포 권한의 노출로 이어질 수 있다.

Megalodon은 공급망 공격의 초점이 패키지 코드에서 CI/CD 자동화로 넓어졌음을 보여준다. 이제 신뢰해야 할 대상은 소스코드만이 아니다. 코드를 빌드하고, 테스트하고, 배포하는 자동화 경로까지 함께 검증해야 한다.

1Megalodon GitHub Attack Targets 5,561 Repos with Malicious CI/CD Workflows

2Megalodon: Mass GitHub Actions Secret Exfiltration Across 5,500+ Public Repositories

3Over 5,500 GitHub Repositories Infected in 'Megalodon' Supply Chain Attack

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기