
🛡️ CVE-2026-45321을 위한 원커맨드 스캐너 — TanStack npm 공급망 공격
원-커맨드 공급망 공격 스캐너 for CVE-2026-45321 / GHSA-g7cv-rxg3-hmpx
2026년 5월 11일 42개의 @tanstack/* npm 패키지(84개의 악성 버전)를 손상시킨 "미니 샤이-훌루드" 웜을 탐지합니다.
# 한 줄 — 프로젝트 스캔
curl -fsSL https://raw.githubusercontent.com/Caixa-git/tanstack-shield/main/tanstack-shield.sh | bash
# 특정 디렉토리 스캔
curl -fsSL https://raw.githubusercontent.com/Caixa-git/tanstack-shield/main/tanstack-shield.sh | bash -s -- /path/to/project
# 다운로드하여 직접 사용
git clone https://github.com/Caixa-git/tanstack-shield.git
cd tanstack-shield
python3 tanstack-shield.py .
2026년 5월 11일, 공격자는 세 가지 알려진 취약점 클래스 — pull_request_target (Pwn Request) 오설정, GitHub Actions 캐시 중독, OIDC 토큰 메모리 추출 — 을 연쇄적으로 사용하여 TanStack의 신뢰받는 npm 신원 하에 42개의 @tanstack/* 패키지에 걸쳐 84개의 악성 버전을 게시했습니다.
이 멀웨어는 자격 증명(GitHub 토큰, npm 토큰, SSH 키, AWS/GCP/Kubernetes/Vault)을 수집하고 Session 메신저를 통해 유출했으며, 피해자가 유지 관리하는 다른 패키지로 자가 전파되었습니다.
동일한 캠페인은 Mistral AI(npm + PyPI), UiPath(65개 패키지), OpenSearch(주간 npm 다운로드 130만), 그리고 총 170개 이상의 npm 패키지와 2개의 PyPI 패키지에도 영향을 미쳤습니다.
프로젝트에서 다음을 확인하는 읽기 전용 스캐너:
참고: 잠금 파일은 프로젝트 루트에서만 스캔됩니다. 서브디렉토리(예: packages/web/package-lock.json)에 잠금 파일이 있는 모노레포를 사용하는 경우 각 워크스페이스 내에서 스캐너를 실행하거나, 최상위 잠금 파일이 있는 모노레포 루트에서 실행하세요.
@tanstack/*이(가) package.json에서 발견됨. 잠금 파일을 확인하세요.⚠️ 중요: 이 멀웨어는 PC를 파괴하는 바이러스가 아닌 자격 증명 도난 멀웨어입니다. 🔴가 탐지된 경우:
curl -fsSL https://raw.githubusercontent.com/Caixa-git/tanstack-shield/main/tanstack-shield.sh | bash -s -- --json
이 도구는 읽기 전용입니다. 시스템에서 파일을 생성, 수정 또는 삭제하지 않습니다.
MIT
| 항목 | 파일 | 결과 |
|---|
| npm 잠금 파일 | package-lock.json, npm-shrinkwrap.json | 🔴 정확한 악성 버전 일치 |
| pnpm 잠금 파일 | pnpm-lock.yaml | 🔴 정확한 악성 버전 일치 |
| yarn 잠금 파일 | yarn.lock | 🔴 정확한 악성 버전 일치 |
| 매니페스트 종속성 | package.json (루트 + 워크스페이스) | 🟡 패키지 존재 경고 |
| 멀웨어 핑거프린트 | @tanstack/setup in optionalDependencies | 🔴 확인된 멀웨어 |
| 의심스러운 git 종속성 | github:tanstack/router#<commit> | 🔴 확인된 멀웨어 |
| 라이프사이클 스크립트 | prepare with bun + router_init | 🔴 확인된 멀웨어 |
| node_modules | node_modules/@tanstack/* (fallback) | 🔴 정확한 버전 일치 |