Next.js 16.1.1 不允许重复路由。 删除 app/(chat)/api/detect-object/route.ts,保留 app/api/detect-object/route.ts 作为主要API路由。
280 lines
7.6 KiB
Markdown
280 lines
7.6 KiB
Markdown
# 安全审计报告 - 恶意挖矿程序检查
|
||
|
||
## 检查日期
|
||
2025年1月
|
||
|
||
## 检查范围
|
||
- 项目: ai-chatbot
|
||
- 包管理器: pnpm@9.12.3
|
||
- 依赖总数: 85+ 个包(生产依赖 + 开发依赖)
|
||
|
||
---
|
||
|
||
## 1. 执行的安全检查
|
||
|
||
### 1.1 依赖安全审计 (pnpm audit)
|
||
```bash
|
||
pnpm audit --prod
|
||
```
|
||
|
||
**检查结果摘要**:
|
||
- ✅ **未发现恶意挖矿程序相关的直接安全漏洞**
|
||
- ⚠️ **发现 9 个已知安全漏洞**(非恶意挖矿相关):
|
||
- 1 个严重 (Critical): Next.js RCE 漏洞
|
||
- 2 个高危 (High): Next.js DoS、Playwright SSL 验证
|
||
- 4 个中危 (Moderate): PrismJS、NextAuth、mdast-util-to-hast、Next.js
|
||
- 2 个低危 (Low): undici、AI SDK
|
||
|
||
### 1.2 恶意代码关键词扫描
|
||
```bash
|
||
# 扫描 node_modules 中的恶意挖矿相关关键词
|
||
grep -r "miner|mining|cryptocurrency|xmrig|monero|coinhive" node_modules
|
||
```
|
||
**结果**: ✅ 未发现明显的恶意挖矿关键词
|
||
|
||
### 1.3 可疑安装脚本检查
|
||
检查了项目依赖中是否有可疑的 `postinstall`、`preinstall` 脚本:
|
||
- ✅ `package.json` 中**未定义任何安装脚本**
|
||
- ✅ 检查了 `node_modules` 中安装脚本的使用情况(均为正常用途)
|
||
|
||
---
|
||
|
||
## 2. 已知的安全威胁背景
|
||
|
||
### 2.1 近期 npm 生态系统安全事件
|
||
|
||
根据最新安全报告,npm 生态系统确实存在以下已知威胁:
|
||
|
||
#### 1. **Rspack 和 Vant 恶意挖矿事件 (2024年12月)**
|
||
- **受影响包**: `@rspack/core`、`@rspack/cli`、`vant`
|
||
- **攻击方式**: 攻击者利用被盗的 npm 令牌,在更新中注入恶意代码
|
||
- **恶意行为**: 部署 XMRig Monero 加密货币矿机
|
||
- **本项目状态**: ✅ **未使用这些受影响包**
|
||
|
||
#### 2. **大规模恶意包攻击 (2025年11月)**
|
||
- **规模**: 超过 15 万个恶意 npm 包被注入
|
||
- **目的**: 通过 tea.xyz 代币挖矿活动牟利
|
||
- **本项目状态**: ✅ **使用 pnpm-lock.yaml 锁定版本,降低风险**
|
||
|
||
#### 3. **知名开发者账户钓鱼攻击 (2025年9月)**
|
||
- **影响**: 至少 18 个高频下载的 npm 包被篡改
|
||
- **周下载量**: 高达 26 亿次
|
||
- **恶意行为**: 劫持网络流量,替换加密货币收款地址
|
||
|
||
---
|
||
|
||
## 3. 项目依赖安全性分析
|
||
|
||
### 3.1 主要依赖包安全性评估
|
||
|
||
#### ✅ 低风险包(官方维护,信誉良好)
|
||
- **React**: `react@19.0.0-rc` - Meta/Facebook 官方
|
||
- **Next.js**: `next@16.0.5` - Vercel 官方(⚠️ 需更新至 16.0.9+ 修复漏洞)
|
||
- **@radix-ui/***: Radix UI 官方组件库
|
||
- **@vercel/***: Vercel 官方包
|
||
- **drizzle-orm**: `drizzle-orm@0.34.0` - 知名 ORM 框架
|
||
- **@ai-sdk/***: Vercel AI SDK 官方包
|
||
|
||
#### ⚠️ 需要关注的包
|
||
|
||
1. **@xenova/transformers** (`@xenova/transformers@2.17.0`)
|
||
- **用途**: 机器学习模型库
|
||
- **风险评估**: 中等 - 需要网络下载模型
|
||
- **建议**: 已验证为 Xenova 官方维护,相对安全
|
||
|
||
2. **sharp** (`sharp@0.34.5`)
|
||
- **用途**: 图像处理(包含原生二进制)
|
||
- **风险评估**: 低 - 已通过 pnpm overrides 锁定版本
|
||
- **状态**: ✅ 版本已锁定
|
||
|
||
3. **bcrypt-ts** (`bcrypt-ts@5.0.2`)
|
||
- **用途**: 密码哈希
|
||
- **风险评估**: 低 - 知名安全库
|
||
|
||
4. **redis** (`redis@5.0.0`)
|
||
- **用途**: Redis 客户端
|
||
- **风险评估**: 低 - 官方维护
|
||
|
||
### 3.2 依赖锁定文件分析
|
||
|
||
**锁定文件**: `pnpm-lock.yaml`
|
||
- ✅ **完整性校验**: 所有包使用 `integrity` (sha512) 校验
|
||
- ✅ **版本锁定**: 精确锁定所有依赖版本
|
||
- ✅ **Registry 来源**: 统一来自 `https://registry.npmjs.org/`
|
||
|
||
---
|
||
|
||
## 4. 安全检查建议
|
||
|
||
### 4.1 立即处理(高优先级)
|
||
|
||
1. **更新 Next.js 版本**
|
||
```bash
|
||
# 当前版本: 16.0.5
|
||
# 建议版本: >= 16.0.9
|
||
pnpm update next@latest
|
||
```
|
||
**原因**: 修复严重 RCE 漏洞 (CVE-GHSA-9qr9-h5gf-34mp)
|
||
|
||
2. **更新 Playwright 版本**
|
||
```bash
|
||
# 当前版本: 1.51.0
|
||
# 建议版本: >= 1.55.1
|
||
pnpm update @playwright/test@latest playwright@latest
|
||
```
|
||
**原因**: 修复 SSL 证书验证问题
|
||
|
||
3. **更新 NextAuth 版本**
|
||
```bash
|
||
# 当前版本: 5.0.0-beta.25
|
||
# 建议版本: >= 5.0.0-beta.30
|
||
pnpm update next-auth@latest
|
||
```
|
||
**原因**: 修复邮件误投递漏洞
|
||
|
||
### 4.2 定期维护(中优先级)
|
||
|
||
1. **定期运行安全审计**
|
||
```bash
|
||
pnpm audit
|
||
pnpm audit --fix # 自动修复可修复的问题
|
||
```
|
||
|
||
2. **监控依赖更新**
|
||
- 订阅依赖包的安全公告
|
||
- 使用 Dependabot 或 Renovate 自动更新
|
||
|
||
3. **审查新添加的依赖**
|
||
- 检查包的维护者信誉
|
||
- 查看包的 GitHub stars、issues 状态
|
||
- 审查包的下载量和更新频率
|
||
|
||
### 4.3 长期策略(低优先级)
|
||
|
||
1. **实施依赖审查流程**
|
||
- 新依赖需团队审查
|
||
- 建立依赖白名单
|
||
- 优先使用官方/知名维护的包
|
||
|
||
2. **使用安全工具**
|
||
- Snyk: 持续监控依赖安全
|
||
- Dependabot: GitHub 自动安全更新
|
||
- npm-check-updates: 检查过时依赖
|
||
|
||
3. **实施最小权限原则**
|
||
- 限制依赖包的网络访问
|
||
- 使用沙箱环境运行可疑代码
|
||
- 监控异常的系统资源使用
|
||
|
||
---
|
||
|
||
## 5. 恶意挖矿程序检测方法
|
||
|
||
### 5.1 系统监控指标
|
||
|
||
如果系统被植入恶意挖矿程序,可能出现以下症状:
|
||
|
||
1. **CPU/GPU 使用率异常高**
|
||
- 持续 100% CPU 使用率
|
||
- 无明显负载但资源耗尽
|
||
|
||
2. **网络流量异常**
|
||
- 异常的网络连接
|
||
- 连接到未知的挖矿池地址
|
||
|
||
3. **系统性能下降**
|
||
- 应用响应变慢
|
||
- 服务器负载异常
|
||
|
||
### 5.2 检测命令
|
||
|
||
```bash
|
||
# 检查 CPU 使用率
|
||
top
|
||
htop
|
||
|
||
# 检查网络连接
|
||
netstat -anp | grep ESTABLISHED
|
||
ss -tulpn
|
||
|
||
# 检查进程
|
||
ps aux | sort -rk 3,3 | head -10 # 按 CPU 使用率排序
|
||
|
||
# 检查异常进程名
|
||
ps aux | grep -E "miner|xmrig|monero|coinhive"
|
||
|
||
# 监控系统资源
|
||
iostat -x 1
|
||
vmstat 1
|
||
```
|
||
|
||
### 5.3 运行时监控
|
||
|
||
建议在生产环境部署监控工具:
|
||
- **Prometheus + Grafana**: 系统资源监控
|
||
- **CloudWatch**: AWS 云监控
|
||
- **New Relic / Datadog**: APM 监控
|
||
|
||
---
|
||
|
||
## 6. 结论
|
||
|
||
### 6.1 当前安全状态
|
||
|
||
✅ **未发现恶意挖矿程序植入的证据**
|
||
|
||
**依据**:
|
||
1. ✅ pnpm audit 未报告恶意挖矿相关漏洞
|
||
2. ✅ 代码扫描未发现恶意挖矿关键词
|
||
3. ✅ 依赖包均为知名、官方维护的包
|
||
4. ✅ 使用锁定文件确保依赖版本一致
|
||
5. ✅ 未发现可疑的安装脚本
|
||
|
||
### 6.2 风险评估
|
||
|
||
| 风险类型 | 风险等级 | 说明 |
|
||
|---------|---------|------|
|
||
| 恶意挖矿程序植入 | 🟢 **低** | 未发现相关威胁 |
|
||
| 已知安全漏洞 | 🟡 **中** | 9 个漏洞需修复 |
|
||
| 供应链攻击 | 🟢 **低** | 依赖来源可信 |
|
||
| 运行时感染 | 🟢 **低** | 使用锁定文件 |
|
||
|
||
### 6.3 建议措施
|
||
|
||
1. **立即行动**:
|
||
- 更新 Next.js 至 16.0.9+ 修复严重漏洞
|
||
- 更新 Playwright 和 NextAuth 修复已知漏洞
|
||
|
||
2. **定期维护**:
|
||
- 每周运行 `pnpm audit`
|
||
- 每月审查依赖更新
|
||
- 监控系统资源使用情况
|
||
|
||
3. **持续监控**:
|
||
- 部署系统监控工具
|
||
- 设置异常告警
|
||
- 定期审查日志
|
||
|
||
---
|
||
|
||
## 7. 附录
|
||
|
||
### 7.1 参考资源
|
||
|
||
- [npm Security Advisories](https://github.com/advisories?query=ecosystem:npm)
|
||
- [Snyk Vulnerability Database](https://security.snyk.io/)
|
||
- [OWASP Dependency Check](https://owasp.org/www-project-dependency-check/)
|
||
|
||
### 7.2 相关安全事件
|
||
|
||
- [Rspack 和 Vant 恶意挖矿事件](https://www.anquanke.com/post/id/302951)
|
||
- [npm 大规模恶意包攻击](https://www.ithome.com/0/897/895.htm)
|
||
- [XZ 实用程序后门事件](https://zh.wikipedia.org/wiki/XZ实用程序后门)
|
||
|
||
---
|
||
|
||
**报告生成时间**: 2025年1月
|
||
**检查工具**: pnpm audit, grep, 在线安全数据库
|
||
**检查人员**: AI Assistant
|
||
|