피드로 돌아가기
GeekNewsSecurity
원문 읽기
사후 분석: TanStack npm 공급망 침해
pull_request_target 권한 허점을 이용한 Cache Poisoning 공격 및 공급망 침해
AI 요약
Context
Fork된 PR의 코드를 검증하는 과정에서 pull_request_target 트리거를 통해 외부 코드를 실행하는 구조 설계. 신뢰 경계를 분리하기 위해 read-only 권한을 설정했으나, GitHub Actions의 내부 메커니즘으로 인한 권한 우회 가능성이 존재한 상황.
Technical Solution
- pull_request_target 트리거 내에서 Fork PR의 merge ref를 checkout하여 빌드하는 구조 채택
- actions/cache@v5의 post-job save 단계가 workflow의 permissions 설정을 무시하고 실행되는 설계 결함 이용
- runner 내부 토큰을 통한 Cache Write 권한 확보로 Base Repository의 Cache Scope 접근
- 오염된 Cache Entry를 생성하여 Main Branch의 Production Workflow가 이를 Restore하도록 유도하는 공격 경로 구축
- 신뢰할 수 없는 외부 코드를 신뢰 영역의 Runner 환경에서 실행함으로써 발생한 권한 상승 문제
실천 포인트
1. pull_request_target 사용 시 Fork PR의 코드를 직접 Checkout하여 실행하는 패턴 지양
2. 외부 기여자의 코드가 실행되는 환경과 Production Cache가 공유되는지 검토
3. GITHUB_TOKEN 권한 외에 Action 내부에서 사용하는 Runner Token의 권한 범위 확인