standujar/sha1-hulud-scanner
GitHub: standujar/sha1-hulud-scanner
一款轻量级 Bash 扫描器,用于检测 SHA1-HULUD pt 2 供应链攻击中 288+ 个被植入恶意代码的 npm 包。
Stars: 29 | Forks: 4
# SHA1-HULUD 扫描器
一个全面的 bash 扫描器,用于检测 SHA1-HULUD pt 2 供应链攻击中受损的 npm 包。
## 🚨 关于 SHA1-HULUD pt 2
SHA1-HULUD pt 2 是一次针对 288+ 个 npm 包的供应链攻击,包括:
- PostHog 包 (`@posthog/*`, `posthog-node` 等)
- Zapier 包 (`@zapier/*`)
- AsyncAPI 包 (`@asyncapi/*`)
- Postman 包 (`@postman/*`)
- ENS Domains 包 (`@ensdomains/*`, `ethereum-ens`)
- MCP 包 (`mcp-use`, `@mcp-use/*`)
- 以及更多...
**更多信息:** [HelixGuard 博客文章](https://helixguard.ai/blog/malicious-sha1hulud-2025-11-24)
## ✨ 功能
- ✅ 扫描 SHA1-HULUD pt 2 中的 **288+ 个受损包**
- ✅ 多包管理器支持:**npm**, **yarn**, **bun**, **pnpm**
- ✅ 4 阶段扫描:
- 直接依赖 (`package.json`)
- 传递依赖 (`node_modules`)
- Lockfiles (所有包管理器)
- SHA1 标记检测
- ✅ 对合法包(如 `@aws-crypto/sha1-browser`)进行**误报过滤**
- ✅ 检测到 SHA1 标记时显示**具体包名**
- ✅ 清晰的颜色编码输出及可操作的补救步骤
## 📦 安装
```
git clone https://github.com/standujar/sha1-hulud-scanner.git
cd sha1-hulud-scanner
chmod +x sha1-hulud-scanner.sh
```
## 🚀 用法
```
./sha1-hulud-scanner.sh
```
### 示例
```
# 扫描本地项目
./sha1-hulud-scanner.sh /path/to/your/project
# 扫描相对路径
./sha1-hulud-scanner.sh ~/Projects/my-app
# 扫描当前目录
./sha1-hulud-scanner.sh .
```
## 📊 输出示例
```
🔍 SHA1-HULUD Scanner v2.1
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📁 Project: /path/to/project
📋 288 packages to scan
📋 5 known false positives to exclude
🔎 [1/4] Scanning direct dependencies (package.json)...
✓ No compromised packages in direct dependencies
🔎 [2/4] Scanning node_modules (transitive)...
✓ No compromised packages installed
🔎 [3/4] Scanning lockfiles...
✓ No compromised packages in lockfiles
🔎 [4/4] Scanning for SHA1-HULUD markers...
📄 Checking packages with 'sha1' in name (bun.lock):
ℹ️ @aws-crypto/sha1-browser (legitimate package - skipped)
✓ No suspicious SHA1 markers (1 legitimate packages excluded)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ NO COMPROMISE DETECTED
Your project is clean — no SHA1-HULUD packages found.
📊 Statistics:
• 288 packages scanned
• 0 compromised packages
```
## 🛡️ 检查内容
### 阶段 1:直接依赖
扫描 `package.json` 中 `dependencies` 和 `devDependencies` 内的所有受损包。
### 阶段 2:Node Modules
检查受损包是否实际安装在 `node_modules/` 中(包括传递依赖)。
### 阶段 3:Lockfiles
扫描所有包管理器的 lockfiles:
- `package-lock.json` (npm)
- `yarn.lock` (yarn)
- `bun.lock` (bun - 二进制格式)
- `pnpm-lock.yaml` (pnpm)
### 阶段 4:SHA1 标记
检测名称中包含 "sha1" 的包,这是攻击的特征之一。过滤掉已知的误报(如 AWS 加密包)。
## ⚠️ 如果发现受损包
扫描器将显示详细的补救步骤:
1. 🛑 **立即停止**所有构建/CI
2. 🔒 **隔离** CI runners(如果是自托管)
3. 🔑 **轮换所有**敏感密钥:
- GitHub tokens (PAT, fine-grained, App)
- AWS credentials (如果是非 OIDC)
- NPM tokens
- API keys (PostHog, Stripe 等)
4. 🗑 **删除** `node_modules` 和 lockfiles
5. 📝 **更新**依赖项至干净的版本
6. 🔍 **审计**过去 48 小时的 CI 日志
## 📋 系统要求
- Bash 4.0+
- `grep`, `strings`, `sed` (标准 Unix 工具)
- 项目中存在包管理器 lockfiles
## 🔧 已知误报
扫描器自动排除以下合法包:
- `@aws-crypto/sha1-browser` - 用于 S3 校验和的 AWS SDK
- `@aws-crypto/sha256-browser` - AWS 加密工具
- `@aws-crypto/sha256-js` - AWS 加密工具
- `sha1` - 合法加密库
- `sha.js` - 合法加密库
## 📝 包列表
扫描器根据 `sha1-hulud-packages.txt` 中定义的 288 个受损包进行检查。
要更新列表:
```
# 编辑 sha1-hulud-packages.txt
# 每行一个 package,支持使用 # 注释
```
## 🤝 贡献
欢迎贡献!请:
1. Fork 本仓库
2. 创建一个功能分支
3. 提交 pull request
## 📜 许可证
MIT 许可证 - 随意使用此扫描器保护您的项目。
## 🔗 资源
- [HelixGuard SHA1-HULUD 分析](https://helixguard.ai/blog/malicious-sha1hulud-2025-11-24)
- [npm 咨询数据库](https://npmjs.com/advisories)
## ⚡ 快速开始
```
# Clone 并运行
git clone https://github.com/standujar/sha1-hulud-scanner.git
cd sha1-hulud-scanner
chmod +x sha1-hulud-scanner.sh
./sha1-hulud-scanner.sh /path/to/your/project
```
**保持安全!定期扫描您的项目。** 🛡️
标签:AsyncAPI, Bun, DNS 反向解析, ENS, HelixGuard, IP 地址批量处理, MCP, Node.js安全, NPM包检测, PNPM, PostHog, Postman, SHA1-HULUD, Yarn, Zapier, 以太坊, 依赖混淆, 包管理器, 应用安全, 开发安全, 恶意软件扫描, 文档安全, 统一API, 软件开发工具包, 防御框架