깃허브에 있는 구글, 마이크로소프트, AWS, 레드햇 등 여러 유명 오픈소스 프로젝트에서 깃허브 인증 토큰이 유출된 것으로 밝혀졌다. 인증 토큰 유출은 깃허브가 제공하는 워크플로 자동화 도구인 깃허브 액션스(GitHub Actions)를 통해 발생한 것으로 알려졌다.
깃허브 액션스는 프로젝트 빌드, 테스트, 배포 파이프라인을 자동화하는 지속적 통합 및 지속적 배포(CI/CD) 도구다. 사용자는 깃허브 액션스를 사용해 리포지토리에 대한 풀 리퀘스트를 빌드하고 테스트하거나 병합된 풀 리퀘스트를 운영 환경에 배포하는 워크플로를 만들 수 있다. 깃허브 액션스에는 워크플로 실행 중 생성되는 파일을 산출물(artifacts)로 저장하는 기능이 있다. 사이버 보안 기업 팔로알토네트웍스 위협 인텔리전스 팀인 유닛42(Unit 42)는 이 산출물을 통해 깃허브 유명 오픈소스 프로젝트에서 깃허브 토큰과 API 키 등의 정보가 유출됐다고 보고했다.
유닛42가 아티팩커드(ArtiPACKED)라고 부르는 공격 방법은 깃허브의 안전하지 않은 기본 설정, 사용자 설정 실수, 불충분한 보안 검사 등 요인 조합으로 가능해진다. 문제 중 하나는 리포지토리 코드를 클론해 워크플로 실행 중에 사용할 수 있게 하는 ‘actions/checkout’ 액션 설정이다. 기본적으로 ‘actions/checkout’ 액션은 워크플로 내 인증된 작업을 가능하게 하기 위해 깃허브 토큰을 로컬 .git 디렉토리에 보관한다. 하지만 사용자가 실수로 체크아웃 디렉토리 전체를 산출물 일부로 업로드할 경우 git 폴더 내 깃허브 토큰이 공개될 수 있다고 한다. 또 같은 폴더에 API 키, 클라우드 서비스 접근 토큰, 다양한 계정 자격 증명 등이 포함될 수 있다고 한다.
또 다른 문제는 환경 변수를 사용해 깃허브 토큰을 저장하는 CI/CD 파이프라인이다. 워크플로 내 액션이나 스크립트가 이런 데이터를 의도적으로 또는 실수로 로그에 기록할 경우 로그가 산출물로 업로드될 수 있다. 이런 문제로 인해 악의적인 공격자가 깃허브 토큰을 산출물 로그에서 추출해 유효 기간이 만료되기 전에 악용할 수 있다고 한다. 또 깃허브 액션스를 사용하는 프로젝트나 공개 리포지토리를 식별하고 자동 스크립트로 이들을 스캔해 공격 대상을 좁힐 수 있다고 한다.
만일 악의적인 행위자가 깃허브 토큰 등을 발견할 경우 비공개 리포지토리에 접근하거나 비공개 소스 코드를 훔치거나 악의적인 코드를 심을 수 있게 된다.
유닛42 조사 결과 14개(firebase/firebase-js-sdk(Google), microsoft/TypeScript-repos-automation, microsoft/json-schemas, microsoft/typescript-bot-test-triggerer, Azure/draft(Microsoft), Ubuntu/adsys(Canonical), quay/clair(Red Hat), CycloneDX/cdxgen(OWASP), opensearch-project/security(AWS), penrose/penrose, Aiven-Open/guardian-for-apache-kafka, Deckhouse/Deckhouse, datalad/git-annex, schemacrawler/SchemaCrawler, zama-ai/concrete-ml, official-stockfish/Stockfish, libevent/libevent) 대규모 오픈소스 프로젝트에서 깃허브 토큰을 포함한 산출물이 공개되어 있음을 발견했다. 이미 이 프로젝트들에 연락했으며, 모두 문제를 수정했다고 보고됐다.
한편 유닛42는 이 문제를 깃허브 버그 바운티 프로그램에도 보고했지만 깃허브 이 문제를 버그가 아닌 정보로 분류하고 업로드된 산출물 보호는 사용자 책임이라는 판단을 내렸다고 한다. 관련 내용은 이곳에서 확인할 수 있다.