문제 신고
← 전체 글

보안

GhostAction은 더 이상 CI 시크릿에 만족하지 않는다. 이제 Git 이력 전체를 읽는다

GitGuardian, Socket, StepSecurity가 이번 주 각각 2025년부터 이어져 온 GitHub Actions 공급망 공격에 관한 조사 결과를 공개했다. 새 버전은 이름이 등록된 CI 시크릿만 가져가지 않고 커밋 이력 전체를 캐낸다. 작년의 교체 지침으로는 더 이상 덮을 수 없는 이유다.

MAI
GitGuardian이 GhostAction 캠페인 조사 보고서와 함께 공개한 헤더 이미지.

이번 주 약 30시간 사이에 세 곳의 조사팀이 같은 GitHub 공급망 공격에 관한 조사 결과를 연달아 내놓았다. GitGuardian, Socket, StepSecurity가 모두 2025년 9월에 처음 보고된 GhostAction을 다루고 있으며, GitGuardian의 데이터는 이 캠페인이 한 번도 멈추지 않았다는 사실을 분명히 보여준다. "우리 데이터는 GhostAction이 실제로는 멈춘 적이 없음을 보여준다."

달라진 것은 공격이 도달하는 방식이 아니다. 주입된 코드가 무엇을 가져가는지다.

2025년 버전은 저장소가 GitHub Actions 워크플로에서 이미 참조하고 있던 시크릿의 이름을 읽어 그 값을 외부로 보냈다. 지금 돌고 있는 버전은 거기에 더해 작업 트리와 전체 커밋 이력을 훑어 일련의 패턴에 들어맞는 자격 증명을 찾는다. AWS 액세스 키와 세션 토큰, GitHub·GitLab 토큰, Google·Firebase·GCP 키, Slack과 SendGrid 키, 그리고 Anthropic, OpenAI, OpenRouter의 API 키다. 파일 이름은 security-audit.yml 또는 github_actions_security.yml이며, 메인테이너 본인 계정으로 기본 브랜치에 곧바로 커밋된다. 그래서 리뷰를 거치지 않는다. Socket의 표현을 그대로 옮기면 이렇다.

이 워크플로에는 보안 기능이 전혀 없다.

세 개의 데이터셋은 서로 다른 것을 세고 있다

조사팀보고된 기간범위
GitGuardian2026년 8월 31일 ~ 9월 30일373개 사용자·조직이 소유한 772개 공개 저장소에 워크플로가 밀어 넣어졌고, 주입 파일이 이름을 지목한 시크릿은 2,577건
Socket2026년 10월 8일침해된 메인테이너 계정 두 개를 통해 346개 저장소(henrywoo 소속 318개 중 원본 39개·포크 279개, kitao 소속 27개)와 uber/athenadriver
StepSecurity2026년 10월 9일 기준기본 브랜치에 악성 워크플로가 살아 있는 저장소 378개, 그중 약 182개가 이력 탐색형

이 수치들은 서로 다른 것을 센다. 특정 기간 안의 주입 건수, 하루 동안의 일괄 작업으로 도달한 저장소 수, 기본 브랜치에 아직 남아 있는 파일 수이며 단순히 합산할 대상이 아니다. The Hacker News는 10월 9일 Socket의 조사를 정리하면서, 10월 7일 이후 500개가 넘는 계정이 수만 개 저장소에 이 워크플로를 커밋했다고 보도했다. 각 업체의 게시물에 나온 숫자보다 한 자릿수 큰 값이며, 가장 신중하게 다뤄야 할 수치다. 최초 침투 경로는 세 보고서 모두에서 평범하다. 메인테이너가 유출한 개인 액세스 토큰이고, 정보 탈취 악성코드 로그에서 나왔을 가능성이 높다. Socket은 휴면 상태 저장소까지 활성 저장소와 함께 쓸려 들어간 점을 두고 "선별적 표적 설정이 아니라 자동 열거와 맞아떨어진다"고 지적했다.

작년의 복구 지침으로는 올해의 공격을 덮을 수 없다

이것이 기능 변화가 낳은 실무적 결과이며, Socket이 가장 정확하게 짚었다.

Actions 시크릿을 교체해도 커밋된 자격 증명 노출에는 아무런 효과가 없고, 작업 트리를 검사해도 Actions 시크릿 노출에는 아무런 효과가 없다.

노출이 두 종류이고, 대응도 두 가지로 나뉜다. 2025년 보고서를 읽고 Actions 시크릿을 교체한 팀은 그중 하나만 처리한 것이다. 2023년에 브랜치로 커밋되고 일주일 뒤에 삭제된 키는 여전히 이력 안에 있고, 체크아웃할 수 있는 모든 것이 읽을 수 있다. 시크릿 저장소를 아무리 교체해도 거기에는 닿지 않는다.

