
CVE-2026-45321 Mini Shai-Hulud 공급망 침해 감지 — TanStack, Mistral AI, UiPath, OpenSearch, Guardrails AI를 대상으로 170개의 npm + 2개의 PyPI 오염된 패키지를 스캔합니다.
빠르고 제로 의존성의 Bash 스캐너로, 기기가 CVE-2026-45321 "Mini Shai-Hulud" 공급망 공격에 영향을 받았는지 탐지합니다.
2026년 5월 11일, TanStack, Mistral AI, UiPath, OpenSearch 및 Guardrails AI를 포함한 170개 이상의 npm 패키지와 2개의 PyPI 패키지가 동시에 감염되었습니다. 악성 페이로드는 AWS 자격 증명, GitHub 토큰, npm 토큰, Vault 비밀, SSH 키를 탈취하며, CI/CD 파이프라인을 통해 확산되는 자가 전파 웜을 포함합니다.
curl -fsSL https://raw.githubusercontent.com/qi-scape/scan-shai-hulud/main/scan-shai-hulud.sh | bash
또는 클론하여 실행:
git clone https://github.com/qi-scape/scan-shai-hulud.git
cd scan-shai-hulud
chmod +x scan-shai-hulud.sh
./scan-shai-hulud.sh
# Scan current directory + system-wide persistence checks
./scan-shai-hulud.sh
# Scan a specific project
./scan-shai-hulud.sh ~/my-project
# Deep scan across entire home directory
./scan-shai-hulud.sh --full
스캐너는 8단계를 실행합니다:
170개의 npm 패키지 (15개 스코프):
react-router, vue-router, solid-router, router-core 등)mistralai, mistralai-azure, mistralai-gcpopensearchagentwork-cli, cmux-agent-mcp, cross-stitch, , , , , , , 2개의 PyPI 패키지:
mistralai==2.4.6guardrails-ai==0.10.1스캐너가 CRITICAL 결과를 보고하면:
ghp_*, gho_*, ghs_*), npm 토큰, Vault 토큰, SSH 키, Kubernetes 서비스 계정 토큰npm cache clean --force && rm -rf node_modules && npm installlaunchctl unload ~/Library/LaunchAgents/com.user.gh-token-monitor.plist2026-05-11T19:20Z 이후npm access ls-packagesfind, grep, shasum)mdfind (macOS Spotlight, 더 빠른 파일 검색에 사용)npm, pip (패키지/토큰 확인용)git (리포지토리 확인용)lsof (네트워크 연결 확인용)MIT
| 단계 | 설명 |
|---|
| 지속성 | macOS LaunchAgent (파일 및 launchctl 로드 상태), Linux systemd 서비스, dead-man's switch 스크립트, .claude/ 및 .vscode/ 페이로드 드롭, 주입된 GitHub Actions 워크플로우, /tmp 드로퍼 |
| 악성 파일 | router_init.js, tanstack_runner.js, router_runtime.js, gh-token-monitor.sh, transformers.pyz — 3개의 알려진 SHA-256 해시로 검증 |
| C2 지표 | 설정 파일 (.npmrc, .bashrc, .zshrc, .env) 및 프로젝트 소스에서 6개의 C2 도메인 및 캠페인 마커 스캔 |
| npm 패키지 | 모든 node_modules 트리, npm 글로벌 루트, 잠금 파일 (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lock), npm 캐시 — 정밀한 패키지별 매칭 포함 (42개의 특정 @tanstack 라우터 패키지, 전체 범위 아님) |
| PyPI 패키지 | 모든 Python/conda 환경 + requirements.txt, pyproject.toml, Pipfile, poetry.lock에서 pip show |
| Git 리포지토리 | 히스토리의 악성 커밋 해시, dependabout/*/setup-formatter dead-drop 브랜치, dead-drop 커밋 작성자, 주입된 codeql_analysis.yml |
| 셸 히스토리 및 환경 | 페이로드 실행 추적을 위한 Bash/Zsh/Fish 히스토리, 주입 확인을 위한 셸 RC 파일, C2 도메인을 위한 환경 변수 |
| 네트워크 및 토큰 | lsof를 통한 C2로의 활성 연결, /etc/hosts, ~/.ssh/known_hosts, npm 토큰 목록 |
git-branch-selectorgit-git-gitml-toolkit-tsnextmove-mcpsafe-actionts-dnawot-api| 지표 | 값 |
|---|
| 주요 탈취 | filev2.getsession.org |
| 세션 시드 | seed{1,2,3}.getsession.org |
| 보조 C2 | api.masscan.cloud, git-tanstack.com |
| 페이로드 스테이징 | litter.catbox.moe/h8nc9u.js, litter.catbox.moe/7rrc6l.mjs |
| 악성 커밋 | 79ac49eedf774dd4b0cfa308722bc463cfe5885c |