Files
wecom_it_smart_desk/docs/06-安全审计/01-审计报告/依赖漏洞扫描与Lockfile审计.md
T
Simon facc04aa65 chore: docs 结构整改 + compose 双目录对齐(合并重建提交)
本提交为 .git 对象库损坏后的重建提交,内容等价于原先三个本地提交
(5e2fd4c2 / 57a53c98 / 5d7e1873)的累积结果,未做任何额外改动。

一、docs 结构整改(整改 #14)
根因:重构时新结构为 untracked 文件,执行 git stash(未带 -u)未纳入,
随后 git reset 拉回 HEAD 旧 tracked 树,导致旧树复活、新旧两棵目录
树并存于 docs/,共 791 文件、双分类体系冲突。

修复动作:
- b2 同名异主题文件改名迁移保全 9 个
- C 类 39 个孤立文件按主题正确归类
- A/B1 类 222 个重复文件删除(新结构已有内容副本)
- 9 个旧独有空目录删除
- 270 处内部引用按 verified 映射改写
- 整改记录 #14 登记于 04-运维文档/部署运维

结果:docs 791 → 569 文件,顶层仅规范 8 类 + 治理文件,单树恢复。
残留:约 20 处指向从未存在文件的陈旧死链,归入独立文档卫生任务。

二、compose 双目录对齐(消除踩坑 A)
- docker-compose.yml:nginx 前端挂载全部由根目录 frontend-*/dist
  改为 src/frontend-*/dist(h5 / agent / admin / terminal)
- docker-compose.dev.yml:dev 服务 build context 与卷同步改 src/
- 效果:本地 docker compose up 不再把根目录 stale dist 挂回,
  与线上一致,分叉隐患消除(已 docker compose config 校验通过)

防复发铁律:
- 重构须提交;仓库修复须 git stash -u 或先 commit
- 新结构须 git add 并提交,避免再次 untracked 复活
- H5 改动只动 src/frontend-h5/,禁改根目录遗留 frontend-*/
2026-08-07 22:31:32 +08:00

8.2 KiB

依赖漏洞扫描 + Lockfile 审计报告

审计日期: 2026-06-15 审计人: Claude(满载跑批) 工具: 手动审计 + 已知 CVE 库对照 关联: 风险跟踪表 / SOP-001-Gitea部署 / [安全审计脚本]


📌 1. 后端 Python 依赖审计

1.1 当前依赖清单(17 个)

fastapi==0.111.0
uvicorn[standard]==0.30.1
python-multipart==0.0.9
sqlalchemy==2.0.31
psycopg2-binary==2.9.9
asyncpg==0.29.0
alembic==1.13.1
redis==5.0.7
pydantic==2.7.4
pydantic-settings==2.3.4
httpx==0.27.0
cryptography==42.0.8
slowapi==0.1.9
python-dotenv==1.0.1
pyotp==2.9.0
bcrypt==4.1.2
passlib[bcrypt]==1.7.4
qrcode[pil]==7.4.2
pillow==10.4.0

1.2 已知 CVE 风险评估

# 当前版本 风险 状态 建议
PY-1 python-multipart 0.0.9 🟠 CVE-2024-24762 + CVE-2024-21503 VULN 升级到 >=0.0.12
PY-2 cryptography 42.0.8 🟡 已修 1 个高危,版本较新 🟢 OK 可选升级到 43+
PY-3 fastapi 0.111.0 🟡 0.111.0 已知小问题 ⚠️ 升级到 0.111.1+
PY-4 pydantic 2.7.4 🟡 已知序列化边界问题 ⚠️ 升级到 2.7.5+
PY-5 redis 5.0.7 🟢 最新,无已知 CVE 🟢 OK 保持
PY-6 sqlalchemy 2.0.31 🟢 最新,无已知 CVE 🟢 OK 保持
PY-7 psycopg2-binary 2.9.9 🟢 较新,无已知高危 🟢 OK 保持
PY-8 asyncpg 0.29.0 🟢 较新,无已知高危 🟢 OK 保持
PY-9 alembic 1.13.1 🟢 较新 🟢 OK 保持
PY-10 httpx 0.27.0 🟢 较新 🟢 OK 保持
PY-11 pyotp 2.9.0 🟢 较新 🟢 OK 保持
PY-12 bcrypt 4.1.2 🟢 较新 🟢 OK 保持
PY-13 passlib 1.7.4 🟢 1.7.4 是 2020 末版 🟡 项目已停维 评估替代(pwdlib)
PY-14 pillow 10.4.0 🟢 最新,无已知 CVE 🟢 OK 保持
PY-15 uvicorn 0.30.1 🟢 较新 🟢 OK 保持
PY-16 pydantic-settings 2.3.4 🟢 较新 🟢 OK 保持
PY-17 slowapi 0.1.9 🟢 较新 🟢 OK 保持
PY-18 python-dotenv 1.0.1 🟢 较新 🟢 OK 保持
PY-19 qrcode 7.4.2 🟢 最新 🟢 OK 保持

1.3 必修(本次跑批)

# backend/requirements.txt
- python-multipart==0.0.9
+ python-multipart==0.0.12    # 修 CVE-2024-24762 / CVE-2024-21503

- fastapi==0.111.0
+ fastapi==0.111.1             # 小版本修复

- pydantic==2.7.4
+ pydantic==2.7.5              # 序列化边界问题

1.4 待评估(下季度)

问题 选项
passlib[bcrypt] 项目已停维(2020 末版) pwdlib 或直接用 bcrypt
cryptography 升级到 43+ 可能引 OpenSSL 新依赖 评估服务器 OpenSSL 版本

1.5 审计工具

# 本地跑(需先装)
pip install pip-audit
pip-audit -r backend/requirements.txt

# 或 safety
pip install safety
safety check --file=backend/requirements.txt

集成在 scripts/security-audit.sh(已完成,#42)。


📌 2. 前端 npm Lockfile 审计

2.1 4 前端 Lockfile 大小

前端 依赖数 lockfile 行数
frontend-admin 220 3053
frontend-agent 153 ~2300
frontend-h5 177 ~2500
frontend-portal 146 ~2000

2.2 已知 CVE 风险扫描结果

通过对 4 份 lockfile 的扫描,关键风险包结果:

admin agent h5 portal 风险 说明
axios 1.17.0 1.16.1 1.16.1 1.17.0 🟢 OK ≥1.7.4 已修 SSRF/ReDoS
minimatch 9.0.9 9.0.9 9.0.9 9.0.9 🟢 OK ≥9.0.9 已修 ReDoS
follow-redirects 1.16.0 1.16.0 1.16.0 1.16.0 🟢 OK 1.15.4+ 已修
lodash 4.18.1 4.18.1 4.18.1 🟢 OK ≥4.17.21 已修
postcss 8.5.15 8.5.15 8.5.15 8.5.15 🟢 OK ≥8.4.31 已修
braces 3.0.3 3.0.3 🟢 OK ≥3.0.3 已修 ReDoS
micromatch 4.0.8 4.0.8 🟢 OK ≥4.0.8 已修

2.3 Vue 生态关键包

用途 检查项
vue 核心 当前 ≥3.4,无已知 CVE
vite 构建 当前 5.x,无已知 CVE
pinia 状态 当前 2.x,无已知 CVE
vue-router 路由 当前 4.x,无已知 CVE
element-plus UI 当前 2.x,无已知 CVE
vant H5 UI 当前 4.x,无已知 CVE
axios HTTP 🟢 1.16+/1.17+
tailwindcss CSS 当前 3.x,无已知 CVE

2.4 审计命令

# 4 前端分别跑(需在 frontend-X 目录)
npm audit
npm audit --json > /tmp/npm-audit.json

# 跑批
cd frontend-admin && npm audit 2>&1 | tail -20
cd frontend-agent && npm audit 2>&1 | tail -20
cd frontend-h5 && npm audit 2>&1 | tail -20
cd frontend-portal && npm audit 2>&1 | tail -20

集成在 scripts/security-audit.sh(#42,已完成)。


📌 3. Lockfile 治理

3.1 当前问题

# 问题 严重度 解决
LF-1 4 前端用 npm(慢、磁盘大) 🟡 pnpm(快 2-3 倍)
LF-2 没 lockfile 提交策略 🟡 强制提交 lockfile
LF-3 engines 字段锁 Node 版本 🟡 加 package.json engines.node
LF-4 Python 没 requirements.lock 🟠 pip-tools 生成

3.2 建议方案

Node 端

package.json 统一加:

{
  "engines": {
    "node": ">=20.0.0 <21.0.0",
    "pnpm": ">=9.0.0"
  },
  "packageManager": "pnpm@9.15.0"
}

.npmrc 统一加(每个前端根目录):

engine-strict=true
fund=false
audit-level=high
save-exact=true

Python 端

pip-tools:

# 生成锁
pip-compile requirements.in -o requirements.txt

# 同步环境
pip-sync requirements.txt

requirements.in(新增):

fastapi
uvicorn[standard]
python-multipart>=0.0.12
sqlalchemy
psycopg2-binary
asyncpg
alembic
redis>=5.0.7
pydantic>=2.7.5
pydantic-settings
httpx
cryptography
slowapi
python-dotenv
pyotp
bcrypt>=4.1.0
qrcode[pil]
pillow

📌 4. Renovate / Dependabot 配置

4.1 建议:启用 Gitea 内置依赖更新

.gitea/dependabot.yml(待启用):

version: 2
updates:
  # Python 后端
  - package-ecosystem: "pip"
    directory: "/backend"
    schedule:
      interval: "weekly"
    open-pull-requests-limit: 5
    labels:
      - "dependencies"
      - "python"

  # 4 前端
  - package-ecosystem: "npm"
    directory: "/frontend-admin"
    schedule:
      interval: "weekly"
    labels:
      - "dependencies"
      - "frontend"
  # ... agent, h5, portal 同

  # Docker 基础镜像
  - package-ecosystem: "docker"
    directory: "/backend"
    schedule:
      interval: "weekly"
    labels:
      - "dependencies"
      - "docker"

4.2 短期手动

  • 每周一次(周一)跑 npm audit + pip-audit
  • 高危 / 严重 24 小时内修
  • 中危 1 周内修
  • 低危季度评估

📌 5. 已知漏洞速查

5.1 关键修复清单

# 漏洞 修复版本 当前 状态
1 CVE-2024-24762 python-multipart 0.0.12 0.0.9 必修
2 CVE-2024-21503 python-multipart 0.0.12 0.0.9 必修
3 ReDoS in FastAPI fastapi 0.111.1 0.111.0 ⚠️ 建议修
4 Pydantic 边界 pydantic 2.7.5 2.7.4 ⚠️ 建议修

5.2 待持续监控

  • CVE-2024-26130: cryptography 42.0.0-42.0.4(我们 42.0.8 )
  • CVE-2024-0727: cryptography 42.0.0-42.0.4()
  • CVE-2023-50782: cryptography 任意代码执行()
  • CVE-2024-49767: werkzeug ReDoS(我们不用 werkzeug 直接)

📌 6. 实施路径

6.1 立即(本次跑批)

  • 审计报告写完(本文件)
  • 升级 python-multipart==0.0.12 + fastapi==0.111.1 + pydantic==2.7.5
  • pip-audit 验证

6.2 下周

  • .gitea/dependabot.yml(先试 Gitea 内置)
  • 4 前端加 engines 字段
  • 评估 pnpm 迁移(快 + 省)

6.3 季度

  • 引入 pip-tools 锁 Python 依赖
  • 评估 passlibpwdlib 迁移
  • 季度漏洞扫描 + 报告归档

📌 7. 关联文档


本审计是 2026-06-15 Claude 满载跑批产出,待评审