
Scanner for the Mini Shai-Hulud npm/PyPI supply chain worm (NHS CC-4781 · CVE-2026-45321). Detects gh-token-monitor persistence, payload artefacts, and attacker commits. Python, Bash, PowerShell.
현재 주요 패키지를 감염시키고 있는 npm/PyPI 공급망 웜을 위한 무료 오프라인 스캐너입니다. Intrudify 팀이 제작했습니다. 회원가입 불필요, 원격 측정 없음, 완전히 오프라인으로 실행됩니다.
NHS CC-4781 · CVE-2026-45321 (CVSS 9.6) · GHSA-g7cv-rxg3-hmpx
지난 몇 주 동안 npm install 또는 pip install을 실행했다면, 이 스캐너가 필요합니다.
특히 @tanstack/*, @uipath/*, @mistralai/*, @cap-js/* 또는 PyPI의 litellm, mistralai, guardrails-ai, lightning, telnyx를 사용했다면 더욱 그렇습니다. 이들은 오염이 확인된 네임스페이스입니다. 총 149개 패키지, 현재까지 400개 이상의 악성 버전이 추적되었습니다.
미니 샤이훌루드는 피해를 입히는 웜입니다. npm 및 GitHub 자격 증명을 탈취하고 macOS, Linux, Windows 전반에 지속성을 심으며 (대부분이 놓치는 부분) 부비트랩이 설정된 토큰을 남깁니다. 감염된 머신에서 이를 취소하면 rm -rf ~/가 실행됩니다. 홈 디렉터리가 사라집니다. 정리 순서가 중요합니다.
이 스캐너는 패키지, 잠금 파일, 지속성 메커니즘, 페이로드 해시, C2 트래픽, Git 히스토리, CI 환경 등에서 19가지 알려진 침해 지표를 모두 확인합니다. 읽기만 수행하며, 쓰기, 삭제, 외부 통신은 절대 하지 않습니다.
세 가지 스크립트, 하나의 작업: Python, Bash, PowerShell. 스택에 맞는 것을 선택하세요.
Intrudify는 유럽 최초의 완전 자율 AI 웹 애플리케이션 침투 테스터입니다. 핵심은 간단합니다: 3만 달러 규모의 인간 침투 테스트 팀과 동일한 결과를 몇 주가 아닌 몇 시간 만에 제공하며, NIS2, SOC2, ISO27001에 대한 감사 준비 보고서와 단계별 수정 가이드를 제공합니다. 코드를 출시하지만 보안 팀이 없다면, 이것이 우리가 메우는 격차입니다.
이 스캐너는 그 일부입니다. 공급망 웜이 조달 주기보다 빠르게 움직이기 때문에 무료로 제공됩니다. 밤 11시에 CVE 피드를 보고 있는 개발자에게는 판매 전화가 필요하지 않습니다. 30초 안에 실행되어 자신이 감염되었는지 알려주는 도구가 필요합니다.
활성 침해 사례(CI/CD 파이프라인 하이재킹, GitHub Actions OIDC 토큰 남용, npm/PyPI 공급망 사고 대응)의 경우 직접 연락주세요: [email protected]
지난 몇 주 동안 npm 또는 PyPI 패키지를 설치했고, 특히 @tanstack/*, @uipath/*, @mistralai/*, @cap-js/* 또는 PyPI의 litellm, mistralai, guardrails-ai, lightning, telnyx를 설치했다면, 머신이 손상되었을 수 있습니다.
미니 샤이훌루드 웜은 자격 증명을 탈취하고 macOS, Linux, Windows 전반에 지속성을 심으며, 잘못된 순서로 정리하면 홈 디렉터리를 지울 수 있습니다.
이 스캐너는 19가지 알려진 지표를 모두 확인합니다. 읽기만 수행하며, 머신에서 쓰기, 삭제, 전송을 절대 하지 않습니다.
웜은 부비트랩이 설정된 npm 토큰을 심습니다. 감염된 머신에서 이를 취소하면 rm -rf ~/가 실행됩니다. 순서가 중요합니다.
스캐너가 CRITICAL(심각) 결과를 찾으면 다음 순서대로 진행하세요:
| 사용 중인 OS... | 사용할 스크립트 |
|---|
# macOS / Linux
chmod +x scan_cc4781.sh
./scan_cc4781.sh --deep
# Windows PowerShell
.\scan_cc4781.ps1 -Deep
# Python (any OS)
python3 scan_cc4781.py --deep
--deep / -Deep 플래그는 현재 디렉터리 아래의 모든 node_modules를 재귀적으로 검사합니다. 모노레포 또는 여러 프로젝트가 있는 경우 권장됩니다.
PowerShell이 스크립트를 차단하는 경우:
powershell -ExecutionPolicy Bypass -File .\scan_cc4781.ps1 -Deep
RESULT: 0 CRITICAL / 0 HIGH → you're clean
RESULT: X CRITICAL / Y HIGH → stop and follow the steps above before doing anything else
CRITICAL = 확인된 침해 지표. 즉시 조치하세요.
HIGH = 의심스러움. 조사하세요. 일부 HIGH 결과는 예상되는 오탐(false positive)입니다 (아래 참조).
CC-4781 / Mini Shai-Hulud Supply-Chain Attack Scanner
Host: your-hostname OS: your-os
Checking 149 npm packages (400+ malicious versions), 5 PyPI packages
[OK] gh-token-monitor process not detected
[HIGH] payload-artefact: sysmon.py -> .../coverage/sysmon.py <- false positive: Python coverage package
[HIGH] payload-artefact: execution.js -> .../n8n/.../execution.js <- false positive: n8n
[OK] git-tanstack.com does not resolve
[OK] No malicious optionalDependencies github: references found
[OK] No attacker exfil commits in git log
RESULT: 0 CRITICAL / 4 HIGH
sysmon.py 및 execution.js HIGH 결과는 오탐(false positive) 입니다: 파일 이름은 웜의 페이로드 이름과 일치하지만 SHA-256 해시는 일치하지 않습니다. CRITICAL은 해시가 확인된 악성 페이로드와 일치하는 경우에만 발생합니다.
JSON 출력 형식: { "host": "...", "findings": [{ "severity": "CRITICAL|HIGH", "category": "...", "detail": "...", "path": "..." }] }
중요: npm audit signatures 통과가 안전하다는 의미는 아닙니다. Mini Shai-Hulud는 GitHub Actions OIDC 파이프라인 하이재킹을 통해 유효한 SLSA Build Level 3 출처를 생성한 최초의 문서화된 공격입니다. 서명은 빌드 출처를 검증할 뿐, 빌드 파이프라인 자체가 깨끗하다는 것을 검증하지 않습니다.
웜은 3계층 난독화를 사용합니다: obfuscator.io, 그 다음 Fisher-Yates 치환 암호(PBKDF2-SHA256, 200,000 반복), 그 다음 AES-256-GCM. Session Protocol CDN, GitHub GraphQL 데드 드롭, ICP 블록체인 캐니스터, WAV 스테가노그래피를 통해 자격 증명을 유출합니다.
지속성은 macOS LaunchAgent, Linux systemd 유닛, Windows Scheduled Task 또는 HKCU Run 키, Claude Code SessionStart 훅, VS Code folderOpen 태스크, Python .pth 시작 파일로 심어집니다. 손상된 CI 러너에는 Kubernetes DaemonSet을 심습니다.
RANSOM TOKEN (IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner)은 gh-token-monitor 데몬과 쌍을 이루며 60초마다 api.github.com/user를 폴링합니다. 40x 응답이 오면 Linux/macOS에서 rm -rf ~/ 또는 Windows에서 이에 상응하는 동작이 실행됩니다.
GHSA-g7cv-rxg3-hmpx, JFrog Security Research, StepSecurity, Socket.dev, Wiz Threat Research, Snyk, Aikido Security, Orca Security, Mend.io에서 집계 (2026-05-13 기준).
탐지 규칙: Sigma 5299fadf-f228-4526-8274-251db1960be9 (Shai-Hulud 악성 Bun 실행), Palo Alto ATP 시그니처 87120.
Intrudify는 npm/PyPI 공급망 사고 대응, CI/CD 파이프라인 하이재킹, GitHub Actions OIDC 토큰 남용을 전문으로 합니다.
연락처: [email protected] · intrudify.com
| macOS 또는 Linux | scan_cc4781.sh (또는 Python 선호 시 scan_cc4781.py) |
| Windows | scan_cc4781.ps1 (또는 네이티브 Python으로 scan_cc4781.py) |
| CI / Docker | scan_cc4781.py 또는 scan_cc4781.sh |
| 플래그 | Bash / Python | PowerShell | 기능 |
|---|
| 심층 스캔 | --deep | -Deep | 현재 작업 디렉터리 아래의 모든 node_modules 재귀 검사 |
| 대상 디렉터리 | --npm-dir /path | -NpmDir C:\path | 특정 node_modules 폴더 검사 |
| JSON 출력 | --json | -Json | SIEM / SOAR용 기계 판독 가능 출력 |
| # | 카테고리 | 확인 내용 |
|---|
| 1 | npm 버전 | 149개 패키지, 400개 이상 확인된 악성 정확 버전 |
| 2 | 잠금 파일 | package-lock.json, pnpm-lock.yaml, yarn.lock |
| 3 | PyPI | litellm, telnyx, lightning, mistralai, guardrails-ai |
| 4 | 지속성 | macOS LaunchAgent, Linux systemd, Windows Scheduled Task + HKCU Run 키 |
| 5 | 지속성 | Claude Code SessionStart 훅, VS Code folderOpen 태스크 |
| 6 | 페이로드 파일 | 13개 파일 이름 + 11개 알려진 악성 해시에 대한 SHA-256 |
| 7 | C2 호스트 | /etc/hosts 내 11개 도메인, 프록시 환경 변수, WinHTTP |
| 8 | C2 DNS | 11개 C2 도메인 모두 확인 |
| 9 | C2 연결 | 5개 추적 C2 IP에 대한 활성 TCP |
| 10 | package.json | optionalDependencies github:tanstack/router 주입 |
| 11 | package.json | prepare: bun run tanstack_runner.js 주입 |
| 12 | 워크플로 | .github/workflows/codeql_analysis.yml, format-check.yml |
| 13 | Git 로그 | 공격자 유출 커밋 ([email protected]) |
| 14 | Git 브랜치 | Dune 테마 웜 브랜치, dependabout/ 오타스쿼팅 |
| 15 | npm 토큰 | RANSOM TOKEN 탐지 |
| 16 | 셸 히스토리 | C2 도메인, IP, 페이로드 파일 이름 |
| 17 | CI 환경 | GitHub Actions 자격 증명 유출 |
| 18 | Git 리모트 | 공격자 계정 및 C2 도메인 |
| 19 | 고급 지속성 | sysmon/pgmon 서비스 위장, litellm_init.pth, Kubernetes DaemonSet, WAV 스테가노그래피 |
| 웨이브 | 날짜 | 패키지 | 게시자 |
|---|
| TanStack | 2026년 5월 | 43개 @tanstack/* 패키지 | voicproducoes |
| UiPath / JFrog | 2026년 5월 | 66개 @uipath/* 패키지 | voicproducoes / zblgg |
| SAP @cap-js | 2026년 4월 | @cap-js/db-service, @cap-js/sqlite, @cap-js/postgres, mbt | cloudmtabot |
| PyPI | 2026년 2월~4월 | litellm, telnyx, lightning, mistralai, guardrails-ai | 여러 게시자 |