피드로 돌아가기
TanStack shipped a postmortem for the 42-package npm compromise. Here is what every project should change this week.
Dev.toDev.to
Security

SLSA 인증 우회한 CI 파이프라인 오염 및 OIDC 토큰 탈취 사고 분석

TanStack shipped a postmortem for the 42-package npm compromise. Here is what every project should change this week.

GDS K S2026년 5월 29일11advanced

Context

GitHub Actions의 pull_request_target 트리거와 공유 캐시 구조를 악용한 공급망 공격 발생. 저신뢰 환경(PR)에서 고신뢰 환경(Release)으로 권한을 전이시키는 설계적 허점이 핵심 병목으로 작용함.

Technical Solution

  • pull_request_target 트리거를 통한 Fork 코드의 Base 저장소 권한 획득 및 Pwn Request 패턴 실행
  • pnpm package store의 공유 캐시 키를 악용한 저신뢰-고신뢰 컨텍스트 간 Cache Poisoning 수행
  • runner 프로세스의 /proc//mem 메모리 직접 접근을 통한 OIDC 토큰 추출 및 npm 인증 우회
  • 탈취한 OIDC 토큰을 이용해 정식 Signing 프로세스 내에서 악성 패키지를 배포하여 유효한 SLSA provenance 확보
  • 2.3MB 크기의 obfuscated payload를 통한 Credential 수집 및 P2P 네트워크 기반의 외부 유출 구조 설계
  • 탈취한 publish 권한 토큰을 활용해 타 패키지로 전파되는 Self-propagation 웜 구조 구현

1. pull_request_target 트리거 사용 시 Fork 코드를 Checkout 하거나 실행하는 로직 제거

2. PR Workflow와 Release Workflow 간의 Cache Key 네임스페이스를 완전히 분리하여 교차 오염 방지

3. OIDC 토큰 사용 작업 전후로 불필요한 메모리 덤프나 외부 바이너리 실행 권한 제한

4. CI 내부의 @ts-nocheck 또는 skip audit 패턴 사용 시 명확한 기술적 사유 문서화 및 주기적 감사

원문 읽기