워크플로가 무엇을 노렸는지도 중요하다. GitGuardian이 집계한 2,577건의 시크릿은 SSH 키와 배포 서버 자격 증명(446건)이 가장 많고, 이어 Azure 자격 증명(218건), 컨테이너 레지스트리 자격 증명(142건), 데이터베이스 자격 증명(112건), AWS 액세스 키(106건)가 뒤를 잇는다. 패키지 배포 권한에 그치지 않는 인프라 접근권이다.

피해 반경을 결정하는 것은 포크다

한 계정을 통해 도달한 318개 저장소 가운데 279개가 포크였다. 포크는 워크플로 파일을 그대로 안고 있으며 Actions가 켜져 있으면 실행한다. 감염된 업스트림에서 나중에 만들어진 포크도 이를 물려받는다. 따라서 위의 저장소 수는 모두 하한선이다.

지목된 프로젝트 중 노출이 가장 큰 것은 kitao/pyxel이다. 스타 18,420개, 포크 966개, PyPI와 crates.io 양쪽으로 배포되며 Actions 시크릿에 배포용 토큰을 두고 있다. Socket은 현재까지 두 레지스트리 어디에도 악성 버전이 올라오지 않았다고 보고했다. 이 "현재까지"가 실제로 무게를 지닌다. 배포용 자격 증명은 누군가 교체할 때까지 계속 쓸 수 있는 상태로 남는다.

uber/athenadriver는 거버넌스 사례다. 조직이 소유한 저장소인데, 프로젝트의 원저자인 개인이 쓰기 권한을 그대로 유지하고 있었기 때문에 도달됐다. 조직은 자신에게 푸시할 수 있는 모든 개인 계정의 보안 수준을 그대로 물려받는다.

탐지는 작동했다. 정리는 작동하지 않았다

GitGuardian은 605개 저장소에서 3,669건의 워크플로 실행 기록을 수집했다. 실제로 실행된 것은 32개 저장소의 499건뿐이고, 나머지 대부분은 GitHub가 승인 대기로 붙잡아 두었다. 그중 336건이 완료되어 13개 저장소에서 시크릿 26건이 빠져나갔다. 플랫폼의 승인 게이트는 설계된 역할을 대체로 해냈다.

그런데도 10월 5일 기준 실질적으로 정리된 저장소는 772개 중 124개, 16퍼센트에 불과했다. 문제는 가시성이 아니었다. 조치해야 할 사람들이 조치하지 않았다는 것이다.

GitGuardian은 또한 GhostAction 피해 저장소 13곳이 서로 무관한 최소 네 개 캠페인에 걸쳐 Actions를 통한 암호화폐 채굴에도 쓰이고 있었음을 확인했다. 스타 약 6,000개인 kuafuai/DevOpsGPT의 Docker 이미지에는 채굴기가 심어져 있었는데, 이번 물결의 첫 투입보다 약 하루 반 앞서 커밋됐고 10월 4일에 되돌려졌다. GitGuardian은 이 채굴기를 GhostAction 운영자의 것으로 귀속하지 않으며, 대신 더 쓸모 있는 결론을 내놓는다. "침해된 개발자 계정 하나는 서로 무관한 여러 공격자에게 악용될 수 있다."

공개 저장소를 관리하거나 의존하고 있다면

2026년 8월 31일까지 거슬러 올라가 모든 브랜치와 포크에서 두 워크플로 파일 이름을 확인하라. 하나라도 있으면 그 저장소는 침해된 것으로 취급한다. 푸시를 가능하게 한 GitHub 자격 증명은 교체가 아니라 폐기하고, Actions 시크릿은 전부 바꾼다. 그다음 모든 브랜치와 태그의 이력을 훑어 나온 자격 증명도 함께 바꾼다. 배포용 토큰을 교체하기 전까지 레지스트리 릴리스는 보류한다. 침해 지표와 차단해야 할 외부 전송 주소는 세 건의 권고문에 실려 있다.

Sources: GitGuardian — The campaign that never stopped: tracking GhostAction from 2025 to 2026 · Socket — New GhostAction Wave Hits Hundreds of Repos, Expanding Beyond CI/CD Secrets to Cloud Credentials · StepSecurity — GhostAction Returns: Malicious "Security Audit" Workflows Now Mine Credentials from Entire Git Histories · The Hacker News — Credential-Stealing GitHub Actions Workflows Planted in Tens of Thousands of Repositories

이어서 읽기