피드로 돌아가기
What now? explaining the TanStack Supply Chain Attack
Dev.toDev.to
Security

GitHub Actions Cache Poisoning을 통한 TanStack 패키지 84종 감염 및 OIDC 토큰 탈취

What now? explaining the TanStack Supply Chain Attack

Paulo Victor Leite Lima Gomes2026년 5월 12일3advanced

Context

GitHub Actions의 pull_request_target 트리거가 가진 과도한 권한 설정으로 인해 외부 PR에서도 베이스 저장소의 Secret 접근 및 Cache 쓰기가 가능한 구조적 취약점 존재. 이를 이용해 신뢰된 CI 환경 내에서 악성 코드를 실행하고 npm 패키지를 오염시키는 Supply Chain Attack 발생.

Technical Solution

  • pull_request_target 트리거를 통한 베이스 저장소 컨텍스트 진입 및 1.1 GB 규모의 Poisoned Cache 생성
  • 정상적인 Maintainer의 PR 병합 시점에 맞춰 Poisoned Cache를 복구하여 신뢰된 CI 환경 내 악성 코드 활성화
  • Trusted Publishing용 OIDC Token을 동적으로 생성하여 npm 계정 비밀번호 없이 42개 패키지의 84개 버전으로 악성 코드 배포
  • 감염된 머신 내 AWS, GitHub, SSH, Kubernetes 등 고권한 자격 증명을 수집하여 암호화 채널로 유출
  • 수집한 권한을 이용해 사용자가 유지관리하는 타 패키지까지 자동으로 재배포하는 Worm 구조의 Self-propagation 구현

1. `pull_request_target` 사용 시 접근 가능한 Secret 및 Cache 권한 전면 재검토

2. `pnpm` 또는 `Bun` 설정을 통한 `postinstall` 스크립트 기본 비활성화 적용

3. 개발 환경의 Host OS 분리를 위해 Docker Dev Containers 또는 VM 도입

4. `.env` 파일 대신 Doppler, Infisical 등 전용 Secrets Manager 활용

5. 신규 배포 패키지에 대해 최소 24시간의 대기 시간을 갖는 Package Age Policy 검토

원문 읽기