피드로 돌아가기
사후 분석: TanStack npm 공급망 침해
GeekNewsGeekNews
Security

사후 분석: TanStack npm 공급망 침해

pull_request_target 권한 허점을 이용한 Cache Poisoning 공격 및 공급망 침해

neo2026년 5월 12일1advanced

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의 권한 범위 확인

원문 읽기