-
공개된 GitHub 비밀키(Secret) 로 인해 GitHub의 정적 분석 도구인 CodeQL이 공급망 공격에 노출
- 문제의 키는 1.022초 동안 유효했으며, 해당 시간 내 공격자는 GitHub Actions 워크플로우에서 임의 코드 실행 가능
- 이 취약점은 공개 CVE로 등재됨: CVE-2025-24362
주요 피해 시나리오
공격자는 이 취약점을 통해 다음과 같은 공격을 실행할 수 있었음:
-
CodeQL을 사용하는 리포지토리의 소스코드 유출 (지적재산 침해)
-
GitHub Actions의 비밀키 탈취 및 2차 공격 가능
-
내부 인프라에서 CodeQL 워크플로우를 통한 코드 실행
-
GitHub Actions Cache를 사용하는 워크플로우의 비밀키까지 탈취 가능
공격 탐지 및 실험 과정
-
Praetorian 연구팀은 GitHub Actions에서 생성되는 워크플로우 아티팩트에 포함된 비밀키를 스캔하는 도구를 개발
- CodeQL 관련 리포지토리에서 비밀키가 포함된 debug artifact 발견
- 해당 키가 유효한 동안 공격자가 branch/tag를 생성하고 파일을 푸시할 수 있음을 증명하는 **PoC 도구 artifact_racer.py**를 제작 및 실행
핵심 실험 결과
- 공격자는 해당 토큰으로:
- CodeQL은 기본적으로 v3 태그를 참조하며, 해당 태그를 공격자가 덮어쓸 수 있었음 → 모든 CodeQL 사용자에게 악성 코드 배포 가능
확산 가능성: 왜 위험한가?
- 대부분의 사용자는 CodeQL을 수동으로 설정하지 않고, GitHub 리포지토리 설정에서 "Enable CodeQL" 버튼을 클릭
- 이때 자동으로 설정되는 워크플로우는 github/codeql-action 리포지토리를 참조하며, v3 태그 기반
- 공격자가 v3 태그를 악성 커밋으로 덮어쓸 경우, 수많은 프로젝트에서 자동으로 악성 코드 실행
추가 공격 가능성: 캐시 중독 (Cache Poisoning)
- 기본 CodeQL 워크플로우는 GitHub Actions Cache를 사용함
- 이를 통해 공격자는 빌드 파이프라인에 악성 캐시를 주입, 이후 워크플로우에서 비밀키 탈취 및 내부 접근 가능
- 대표적 피해 대상:
GitHub의 대응 및 패치
-
2025년 1월 22일 취약점 보고 후, GitHub은 3시간 내에:
- 취약 워크플로우 중단
- 비밀키 업로드 방지 PR 등록
- 패치 버전 배포: CodeQL Action v3.28.3
- 공식 보안 권고문: GHSA-vqf5-2xx6-9wfm
대응 방안
- 워크플로우에서 아티팩트를 업로드할 때는 업로드 대상 파일을 제한할 것
- 환경 변수나 .git/config, _temp/ 디렉터리 내 파일 포함 주의
-
GITHUB_TOKEN은 읽기 전용 권한만 부여
- 업로드 전 비밀키 스캔 수행 권장 (Nosey Parker 등 도구 활용)
결론
- CodeQL의 기본 설정으로도 수많은 프로젝트가 공급망 공격에 노출될 수 있음
- GitHub Actions의 보안 취약점은 여전히 심각한 위협이며, 커뮤니티의 지속적인 관심과 방어 전략이 요구됨
관련 정보