서론
2026년 5월 11일, 인기 프론트엔드 라이브러리 생태계 TanStack이 공급망 공격(Supply Chain Attack)을 당했다. 공격자는 GitHub Actions의 3가지 취약점을 연속적으로 악용하여 42개 패키지, 84개 버전에 악성코드를 배포했다. 이 공격은 단순 취약점 발견을 넘어, 클라우드 자격증명 탈취를 목표로 하는 정교한 공급망 공격이었다.
본론
공격 개요
공격 시점은 2026년 5월 11일 19:20~19:26 UTC, 약 6분 동안 이루어졌다. 공격자는 TanStack 라이브러리 패밀리 중 Router/Start 저장소만 공격했으며, Query, DB, Store, AI, Table, Form 등 다른 패밀리는 영향을 받지 않았다.
공격자는 3가지 취약점을 연속적으로 사용했다:
1. pull_request_target "Pwn Request" 패턴 오구성
2. GitHub Actions 캐시 포이즈닝(Trust Boundary 오류)
3. GitHub Actions 러너 메모리에서 OIDC 토큰 추출
공격 기술적 세부사항
1단계: 캐시 포이즈닝 (공격 전 단계)
공격자는 먼저 "github.com/zblgg/configuration"라는 Fork를 생성하고, 이를 감지를 피하기 위해 이름을 변경했다. 2026년 5월 11일 PR #7378을 제출하여 pull_request_target 워크플로우를 트리거하고, 악성 코드가 포함된 캐시를 생성했다.
2단계: OIDC 토큰 탈취 및 악성 버전 배포
정식 릴리스 워크플로우가 실행될 때, 포이즈닝된 캐시가 복원되었다. 악성 바이너리는 GitHub Actions 러너 프로세스의 메모리를 덤프하여 OIDC 토큰을 추출했고, 이를 사용하여 npm 레지스트리에 직접 악성 버전을 게시했다.
악성코드 동작 방식
개발자나 CI 환경에서 npm install, pnpm install, yarn install을 실행하면 악성 버전의 optionalDependencies가 해석되고, 약 2.3MB 크기의 난독화된 router_init.js가 실행된다. 이 악성코드는 다음 기능을 수행한다:
- 자격증명 수집: AWS IMDS/Secrets Manager, GCP 메타데이터, Kubernetes 서비스 어카운트 토큰, Vault 토큰, ~/.npmrc (npm 토큰), GitHub 토큰 (환경변수, gh CLI, .git-credentials), SSH 개인키 수집
- 데이터 유출: Session/Oxen 메신저 파일 업로드 네트워크(filev2.getsession.org, seed{1,2,3}.getsession.org)를 통해 수집된 데이터를 유출. 이 네트워크는 종단 간 암호화되어 있어 IP/도메인 차단만이 유일한 네트워크 대응책
- 자가 전파: registry.npmjs.org/-/v1/search?text=maintainer:를 통해 피해자가 유지 관리하는 다른 패키지를 열거하고, 동일한 주입으로 재게시하여 npm 전체로 위험 확산
탐지 및 대응
외부 연구원(ashishkurmi, StepSecurity)이 공개 약 20~26분 만에 악성 버전을 탐지하고 상세 기술 분석으로 보고했다. TanStack 유지관리팀은:
- 1시간 43분 만에 모든 악성 버전(84개)을 deprecate 처리
- npm 보안팀과 협력하여 악성 타르볼을 레지스트리 서버 측에서 제거
- 2026년 5월 15일 공식적으로 "All Clear" 상태 발표
영향 범위 및 리스크
영향 받은 패키지: 42개 @tanstack/* 패키지
- React Router, Vue Router, Solid Router, Devtools, Router CLI, Start 패밀리 등
- 패키지당 2개 악성 버전(약 6분 간격으로 게시)
국내 조직 관점 리스크:
- CI/CD 파이프라인이 TanStack 패키지를 사용하는 경우, 실행 환경의 모든 자격증명이 유출되었을 가능성 있음
- 클라우드(AWS, GCP) 자격증명 탈취로 인한 데이터 유출, 비용 부정 사용, 악용 가능성
- GitHub 토큰 탈취로 인한 저장소 접근, 코드 조작, PR 남용 가능성
- SSH 키 탈취로 인한 서버 침해, 랜섬웨어 배포 가능성
탐지 방법
1. 매니페스트 검사:
악성 매니페스트는 다음 optionalDependencies 엔트리를 포함:
"optionalDependencies": {
"@tanstack/setup": "github:tanstack/router#79ac49eedf774dd4b0cfa308722bc463cfe5885c"
}
2. 페이로드 파일 존재 확인:
npm pack @tanstack/<name>@<version>
tar -xzf *.tgz
grep -A3 optionalDependencies package/package.json
ls -la package/router_init.js # 2.3MB 악성 페이로드
완화 및 패치 우선순위
즉시 대응 (24시간 이내):
1. 자격증명 교체: 2026년 5월 11일 19:20~19:30 UTC 사이에 @tanstack/ 패키지를 설치한 모든 호스트의 자격증명 즉시 교체
- AWS, GCP, Kubernetes, Vault, GitHub, npm, SSH 자격증명
2. 감사 로그 검토:* 해당 기간 동안의 클라우드 감사 로그 확인 및 의심스러운 활동 점검
단기 대응 (72시간 이내):
3. 버전 고정: 2026-05-11 19:00 UTC 이전에 게시된 정상 버전으로 고정
4. node_modules/lockfile 정리: 삭제 후 재설치로 전 이전 의존성 정상화
5. npm 설정: npm config set ignore-scripts true로 임시 라이프사이클 스크립트 실행 방지
장기 대응 (1주 이내):
6. 정상 패치 버전으로 업그레이드: 각 패키지의 패치 버전으로 업데이트
7. CI 파이프라인 감사: 해당 기간 동안 실행된 CI 파이프라인 러너를 손상된 것으로 간주하고 재설치
8. 공급망 보안 강화:
- pull_request_target 워크플로우 감사 및 제한
- GitHub Actions 캐시 키 관리 강화
- OIDC 토큰 권한 최소 원칙 적용
- 서드파티 액션 버전 고정(해시 핀)
- 패키지 출처 검증(SLSA Provenance) 도입
CISA KEV 카탈로그 요구사항
CISA Known Exploited Vulnerabilities Catalog에 등록된 CVE-2026-45321에 따르면, 연방 민간 기관(FCEB)은 2026년 6월 10일까지 완화 조치를 완료해야 한다. 일반 조직도 이 기한을 준수하는 것을 권장한다.
결론
이번 TanStack 공급망 공격 사례는 현대 소프트웨어 개발 생태계의 가장 큰 취약점 중 하나인 공급망 보안을 보여준다. 단일 취약점이 아니라 3가지 취약점이 연속적으로 작동했으며, 탐지되기 전까지 약 20분 동안 유포되었다.
하지만 외부 보안 연구원의 빠른 탐지와 TanStack 팀의 신속한 대응으로 피해를 최소화했다. 이 사례에서 배워야 할 교훈은:
- CI/CD 파이프라인 보안 강화의 중요성
- 워크플로우 감사와 캐시 관리의 필요성
- 외부 보안 커뮤니티와의 협력의 가치
- 신속한 사고 대응 계획(Incident Response)의 중요성
조직은 자체 CI/CD 파이프라인을 감사하고, 공급망 보안을 강화해야 한다. 특히 open-source 패키지 의존성을 사용하는 경우, 출처 검증과 신뢰할 수 있는 배포 채널 사용이 필수적이다.
참고자료
-
CISA KEV Catalog
https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-45321 -
NVD
https://nvd.nist.gov/vuln/detail/CVE-2026-45321 -
GitHub Security Advisory - GHSA-g7cv-rxg3-hmpx
https://github.com/TanStack/router/security/advisories/GHSA-g7cv-rxg3-hmpx -
TanStack Postmortem
https://tanstack.com/blog/npm-supply-chain-compromise-postmortem -
GitHub Issue Tracking
https://github.com/TanStack/router/issues/7383 -
StepSecurity Analysis
https://www.stepsecurity.io/blog/mini-shai-hulud-is-back-a-self-spreading-supply-chain-attack-hits-the-npm-ecosystem
본 콘텐츠는 AI 기술로 작성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하셨다면 댓글을 통해 소중한 의견 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.
댓글 (0)
댓글을 작성하려면 로그인이 필요합니다.
로그인아직 댓글이 없습니다.
첫 번째 댓글을 작성해보세요!