피드로 돌아가기
Dev.toSecurity
원문 읽기
GitHub Actions Cache Poisoning을 통한 TanStack 패키지 84종 감염 및 OIDC 토큰 탈취
What now? explaining the TanStack Supply Chain Attack
AI 요약
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 검토