Cobenian/shai-hulud-detect
GitHub: Cobenian/shai-hulud-detect
一款轻量级 Bash 工具,专门用于检测 Shai-Hulud 系列 npm 供应链攻击在项目中留下的入侵指标。
Stars: 314 | Forks: 66
# Shai-Hulud NPM 供应链攻击检测器
[](LICENSE)
[](#requirements)
[](../../)
[](CONTRIBUTING.md)
[](https://github.com/Cobenian/shai-hulud-detect/commits/main)
[](#overview)
一个 Bash 工具,帮助您发现 2025 年 9 月至 2026 年 2 月期间已知的 npm 供应链攻击痕迹——包括 Shai-Hulud 自我复制蠕虫、chalk/debug 加密货币盗窃事件、“Shai-Hulud: The Second Coming”虚假 Bun 运行时攻击,以及 2026 年 2 月的 SANDWORM_MODE 活动。它交叉检查多个活动中的 1,700 多个已确认的恶意软件包版本,并检查您项目中最相关的危险信号。
## 概述
涵盖 2025 年 9 月至 2026 年 2 月期间发生的多次 npm 供应链攻击:
### **Chalk/Debug 加密货币盗窃攻击** (2025 年 9 月 8 日)
- **范围**:18+ 个软件包,每周下载量超过 20 亿次
- **攻击**:浏览器中的加密货币钱包地址替换
- **持续时间**:检测前持续约 2 小时
- **软件包**:chalk, debug, ansi-styles, color-*, supports-* 等
- **方法**:劫持 XMLHttpRequest 以窃取加密货币交易
### **Shai-Hulud 自我复制蠕虫** (2025 年 9 月 14-16 日)
- **范围**:跨多个命名空间的 517+ 个软件包
- **攻击**:凭证窃取和自我传播
- **方法**:使用 Trufflehog 扫描机密,将窃取的数据发布到 GitHub
- **传播**:使用窃取的 npm token 进行自我复制
- **软件包**:@ctrl/*, @crowdstrike/*, @operato/* 等
### **Shai-Hulud: The Second Coming** (2025 年 11 月 24 日)
- **范围**:300+ 个软件包,每周数百万次下载
- **攻击**:虚假 Bun 运行时安装与凭证窃取
- **方法**:使用虚假的 `setup_bun.js` preinstall 钩子下载并执行 TruffleHog
- **渗出**:创建名为 "SHA1HULUD" 的 GitHub Actions runner 和描述为 "Sha1-Hulud: The Second Coming" 的仓库
- **软件包**:@zapier/*, @posthog/*, @asyncapi/*, @postman/*, @ensdomains/* 等
- **文件**:`setup_bun.js`, `bun_environment.js` (10MB+ 混淆载荷), `actionsSecrets.json` (双重 Base64 编码)
- **工作流**:使用 SHA1HULUD runner 的 `.github/workflows/formatter_*.yml` 文件
### **Shai-Hulud: Golden Path 变体** (2025 年 12 月 28 日)
- **范围**:Second Coming 攻击的延续,文件已重命名
- **攻击**:相同的虚假 Bun 运行时技术,使用混淆的文件名
- **方法**:使用 `bun_installer.js` 和 `environment_source.js` (从 `setup_bun.js` 和 `bun_environment.js` 重命名)
- **渗出**:用于暂存窃取凭证的混淆 JSON 文件:`3nvir0nm3nt.json`, `cl0vd.json`, `c9nt3nts.json`, `pigS3cr3ts.json`
- **软件包**:@vietmoney/react-big-calendar (版本 0.26.0-0.26.2)
- **仓库描述**:"Goldox-T3chs: Only Happy Girl"
### **SANDWORM_MODE AI 工具链投毒** (2026 年 2 月 17 日)
- **范围**:19 个已确认的恶意 npm 软件包 + 工作流传播 IoC
- **攻击**:Typosquat(拼写仿冒)AI 工具链软件包和受污染的 CI 工作流分发
- **方法**:恶意 GitHub Action `ci-quality/code-quality-check@v1` 注入 `.github/workflows/quality.yml`
- **威胁行为者别名**:`official334`, `javaorg`
- **软件包**:`claud-code`, `cloude-code`, `cloude`, `opencraw`, `veim`, `yarsg` 等
- **来源**:[Socket.dev 分析](https://socket.dev/blog/sandworm-mode-npm-worm-ai-toolchain-poisoning)
## 快速开始
```
# 克隆 repository
git clone https://github.com/Cobenian/shai-hulud-detect
cd shai-hulud-detect
# 使 script 可执行
chmod +x shai-hulud-detector.sh
# 扫描你的项目以查找 Shai-Hulud 指标
./shai-hulud-detector.sh /path/to/your/project
# 用于全面的安全扫描
./shai-hulud-detector.sh --paranoid /path/to/your/project
# 将发现结果保存到 log 文件以供审查或作为 CI/CD artifacts
./shai-hulud-detector.sh --save-log report.log /path/to/your/project
# 检查 exit code 以进行 CI/CD 集成
./shai-hulud-detector.sh /path/to/your/project
echo "Exit code: $?" # 0=clean, 1=high-risk, 2=medium-risk
```
**CI/CD 集成**:脚本返回适当的退出代码(0=干净,1=高风险,2=中风险),可无缝集成到自动化安全流水线中。
## 检测内容
### 高风险指标
- **恶意工作流文件**:`.github/workflows/` 中的 `shai-hulud-workflow.yml` 文件(2025 年 9 月),使用 SHA1HULUD runner 的 `formatter_*.yml` 文件(2025 年 11 月),以及 SANDWORM_MODE 工作流 IoC,包括 `ci-quality/code-quality-check@v1` 和受污染的 `quality.yml` 工作流引用(2026 年 2 月)
- **已知的恶意文件哈希**:匹配来自不同 Shai-Hulud 蠕虫变体 (V1-V7) 的 7 个 SHA-256 哈希之一的文件,源自 [Socket.dev 的全面攻击分析](https://socket.dev/blog/ongoing-supply-chain-attack-targets-crowdstrike-npm-packages)
- **2025 年 11 月 Bun 攻击文件**:`setup_bun.js`/`bun_installer.js`(虚假 Bun 运行时安装程序)和 `bun_environment.js`/`environment_source.js`(10MB+ 混淆凭证窃取载荷)
- **混淆的渗出文件**:`3nvir0nm3nt.json`, `cl0vd.json`, `c9nt3nts.json`, `pigS3cr3ts.json`(Golden Path 变体 - 暂存窃取的凭证以备渗出)
- **受损的软件包版本**:来自多次攻击(2025 年 9 月至 2026 年 2 月)的 1,700 多个软件包的特定版本
- **可疑的 postinstall 钩子**:package.json 文件中的 postinstall 脚本包含 curl、wget、eval 命令或虚假 Bun 安装(`"preinstall": "node setup_bun.js"`)
- **Trufflehog 活动**:包含 trufflehog 引用、凭证扫描模式或 2025 年 11 月增强模式(自动化 TruffleHog 下载和执行)的文件
- **Shai-Hulud 仓库**:名为 "Shai-Hulud"(用于数据渗出)或描述为 "Sha1-Hulud: The Second Coming" 或 "Goldox-T3chs: Only Happy Girl" 的 Git 仓库
- **机密渗出文件**:带有双重 Base64 编码凭证的 `actionsSecrets.json` 文件(2025 年 11 月)
- **SHA1HULUD GitHub Actions Runner**:使用恶意 runner 窃取凭证的 GitHub Actions 工作流
- **SANDWORM_MODE 工作流 IoC**:包含 `ci-quality/code-quality-check@v1`、行为者别名(`official334`, `javaorg`)或相关传播模块引用的工作流文件
### 中风险指标
- **可疑内容模式**:引用 `webhook.site` 和恶意端点 `bb8ca5f6-4175-45d2-b042-fc9ebb8170b7`
- **可疑 git 分支**:名为 "shai-hulud" 的分支
- **Semver 模式匹配**:由于插入符 (^) 或波浪号 (~) 版本模式,可能在 `npm update` 期间受到破坏的软件包
### 低风险指标
- **命名空间警告**:来自已知受影响命名空间(@ctrl, @crowdstrike, @art-ws, @ngx, @nativescript-community)但版本安全的软件包
### 软件包检测方法
脚本从外部文件 (`compromised-packages.txt`) 加载受损软件包列表,该文件包含:
- **1,700+ 个已确认的受损软件包版本** 及确切版本号(2025 年 9 月至 2026 年 2 月的活动)
- **18+ 个受影响的命名空间**,用于更广泛地检测来自受损维护者账户的软件包
### 维护和更新软件包列表
**重要**:Shai-Hulud 攻击具有自我复制能力,意味着可能仍会发现新的受损软件包。受损软件包列表存储在 `compromised-packages.txt` 中,以便于维护:
- **格式**:`package_name:version`(每行一个)
- **注释**:以 `#` 开头的行将被忽略
- **更新**:随着发现新的受损软件包,可以更新该文件
- **回退**:如果文件丢失,脚本将使用核心嵌入式列表
### 及时了解新发现的受损软件包
定期查看这些安全公告,了解新发现的受损软件包:
- **[StepSecurity Blog](https://www.stepsecurity.io/blog/ctrl-tinycolor-and-40-npm-packages-compromised)** - 原始综合分析
- **[Semgrep Security Advisory](https://semgrep.dev/blog/2025/security-advisory-npm-packages-using-secret-scanning-tools-to-steal-credentials/)** - 详细技术分析
- **[JFrog Security Research](https://jfrog.com/blog/shai-hulud-npm-supply-chain-attack-new-compromised-packages-detected/)** - 持续检测新软件包
- **[Wiz Security Blog](https://www.wiz.io/blog/shai-hulud-npm-supply-chain-attack)** - 带有软件包附录的攻击分析
- **[Socket.dev Blog](https://socket.dev/blog/ongoing-supply-chain-attack-targets-crowdstrike-npm-packages)** - CrowdStrike 软件包分析
- **[Socket.dev Blog](https://socket.dev/blog/sandworm-mode-npm-worm-ai-toolchain-poisoning)** - SANDWORM_MODE AI 工具链投毒活动
- **[HelixGuard](https://helixguard.ai/blog/malicious-sha1hulud-2025-11-24)** - Second Coming 分析
### 如何添加新发现的软件包
1. 查看上面的安全公告以获取新的受损软件包
2. 以 `package_name:version` 的格式将它们添加到 `compromised-packages.txt` 中
3. 测试脚本以确保检测有效
4. 考虑将更新贡献回本仓库
**覆盖范围说明**:2025 年 9 月至 2026 年 2 月的多次活动总共影响了 1,700 多个软件包。我们的检测旨在提供跨 Shai-Hulud 蠕虫(517+ 个软件包)、Chalk/Debug 加密货币盗窃(26+ 个软件包)、“Shai-Hulud: The Second Coming”虚假 Bun 运行时攻击(1,100+ 个软件包)、Golden Path 变体以及 2026 年 2 月 SANDWORM_MODE 活动的**全面覆盖**。
### 核心模式 vs 偏执模式
**核心模式(默认)**
- 专门针对 Shai-Hulud 攻击指标
- 推荐给大多数检查此特定威胁的用户
- 输出清晰、专注,误报最少
**偏执模式 (`--paranoid`)**
- 包含所有核心 Shai-Hulud 检测 **外加** 额外的安全检查
- 增加 typosquatting(拼写仿冒)检测和网络渗出模式分析
- **重要**:偏执功能是通用安全工具,并非 Shai-Hulud 特有
- 可能会从合法代码中产生更多误报
- 适用于全面的安全审计
**Semver 范围检查 (`--check-semver-ranges`)**
- 检查 package.json 中的 semver 范围(^, ~)是否可能解析为受损版本
- 在两种情况下都报告低风险(关于潜在风险的信息性警告)
- 用于识别可能仍包含恶意版本的私有 npm 缓存中的潜在风险
## 环境要求
- macOS 或类 Unix 系统
- **Bash 5.0 或更高版本**(关联数组和性能功能所需)
- macOS:`brew install bash` 然后使用 `/opt/homebrew/bin/bash ./shai-hulud-detector.sh` 运行
- Linux:大多数现代发行版默认包含 Bash 5.x
- 检查您的版本:`bash --version`
- 标准 Unix 工具:`find`, `grep`, `shasum`
### Grep 工具选择
脚本按以下优先顺序自动选择最快的可用 grep 工具:
1. **git grep**(默认) - 使用基于 DFA 的正则引擎,无回溯,对于我们的模式最快(比 ripgrep 快约 40%)
2. **ripgrep**(回退) - 同样基于 DFA,性能卓越
3. **grep**(最后手段) - 可能在复杂模式上经历灾难性回溯
您可以使用标志覆盖自动选择:
- `--use-git-grep` - 强制使用 git grep
- `--use-ripgrep - 强制使用 ripgrep
- `--use-grep` - 强制使用标准 grep
**为什么 git grep 是默认**:我们的测试表明,在大型代码库上 git grep 比 ripgrep 快约 40%。两者都使用基于 DFA 的正则引擎,避免了标准 grep 在复杂模式上挂起时的灾难性回溯。
## 输出解读
### 干净的系统
```
✅ No indicators of Shai-Hulud compromise detected.
Your system appears clean from this specific attack.
```
### 受损的系统
脚本将显示:
- **🚨 高风险**:确定的入侵指标
- **⚠️ 中风险**:需要人工审查的可疑模式
- **摘要**:发现的问题计数
### 如果发现问题该怎么办
#### 高风险问题
- **需要立即采取行动**
- 更新或移除受损软件包
- 审查并移除恶意工作流文件
- 扫描凭证盗窃
- 考虑进行全面的系统审计
#### 中风险问题
- **需要人工调查**
- 审查标记文件的合法性
- 检查 webhook.site 的使用是否有意为之
- 验证 git 分支用途
## 用于 CI/CD 集成的退出代码
脚本返回特定的退出代码以实现适当的 CI/CD 流水线集成:
- **退出代码 0**:干净系统 - 无重大安全发现
- **退出代码 1**:检测到高风险发现 - 需要立即采取行动
- **退出代码 2**:检测到中风险发现 - 需要人工调查
### CI/CD 流水线示例
#### GitHub Actions
```
- name: Security Scan with Shai-Hulud Detector
run: |
chmod +x ./shai-hulud-detector.sh
./shai-hulud-detector.sh .
# Pipeline will automatically fail on exit codes 1 or 2
```
#### GitLab CI
```
security_scan:
script:
- chmod +x ./shai-hulud-detector.sh
- ./shai-hulud-detector.sh .
# Job fails automatically on non-zero exit codes
```
#### Jenkins
```
stage('Security Scan') {
steps {
sh '''
chmod +x ./shai-hulud-detector.sh
./shai-hulud-detector.sh .
'''
}
// Build fails automatically on non-zero exit codes
}
```
#### 按退出代码自定义处理
```
#!/bin/bash
./shai-hulud-detector.sh .
exit_code=$?
case $exit_code in
0) echo "✅ Security scan passed - no issues found" ;;
1) echo "🚨 CRITICAL: High-risk security issues found - blocking deployment"
exit 1 ;;
2) echo "⚠️ WARNING: Medium-risk issues found - review required"
# Could choose to continue with warnings
;;
esac
```
### 将发现保存到日志文件
使用 `--save-log FILE` 将所有检测到的文件路径保存到结构化日志文件中:
```
./shai-hulud-detector.sh --save-log findings.log /path/to/project
```
日志文件包含按严重程度分组的文件路径:
```
# HIGH
/path/to/malicious-workflow.yml
/path/to/compromised-package.json
# MEDIUM
/path/to/suspicious-content.js
# LOW
/path/to/namespace-warning.json
```
此格式专为以下用途设计:
- **CI/CD 制品**:将扫描结果存储为构建制品以供审查
- **编程解析**:易于使用简单脚本解析
- **全面覆盖**:包含所有发现,无显示截断
## 测试
仓库包含一个包含 32 个测试用例的综合测试套件。使用自动化测试运行器验证所有用例:
```
# 运行完整 test suite (推荐)
./run-tests.sh
# Test suite 验证所有 test cases 的预期 exit codes 和 risk levels
# Exit codes: 0=clean, 1=high-risk, 2=medium-risk
```
您也可以手动运行单个测试用例:
```
# 测试 clean project (应显示无问题)
./shai-hulud-detector.sh test-cases/clean-project
# 测试受感染 project (应显示多个问题)
./shai-hulud-detector.sh test-cases/infected-project
# 测试 November 2025 "Shai-Hulud: The Second Coming" 攻击 (应对所有新模式显示 HIGH risk)
./shai-hulud-detector.sh test-cases/november-2025-attack
# 测试混合 project (应显示 medium risk 问题)
./shai-hulud-detector.sh test-cases/mixed-project
# 测试 namespace warnings (应仅显示 LOW risk namespace warnings)
./shai-hulud-detector.sh test-cases/namespace-warning
# 测试 semver 匹配 (应对可能匹配受损版本的 packages 显示 MEDIUM risk)
./shai-hulud-detector.sh test-cases/semver-matching
# 测试合法 crypto libraries (应仅显示 MEDIUM risk)
./shai-hulud-detector.sh test-cases/legitimate-crypto
# 测试 chalk/debug 攻击模式 (应显示 HIGH risk 受损 packages + MEDIUM risk crypto 模式)
./shai-hulud-detector.sh test-cases/chalk-debug-attack
# 测试常见 crypto libraries (不应触发 HIGH risk 误报)
./shai-hulud-detector.sh test-cases/common-crypto-libs
# 测试合法 XMLHttpRequest 修改 (应仅显示 LOW risk)
./shai-hulud-detector.sh test-cases/xmlhttp-legitimate
# 测试带有 crypto 模式的恶意 XMLHttpRequest (应显示 HIGH risk crypto 窃取 + MEDIUM risk XMLHttpRequest 模式)
./shai-hulud-detector.sh test-cases/xmlhttp-malicious
# 测试 lockfile 误报 (尽管其他 package 拥有受损版本,应显示无问题)
./shai-hulud-detector.sh test-cases/lockfile-false-positive
# 测试 lockfile 中的实际受损 package (应显示 HIGH risk)
./shai-hulud-detector.sh test-cases/lockfile-compromised
# 测试具有安全 lockfile 版本的 packages (应显示 LOW risk 及 lockfile 保护消息)
./shai-hulud-detector.sh test-cases/lockfile-safe-versions
# 测试混合 lockfile 场景 (应对受损项显示 HIGH risk + 对安全项显示 LOW risk)
./shai-hulud-detector.sh test-cases/lockfile-comprehensive-test
# 测试无 lockfile 的 packages (应对潜在更新风险显示 MEDIUM risk)
./shai-hulud-detector.sh test-cases/no-lockfile-test
# 测试 paranoid 模式下的 typosquatting 检测 (应显示 MEDIUM risk typosquatting warnings)
./shai-hulud-detector.sh --paranoid test-cases/typosquatting-project
# 测试 paranoid 模式下的网络渗出检测 (应显示 HIGH risk 凭证收集 + MEDIUM risk 网络模式)
./shai-hulud-detector.sh --paranoid test-cases/network-exfiltration-project
# 测试 paranoid 模式下的 clean project (应显示无问题 - 验证无误报)
./shai-hulud-detector.sh --paranoid test-cases/clean-project
# 测试 semver 通配符解析 (应正确处理 4.x, 1.2.x 模式且无错误)
./shai-hulud-detector.sh test-cases/semver-wildcards
# 测试 discussion workflow 检测 (应对恶意 discussion-triggered workflows 显示 CRITICAL risk)
./shai-hulud-detector.sh test-cases/discussion-workflows
# 测试 SANDWORM_MODE workflow IOC 检测 (应对中毒的 ci-quality action 使用显示 HIGH risk)
./shai-hulud-detector.sh test-cases/sandworm-mode-workflow
# 测试 GitHub Actions runner 检测 (应对 SHA1HULUD self-hosted runners 显示 CRITICAL risk)
./shai-hulud-detector.sh test-cases/github-actions-runners
# 测试 file hash 验证 (应根据恶意 hashes 验证良性文件)
./shai-hulud-detector.sh test-cases/hash-verification
# 测试破坏性模式检测 (应对数据破坏命令显示 CRITICAL risk)
./shai-hulud-detector.sh test-cases/destructive-patterns
```
### 偏执模式测试
`--paranoid` 标志启用了 Shai-Hulud 特定检测之外的额外安全检查:
- **Typosquatting 检测**:识别名称与流行软件包相似的软件包(例如 "raect" 而不是 "react","lodsh" 而不是 "lodash")
- **网络渗出模式**:检测可疑域名(webhook.site, pastebin.com)、硬编码 IP 地址、到外部端点的 WebSocket 连接
- **增强安全审计**:适用于全面的项目安全审查
**注意**:偏执模式可能会从合法代码模式中产生更多误报,因此请仔细审查发现。
## 工作原理
脚本执行以下检查:
1. **软件包数据库加载**:从 `compromised-packages.txt` 加载 1,700 多个受损软件包到 O(1) 查找映射中
2. **工作流检测**:搜索 `shai-hulud-workflow.yml` 文件(2025 年 9 月)、带有 SHA1HULUD runner 的 `formatter_*.yml` 文件(2025 年 11 月)以及 SANDWORM_MODE 工作流 IoC(2026 年 2 月)
3. **哈希验证**:针对 7 个已知的恶意 bundle.js 变体 (V1-V7) 计算 SHA-256 哈希
4. **软件包分析**:解析 `package.json` 文件以查找受损版本和受影响的命名空间
5. **Semver 范围检查**(使用 `--check-semver-ranges` 选择加入):检查版本范围是否可能解析为受损版本
6. **Postinstall 钩子检测**:识别包含 curl、wget、eval 或虚假 Bun 模式的可疑 postinstall/preinstall 脚本
7. **内容扫描**:搜索可疑 URL、webhook 端点和恶意模式
8. **加密货币盗窃检测**:识别钱包替换模式、XMLHttpRequest 劫持和加密货币盗窃函数
9. **Trufflehog 活动检测**:查找凭证扫描工具和机密窃取模式
10. **Git 分析**:检查可疑的分支名称(“shai-hulud”)
11. **仓库检测**:识别 “Shai-Hulud”、“Second Coming” 和 “Goldox-T3chs” 仓库模式
12. **2025 年 11 月 Bun 攻击检测**:识别 `setup_bun.js`/`bun_installer.js` 和 `bun_environment.js`/`environment_source.js` 攻击文件
13. **GitHub Actions Runner 检测**:识别恶意的 SHA1HULUD runner
14. **Discussion 工作流检测**:识别在 discussion 事件上触发的工作流(隐蔽持久性)
15. **破坏性载荷检测**:识别破坏性回退模式(`rm -rf`, `fs.rmSync` 等)
16. **Lockfile 完整性检查**:分析 package-lock.json、yarn.lock 和 pnpm-lock.yaml 以查找受损软件包
17. **Typosquatting 检测**(偏执模式):识别名称与流行软件包相似的软件包
18. **网络渗出检测**(偏执模式):检测可疑域名和硬编码 IP
19. **混淆渗出检测**:识别 Golden Path 变体暂存文件(`3nvir0nm3nt.json`, `cl0vd.json` 等)
## 局限性
- **哈希检测**:仅检测与 7 个已知恶意哈希完全匹配的文件
- **软件包版本**:检测特定的受损版本;在软件包列表更新之前,可能无法检测到新变体
- **误报**:合法使用 webhook.site、Trufflehog 或 postinstall 钩子可能会触发警报
- **蠕虫演变**:可能会出现具有不同签名的新变体
- **Semver 范围**:`--check-semver-ranges` 标志仅供参考;受损版本大多已从 npm 下架
## 安全说明
此脚本仅用于**检测**。它不会:
- 自动移除恶意代码
- 修复受损软件包
- 防止未来的攻击
请务必手动验证发现并采取适当的补救措施。
## 参考资料
### 主要来源
- [StepSecurity Blog: CTRL, tinycolor and 40 NPM packages compromised](https://www.stepsecurity.io/blog/ctrl-tinycolor-and-40-npm-packages-compromised)
- [JFrog: New compromised packages in largest npm attack in history](https://jfrog.com/blog/new-compromised-packages-in-largest-npm-attack-in-history/)
- [Aikido: NPM debug and chalk packages compromised](https://www.aikido.dev/blog/npm-debug-and-chalk-packages-compromised)
- [Semgrep Security Advisory: NPM packages using secret scanning tools to steal credentials](https://semgrep.dev/blog/2025/security-advisory-npm-packages-using-secret-scanning-tools-to-steal-credentials/)
- [Aikido: S1ngularity-nx attackers strike again](https://www.aikido.dev/blog/s1ngularity-nx-attackers-strike-again)
- [Aikido: Shai-Hulud strikes again - The Golden Path](https://www.aikido.dev/blog/shai-hulud-strikes-again---the-golden-path)
### 其他资源
- [Socket: Ongoing supply chain attack targets CrowdStrike npm packages](https://socket.dev/blog/ongoing-supply-chain-attack-targets-crowdstrike-npm-packages)
- [Ox Security: NPM 2.0 hack: 40+ npm packages hit in major supply chain attack](https://www.ox.security/blog/npm-2-0-hack-40-npm-packages-hit-in-major-supply-chain-attack/)
- [Phoenix Security: NPM tinycolor compromise](https://phoenix.security/npm-tinycolor-compromise/)
## 贡献
我们欢迎对代码、文档、测试和覆盖的软件包进行改进。
### 如何贡献
#### 添加新受损软件包
1. **Fork 仓库** 在 GitHub 上,然后克隆您的 fork:
git clone https://github.com/YOUR_USERNAME/shai-hulud-detect.git
cd shai-hulud-detect
2. **更新软件包列表**
- 以 `package_name:version` 的格式将新软件包添加到 `compromised-packages.txt`
- 包含您发现受损软件包的来源/参考
3. **测试您的更改**
./run-tests.sh
# 所有 37 个测试都应通过
4. **提交 Pull Request**
- 推送到您的 fork 并向上游仓库提交 PR
- 包含信息来源(安全公告、博客文章等)
#### 其他贡献
- **错误修复**:报告并修复检测准确性问题
- **新 IoC**:添加对其他入侵指标检测
- **文档**:提高清晰度并添加示例
- **测试用例**:为边缘情况添加新的测试场景
### 贡献指南
- **验证来源**:仅添加由信誉良好的安全公司确认的软件包
- **充分测试**:确保更改不会破坏现有功能
- **文档更改**:更新相关文档和变更日志
- **遵循模式**:匹配现有的代码风格和组织结构
- **安全第一**:切勿在测试用例中包含实际的恶意代码
### 报告新受损软件包
如果您无法提交 PR,您仍然可以通过报告新的受损软件包来提供帮助:
1. 打开一个标题为 “New compromised package: [package-name]” 的 issue
2. 包含软件包名称、版本和信息来源
3. 提供安全公告或报告的链接
4. 我们将审查并将验证过的软件包添加到检测列表中
## 发布说明
有关更改和版本历史的完整列表,请参阅 [CHANGELOG.md](CHANGELOG.md)。
## 许可证
本项目根据 MIT 许可证授权 - 详情请参见 [LICENSE](LICENSE) 文件。
一个 Bash 工具,帮助您发现 2025 年 9 月至 2026 年 2 月期间已知的 npm 供应链攻击痕迹——包括 Shai-Hulud 自我复制蠕虫、chalk/debug 加密货币盗窃事件、“Shai-Hulud: The Second Coming”虚假 Bun 运行时攻击,以及 2026 年 2 月的 SANDWORM_MODE 活动。它交叉检查多个活动中的 1,700 多个已确认的恶意软件包版本,并检查您项目中最相关的危险信号。
## 概述
涵盖 2025 年 9 月至 2026 年 2 月期间发生的多次 npm 供应链攻击:
### **Chalk/Debug 加密货币盗窃攻击** (2025 年 9 月 8 日)
- **范围**:18+ 个软件包,每周下载量超过 20 亿次
- **攻击**:浏览器中的加密货币钱包地址替换
- **持续时间**:检测前持续约 2 小时
- **软件包**:chalk, debug, ansi-styles, color-*, supports-* 等
- **方法**:劫持 XMLHttpRequest 以窃取加密货币交易
### **Shai-Hulud 自我复制蠕虫** (2025 年 9 月 14-16 日)
- **范围**:跨多个命名空间的 517+ 个软件包
- **攻击**:凭证窃取和自我传播
- **方法**:使用 Trufflehog 扫描机密,将窃取的数据发布到 GitHub
- **传播**:使用窃取的 npm token 进行自我复制
- **软件包**:@ctrl/*, @crowdstrike/*, @operato/* 等
### **Shai-Hulud: The Second Coming** (2025 年 11 月 24 日)
- **范围**:300+ 个软件包,每周数百万次下载
- **攻击**:虚假 Bun 运行时安装与凭证窃取
- **方法**:使用虚假的 `setup_bun.js` preinstall 钩子下载并执行 TruffleHog
- **渗出**:创建名为 "SHA1HULUD" 的 GitHub Actions runner 和描述为 "Sha1-Hulud: The Second Coming" 的仓库
- **软件包**:@zapier/*, @posthog/*, @asyncapi/*, @postman/*, @ensdomains/* 等
- **文件**:`setup_bun.js`, `bun_environment.js` (10MB+ 混淆载荷), `actionsSecrets.json` (双重 Base64 编码)
- **工作流**:使用 SHA1HULUD runner 的 `.github/workflows/formatter_*.yml` 文件
### **Shai-Hulud: Golden Path 变体** (2025 年 12 月 28 日)
- **范围**:Second Coming 攻击的延续,文件已重命名
- **攻击**:相同的虚假 Bun 运行时技术,使用混淆的文件名
- **方法**:使用 `bun_installer.js` 和 `environment_source.js` (从 `setup_bun.js` 和 `bun_environment.js` 重命名)
- **渗出**:用于暂存窃取凭证的混淆 JSON 文件:`3nvir0nm3nt.json`, `cl0vd.json`, `c9nt3nts.json`, `pigS3cr3ts.json`
- **软件包**:@vietmoney/react-big-calendar (版本 0.26.0-0.26.2)
- **仓库描述**:"Goldox-T3chs: Only Happy Girl"
### **SANDWORM_MODE AI 工具链投毒** (2026 年 2 月 17 日)
- **范围**:19 个已确认的恶意 npm 软件包 + 工作流传播 IoC
- **攻击**:Typosquat(拼写仿冒)AI 工具链软件包和受污染的 CI 工作流分发
- **方法**:恶意 GitHub Action `ci-quality/code-quality-check@v1` 注入 `.github/workflows/quality.yml`
- **威胁行为者别名**:`official334`, `javaorg`
- **软件包**:`claud-code`, `cloude-code`, `cloude`, `opencraw`, `veim`, `yarsg` 等
- **来源**:[Socket.dev 分析](https://socket.dev/blog/sandworm-mode-npm-worm-ai-toolchain-poisoning)
## 快速开始
```
# 克隆 repository
git clone https://github.com/Cobenian/shai-hulud-detect
cd shai-hulud-detect
# 使 script 可执行
chmod +x shai-hulud-detector.sh
# 扫描你的项目以查找 Shai-Hulud 指标
./shai-hulud-detector.sh /path/to/your/project
# 用于全面的安全扫描
./shai-hulud-detector.sh --paranoid /path/to/your/project
# 将发现结果保存到 log 文件以供审查或作为 CI/CD artifacts
./shai-hulud-detector.sh --save-log report.log /path/to/your/project
# 检查 exit code 以进行 CI/CD 集成
./shai-hulud-detector.sh /path/to/your/project
echo "Exit code: $?" # 0=clean, 1=high-risk, 2=medium-risk
```
**CI/CD 集成**:脚本返回适当的退出代码(0=干净,1=高风险,2=中风险),可无缝集成到自动化安全流水线中。
## 检测内容
### 高风险指标
- **恶意工作流文件**:`.github/workflows/` 中的 `shai-hulud-workflow.yml` 文件(2025 年 9 月),使用 SHA1HULUD runner 的 `formatter_*.yml` 文件(2025 年 11 月),以及 SANDWORM_MODE 工作流 IoC,包括 `ci-quality/code-quality-check@v1` 和受污染的 `quality.yml` 工作流引用(2026 年 2 月)
- **已知的恶意文件哈希**:匹配来自不同 Shai-Hulud 蠕虫变体 (V1-V7) 的 7 个 SHA-256 哈希之一的文件,源自 [Socket.dev 的全面攻击分析](https://socket.dev/blog/ongoing-supply-chain-attack-targets-crowdstrike-npm-packages)
- **2025 年 11 月 Bun 攻击文件**:`setup_bun.js`/`bun_installer.js`(虚假 Bun 运行时安装程序)和 `bun_environment.js`/`environment_source.js`(10MB+ 混淆凭证窃取载荷)
- **混淆的渗出文件**:`3nvir0nm3nt.json`, `cl0vd.json`, `c9nt3nts.json`, `pigS3cr3ts.json`(Golden Path 变体 - 暂存窃取的凭证以备渗出)
- **受损的软件包版本**:来自多次攻击(2025 年 9 月至 2026 年 2 月)的 1,700 多个软件包的特定版本
- **可疑的 postinstall 钩子**:package.json 文件中的 postinstall 脚本包含 curl、wget、eval 命令或虚假 Bun 安装(`"preinstall": "node setup_bun.js"`)
- **Trufflehog 活动**:包含 trufflehog 引用、凭证扫描模式或 2025 年 11 月增强模式(自动化 TruffleHog 下载和执行)的文件
- **Shai-Hulud 仓库**:名为 "Shai-Hulud"(用于数据渗出)或描述为 "Sha1-Hulud: The Second Coming" 或 "Goldox-T3chs: Only Happy Girl" 的 Git 仓库
- **机密渗出文件**:带有双重 Base64 编码凭证的 `actionsSecrets.json` 文件(2025 年 11 月)
- **SHA1HULUD GitHub Actions Runner**:使用恶意 runner 窃取凭证的 GitHub Actions 工作流
- **SANDWORM_MODE 工作流 IoC**:包含 `ci-quality/code-quality-check@v1`、行为者别名(`official334`, `javaorg`)或相关传播模块引用的工作流文件
### 中风险指标
- **可疑内容模式**:引用 `webhook.site` 和恶意端点 `bb8ca5f6-4175-45d2-b042-fc9ebb8170b7`
- **可疑 git 分支**:名为 "shai-hulud" 的分支
- **Semver 模式匹配**:由于插入符 (^) 或波浪号 (~) 版本模式,可能在 `npm update` 期间受到破坏的软件包
### 低风险指标
- **命名空间警告**:来自已知受影响命名空间(@ctrl, @crowdstrike, @art-ws, @ngx, @nativescript-community)但版本安全的软件包
### 软件包检测方法
脚本从外部文件 (`compromised-packages.txt`) 加载受损软件包列表,该文件包含:
- **1,700+ 个已确认的受损软件包版本** 及确切版本号(2025 年 9 月至 2026 年 2 月的活动)
- **18+ 个受影响的命名空间**,用于更广泛地检测来自受损维护者账户的软件包
### 维护和更新软件包列表
**重要**:Shai-Hulud 攻击具有自我复制能力,意味着可能仍会发现新的受损软件包。受损软件包列表存储在 `compromised-packages.txt` 中,以便于维护:
- **格式**:`package_name:version`(每行一个)
- **注释**:以 `#` 开头的行将被忽略
- **更新**:随着发现新的受损软件包,可以更新该文件
- **回退**:如果文件丢失,脚本将使用核心嵌入式列表
### 及时了解新发现的受损软件包
定期查看这些安全公告,了解新发现的受损软件包:
- **[StepSecurity Blog](https://www.stepsecurity.io/blog/ctrl-tinycolor-and-40-npm-packages-compromised)** - 原始综合分析
- **[Semgrep Security Advisory](https://semgrep.dev/blog/2025/security-advisory-npm-packages-using-secret-scanning-tools-to-steal-credentials/)** - 详细技术分析
- **[JFrog Security Research](https://jfrog.com/blog/shai-hulud-npm-supply-chain-attack-new-compromised-packages-detected/)** - 持续检测新软件包
- **[Wiz Security Blog](https://www.wiz.io/blog/shai-hulud-npm-supply-chain-attack)** - 带有软件包附录的攻击分析
- **[Socket.dev Blog](https://socket.dev/blog/ongoing-supply-chain-attack-targets-crowdstrike-npm-packages)** - CrowdStrike 软件包分析
- **[Socket.dev Blog](https://socket.dev/blog/sandworm-mode-npm-worm-ai-toolchain-poisoning)** - SANDWORM_MODE AI 工具链投毒活动
- **[HelixGuard](https://helixguard.ai/blog/malicious-sha1hulud-2025-11-24)** - Second Coming 分析
### 如何添加新发现的软件包
1. 查看上面的安全公告以获取新的受损软件包
2. 以 `package_name:version` 的格式将它们添加到 `compromised-packages.txt` 中
3. 测试脚本以确保检测有效
4. 考虑将更新贡献回本仓库
**覆盖范围说明**:2025 年 9 月至 2026 年 2 月的多次活动总共影响了 1,700 多个软件包。我们的检测旨在提供跨 Shai-Hulud 蠕虫(517+ 个软件包)、Chalk/Debug 加密货币盗窃(26+ 个软件包)、“Shai-Hulud: The Second Coming”虚假 Bun 运行时攻击(1,100+ 个软件包)、Golden Path 变体以及 2026 年 2 月 SANDWORM_MODE 活动的**全面覆盖**。
### 核心模式 vs 偏执模式
**核心模式(默认)**
- 专门针对 Shai-Hulud 攻击指标
- 推荐给大多数检查此特定威胁的用户
- 输出清晰、专注,误报最少
**偏执模式 (`--paranoid`)**
- 包含所有核心 Shai-Hulud 检测 **外加** 额外的安全检查
- 增加 typosquatting(拼写仿冒)检测和网络渗出模式分析
- **重要**:偏执功能是通用安全工具,并非 Shai-Hulud 特有
- 可能会从合法代码中产生更多误报
- 适用于全面的安全审计
**Semver 范围检查 (`--check-semver-ranges`)**
- 检查 package.json 中的 semver 范围(^, ~)是否可能解析为受损版本
- 在两种情况下都报告低风险(关于潜在风险的信息性警告)
- 用于识别可能仍包含恶意版本的私有 npm 缓存中的潜在风险
## 环境要求
- macOS 或类 Unix 系统
- **Bash 5.0 或更高版本**(关联数组和性能功能所需)
- macOS:`brew install bash` 然后使用 `/opt/homebrew/bin/bash ./shai-hulud-detector.sh` 运行
- Linux:大多数现代发行版默认包含 Bash 5.x
- 检查您的版本:`bash --version`
- 标准 Unix 工具:`find`, `grep`, `shasum`
### Grep 工具选择
脚本按以下优先顺序自动选择最快的可用 grep 工具:
1. **git grep**(默认) - 使用基于 DFA 的正则引擎,无回溯,对于我们的模式最快(比 ripgrep 快约 40%)
2. **ripgrep**(回退) - 同样基于 DFA,性能卓越
3. **grep**(最后手段) - 可能在复杂模式上经历灾难性回溯
您可以使用标志覆盖自动选择:
- `--use-git-grep` - 强制使用 git grep
- `--use-ripgrep - 强制使用 ripgrep
- `--use-grep` - 强制使用标准 grep
**为什么 git grep 是默认**:我们的测试表明,在大型代码库上 git grep 比 ripgrep 快约 40%。两者都使用基于 DFA 的正则引擎,避免了标准 grep 在复杂模式上挂起时的灾难性回溯。
## 输出解读
### 干净的系统
```
✅ No indicators of Shai-Hulud compromise detected.
Your system appears clean from this specific attack.
```
### 受损的系统
脚本将显示:
- **🚨 高风险**:确定的入侵指标
- **⚠️ 中风险**:需要人工审查的可疑模式
- **摘要**:发现的问题计数
### 如果发现问题该怎么办
#### 高风险问题
- **需要立即采取行动**
- 更新或移除受损软件包
- 审查并移除恶意工作流文件
- 扫描凭证盗窃
- 考虑进行全面的系统审计
#### 中风险问题
- **需要人工调查**
- 审查标记文件的合法性
- 检查 webhook.site 的使用是否有意为之
- 验证 git 分支用途
## 用于 CI/CD 集成的退出代码
脚本返回特定的退出代码以实现适当的 CI/CD 流水线集成:
- **退出代码 0**:干净系统 - 无重大安全发现
- **退出代码 1**:检测到高风险发现 - 需要立即采取行动
- **退出代码 2**:检测到中风险发现 - 需要人工调查
### CI/CD 流水线示例
#### GitHub Actions
```
- name: Security Scan with Shai-Hulud Detector
run: |
chmod +x ./shai-hulud-detector.sh
./shai-hulud-detector.sh .
# Pipeline will automatically fail on exit codes 1 or 2
```
#### GitLab CI
```
security_scan:
script:
- chmod +x ./shai-hulud-detector.sh
- ./shai-hulud-detector.sh .
# Job fails automatically on non-zero exit codes
```
#### Jenkins
```
stage('Security Scan') {
steps {
sh '''
chmod +x ./shai-hulud-detector.sh
./shai-hulud-detector.sh .
'''
}
// Build fails automatically on non-zero exit codes
}
```
#### 按退出代码自定义处理
```
#!/bin/bash
./shai-hulud-detector.sh .
exit_code=$?
case $exit_code in
0) echo "✅ Security scan passed - no issues found" ;;
1) echo "🚨 CRITICAL: High-risk security issues found - blocking deployment"
exit 1 ;;
2) echo "⚠️ WARNING: Medium-risk issues found - review required"
# Could choose to continue with warnings
;;
esac
```
### 将发现保存到日志文件
使用 `--save-log FILE` 将所有检测到的文件路径保存到结构化日志文件中:
```
./shai-hulud-detector.sh --save-log findings.log /path/to/project
```
日志文件包含按严重程度分组的文件路径:
```
# HIGH
/path/to/malicious-workflow.yml
/path/to/compromised-package.json
# MEDIUM
/path/to/suspicious-content.js
# LOW
/path/to/namespace-warning.json
```
此格式专为以下用途设计:
- **CI/CD 制品**:将扫描结果存储为构建制品以供审查
- **编程解析**:易于使用简单脚本解析
- **全面覆盖**:包含所有发现,无显示截断
## 测试
仓库包含一个包含 32 个测试用例的综合测试套件。使用自动化测试运行器验证所有用例:
```
# 运行完整 test suite (推荐)
./run-tests.sh
# Test suite 验证所有 test cases 的预期 exit codes 和 risk levels
# Exit codes: 0=clean, 1=high-risk, 2=medium-risk
```
您也可以手动运行单个测试用例:
```
# 测试 clean project (应显示无问题)
./shai-hulud-detector.sh test-cases/clean-project
# 测试受感染 project (应显示多个问题)
./shai-hulud-detector.sh test-cases/infected-project
# 测试 November 2025 "Shai-Hulud: The Second Coming" 攻击 (应对所有新模式显示 HIGH risk)
./shai-hulud-detector.sh test-cases/november-2025-attack
# 测试混合 project (应显示 medium risk 问题)
./shai-hulud-detector.sh test-cases/mixed-project
# 测试 namespace warnings (应仅显示 LOW risk namespace warnings)
./shai-hulud-detector.sh test-cases/namespace-warning
# 测试 semver 匹配 (应对可能匹配受损版本的 packages 显示 MEDIUM risk)
./shai-hulud-detector.sh test-cases/semver-matching
# 测试合法 crypto libraries (应仅显示 MEDIUM risk)
./shai-hulud-detector.sh test-cases/legitimate-crypto
# 测试 chalk/debug 攻击模式 (应显示 HIGH risk 受损 packages + MEDIUM risk crypto 模式)
./shai-hulud-detector.sh test-cases/chalk-debug-attack
# 测试常见 crypto libraries (不应触发 HIGH risk 误报)
./shai-hulud-detector.sh test-cases/common-crypto-libs
# 测试合法 XMLHttpRequest 修改 (应仅显示 LOW risk)
./shai-hulud-detector.sh test-cases/xmlhttp-legitimate
# 测试带有 crypto 模式的恶意 XMLHttpRequest (应显示 HIGH risk crypto 窃取 + MEDIUM risk XMLHttpRequest 模式)
./shai-hulud-detector.sh test-cases/xmlhttp-malicious
# 测试 lockfile 误报 (尽管其他 package 拥有受损版本,应显示无问题)
./shai-hulud-detector.sh test-cases/lockfile-false-positive
# 测试 lockfile 中的实际受损 package (应显示 HIGH risk)
./shai-hulud-detector.sh test-cases/lockfile-compromised
# 测试具有安全 lockfile 版本的 packages (应显示 LOW risk 及 lockfile 保护消息)
./shai-hulud-detector.sh test-cases/lockfile-safe-versions
# 测试混合 lockfile 场景 (应对受损项显示 HIGH risk + 对安全项显示 LOW risk)
./shai-hulud-detector.sh test-cases/lockfile-comprehensive-test
# 测试无 lockfile 的 packages (应对潜在更新风险显示 MEDIUM risk)
./shai-hulud-detector.sh test-cases/no-lockfile-test
# 测试 paranoid 模式下的 typosquatting 检测 (应显示 MEDIUM risk typosquatting warnings)
./shai-hulud-detector.sh --paranoid test-cases/typosquatting-project
# 测试 paranoid 模式下的网络渗出检测 (应显示 HIGH risk 凭证收集 + MEDIUM risk 网络模式)
./shai-hulud-detector.sh --paranoid test-cases/network-exfiltration-project
# 测试 paranoid 模式下的 clean project (应显示无问题 - 验证无误报)
./shai-hulud-detector.sh --paranoid test-cases/clean-project
# 测试 semver 通配符解析 (应正确处理 4.x, 1.2.x 模式且无错误)
./shai-hulud-detector.sh test-cases/semver-wildcards
# 测试 discussion workflow 检测 (应对恶意 discussion-triggered workflows 显示 CRITICAL risk)
./shai-hulud-detector.sh test-cases/discussion-workflows
# 测试 SANDWORM_MODE workflow IOC 检测 (应对中毒的 ci-quality action 使用显示 HIGH risk)
./shai-hulud-detector.sh test-cases/sandworm-mode-workflow
# 测试 GitHub Actions runner 检测 (应对 SHA1HULUD self-hosted runners 显示 CRITICAL risk)
./shai-hulud-detector.sh test-cases/github-actions-runners
# 测试 file hash 验证 (应根据恶意 hashes 验证良性文件)
./shai-hulud-detector.sh test-cases/hash-verification
# 测试破坏性模式检测 (应对数据破坏命令显示 CRITICAL risk)
./shai-hulud-detector.sh test-cases/destructive-patterns
```
### 偏执模式测试
`--paranoid` 标志启用了 Shai-Hulud 特定检测之外的额外安全检查:
- **Typosquatting 检测**:识别名称与流行软件包相似的软件包(例如 "raect" 而不是 "react","lodsh" 而不是 "lodash")
- **网络渗出模式**:检测可疑域名(webhook.site, pastebin.com)、硬编码 IP 地址、到外部端点的 WebSocket 连接
- **增强安全审计**:适用于全面的项目安全审查
**注意**:偏执模式可能会从合法代码模式中产生更多误报,因此请仔细审查发现。
## 工作原理
脚本执行以下检查:
1. **软件包数据库加载**:从 `compromised-packages.txt` 加载 1,700 多个受损软件包到 O(1) 查找映射中
2. **工作流检测**:搜索 `shai-hulud-workflow.yml` 文件(2025 年 9 月)、带有 SHA1HULUD runner 的 `formatter_*.yml` 文件(2025 年 11 月)以及 SANDWORM_MODE 工作流 IoC(2026 年 2 月)
3. **哈希验证**:针对 7 个已知的恶意 bundle.js 变体 (V1-V7) 计算 SHA-256 哈希
4. **软件包分析**:解析 `package.json` 文件以查找受损版本和受影响的命名空间
5. **Semver 范围检查**(使用 `--check-semver-ranges` 选择加入):检查版本范围是否可能解析为受损版本
6. **Postinstall 钩子检测**:识别包含 curl、wget、eval 或虚假 Bun 模式的可疑 postinstall/preinstall 脚本
7. **内容扫描**:搜索可疑 URL、webhook 端点和恶意模式
8. **加密货币盗窃检测**:识别钱包替换模式、XMLHttpRequest 劫持和加密货币盗窃函数
9. **Trufflehog 活动检测**:查找凭证扫描工具和机密窃取模式
10. **Git 分析**:检查可疑的分支名称(“shai-hulud”)
11. **仓库检测**:识别 “Shai-Hulud”、“Second Coming” 和 “Goldox-T3chs” 仓库模式
12. **2025 年 11 月 Bun 攻击检测**:识别 `setup_bun.js`/`bun_installer.js` 和 `bun_environment.js`/`environment_source.js` 攻击文件
13. **GitHub Actions Runner 检测**:识别恶意的 SHA1HULUD runner
14. **Discussion 工作流检测**:识别在 discussion 事件上触发的工作流(隐蔽持久性)
15. **破坏性载荷检测**:识别破坏性回退模式(`rm -rf`, `fs.rmSync` 等)
16. **Lockfile 完整性检查**:分析 package-lock.json、yarn.lock 和 pnpm-lock.yaml 以查找受损软件包
17. **Typosquatting 检测**(偏执模式):识别名称与流行软件包相似的软件包
18. **网络渗出检测**(偏执模式):检测可疑域名和硬编码 IP
19. **混淆渗出检测**:识别 Golden Path 变体暂存文件(`3nvir0nm3nt.json`, `cl0vd.json` 等)
## 局限性
- **哈希检测**:仅检测与 7 个已知恶意哈希完全匹配的文件
- **软件包版本**:检测特定的受损版本;在软件包列表更新之前,可能无法检测到新变体
- **误报**:合法使用 webhook.site、Trufflehog 或 postinstall 钩子可能会触发警报
- **蠕虫演变**:可能会出现具有不同签名的新变体
- **Semver 范围**:`--check-semver-ranges` 标志仅供参考;受损版本大多已从 npm 下架
## 安全说明
此脚本仅用于**检测**。它不会:
- 自动移除恶意代码
- 修复受损软件包
- 防止未来的攻击
请务必手动验证发现并采取适当的补救措施。
## 参考资料
### 主要来源
- [StepSecurity Blog: CTRL, tinycolor and 40 NPM packages compromised](https://www.stepsecurity.io/blog/ctrl-tinycolor-and-40-npm-packages-compromised)
- [JFrog: New compromised packages in largest npm attack in history](https://jfrog.com/blog/new-compromised-packages-in-largest-npm-attack-in-history/)
- [Aikido: NPM debug and chalk packages compromised](https://www.aikido.dev/blog/npm-debug-and-chalk-packages-compromised)
- [Semgrep Security Advisory: NPM packages using secret scanning tools to steal credentials](https://semgrep.dev/blog/2025/security-advisory-npm-packages-using-secret-scanning-tools-to-steal-credentials/)
- [Aikido: S1ngularity-nx attackers strike again](https://www.aikido.dev/blog/s1ngularity-nx-attackers-strike-again)
- [Aikido: Shai-Hulud strikes again - The Golden Path](https://www.aikido.dev/blog/shai-hulud-strikes-again---the-golden-path)
### 其他资源
- [Socket: Ongoing supply chain attack targets CrowdStrike npm packages](https://socket.dev/blog/ongoing-supply-chain-attack-targets-crowdstrike-npm-packages)
- [Ox Security: NPM 2.0 hack: 40+ npm packages hit in major supply chain attack](https://www.ox.security/blog/npm-2-0-hack-40-npm-packages-hit-in-major-supply-chain-attack/)
- [Phoenix Security: NPM tinycolor compromise](https://phoenix.security/npm-tinycolor-compromise/)
## 贡献
我们欢迎对代码、文档、测试和覆盖的软件包进行改进。
### 如何贡献
#### 添加新受损软件包
1. **Fork 仓库** 在 GitHub 上,然后克隆您的 fork:
git clone https://github.com/YOUR_USERNAME/shai-hulud-detect.git
cd shai-hulud-detect
2. **更新软件包列表**
- 以 `package_name:version` 的格式将新软件包添加到 `compromised-packages.txt`
- 包含您发现受损软件包的来源/参考
3. **测试您的更改**
./run-tests.sh
# 所有 37 个测试都应通过
4. **提交 Pull Request**
- 推送到您的 fork 并向上游仓库提交 PR
- 包含信息来源(安全公告、博客文章等)
#### 其他贡献
- **错误修复**:报告并修复检测准确性问题
- **新 IoC**:添加对其他入侵指标检测
- **文档**:提高清晰度并添加示例
- **测试用例**:为边缘情况添加新的测试场景
### 贡献指南
- **验证来源**:仅添加由信誉良好的安全公司确认的软件包
- **充分测试**:确保更改不会破坏现有功能
- **文档更改**:更新相关文档和变更日志
- **遵循模式**:匹配现有的代码风格和组织结构
- **安全第一**:切勿在测试用例中包含实际的恶意代码
### 报告新受损软件包
如果您无法提交 PR,您仍然可以通过报告新的受损软件包来提供帮助:
1. 打开一个标题为 “New compromised package: [package-name]” 的 issue
2. 包含软件包名称、版本和信息来源
3. 提供安全公告或报告的链接
4. 我们将审查并将验证过的软件包添加到检测列表中
## 发布说明
有关更改和版本历史的完整列表,请参阅 [CHANGELOG.md](CHANGELOG.md)。
## 许可证
本项目根据 MIT 许可证授权 - 详情请参见 [LICENSE](LICENSE) 文件。标签:Cutter, DevSecOps, DNS 反向解析, IOC检测, Node.js安全, NPM供应链攻击, Shai-Hulud, StruQ, 上游代理, 依赖混淆, 入侵指标, 凭据窃取, 前端安全, 加密货币窃取, 包劫持, 威胁情报, 应用安全, 开发者工具, 文档安全, 沙虫攻击, 自复制蠕虫, 软件供应链安全, 软件开发工具包, 远程方法调用