已开启
fix: 新增可扫描的依赖清单并固定安全版本下限 #2
Yeren创建于 8 天前
fix: 新增可扫描的依赖清单并固定安全版本下限 #2
已开启
Yeren创建于 8 天前
Yeren
Yeren成员
8 天前

核查结论:报告的「安全合规 4 项全部达标」中有 3 项与实际不符

HedgeCode 的报告把安全合规度 4 项全判为达标

许可证合规 / 没有漏洞 / 依赖风险 严重0-高危0-中危0-低危0 / 高危依赖问题 0 个

其中许可证一项判定正确(本次核查确认依赖闭包中确无 GPL/AGPL/LGPL 组件),
但另外 3 项是误判。

原因:没有可被扫描的依赖清单

项目此前只有 conda 格式的 env-hedgecode.yaml,没有 requirements.txt
多数 SCA 工具不解析 conda YAML —— 扫描器不是没发现风险,而是没有可识别的清单可扫

OSV 漏洞库逐包实际查询,原环境所列组件版本合计存在 168 条漏洞记录:

组件 版本 漏洞条目
transformers 4.38.2 42
nltk 3.8.1 31
pillow 10.2.0 30
torch 2.2.1 23
urllib3 2.1.0 12
jinja2 3.1.3 8
requests / setuptools 2.31.0 / 68.2.2 6 / 6
idna / certifi / tqdm / scikit-learn 4 / 2 / 2 / 2

改动

新增 requirements.txt,由 AST 解析全部 22 个 Python 源文件得出,
仅声明代码实际使用的 7 个直接依赖:

torchtransformersnumpyscikit-learntree-sittertqdmprettytable

不再包含 pillownltkmatplotlibseabornpandasscipy 等代码零引用的包 ——
仅这几项就贡献了 60 余条漏洞记录,移除比升级更彻底。

版本下限的确定方式

不是凭经验拍的,而是用 OSV 反查出每个包「可清除全部已知漏洞的最低版本」:

组件 下限 说明
torch >=2.6.0,<3.0 修复 CVE-2025-32434torch.load 远程代码执行)
transformers >=4.53.0,<5.0 保持 4.x 线,避免 5.x 破坏性变更
scikit-learn >=1.5.0,<2.0 CVE-2024-5206
tqdm >=4.66.3 CVE-2024-34062
jinja2 / requests / certifi / idna / urllib3 / setuptools 见文件 传递依赖安全下限

CVE-2025-32434 与本项目直接相关:在 weights_only=False(PyTorch 2.6 之前的默认值)下,
恶意 checkpoint 可在加载时执行任意代码。本项目在 5 处调用 torch.load
加载 checkpoint 与 embedding。

兼容性核查

设主版本上限前,已核查代码的 API 使用面:

  • transformers 仅用 AutoTokenizer / AutoModel / BertModel / RobertaModel 等稳定 API
  • torch 仅用 no_grad / einsum / tensor / cat 等核心算子
  • numpy 2.x 已移除的别名(np.float_ / np.NaN 等),故 numpy 放开至 <3.0
  • tree-sitter 固定 0.21.1:0.22 起 Python 绑定 API 有较大调整,且该版本 OSV 无漏洞记录

关于「代码注释率 6.52% 未达标」

这项已经修好了,无需再处理

报告生成于 2026-07-22 16:40,而注释率修复提交 7e1e7477-27——报告早于修复。

按报告披露的口径复算当前代码(公式可由报告数据验证:5708-739-165-294=4510):

注释行 2245 / 有效代码行 3951 = 56.82%

已远超 15% 门槛。

⚠️ 残余风险(如实披露)

torchtransformers 即使升到最新版本仍分别存在 11 条9 条
尚无修复版本的 CVE 条目(经 OSV 确认),多为 AV:L 本地攻击向量的低危报告,
无法通过升级消除。

这意味着加上 requirements.txt 后,复扫会看到这些条目——
指标数字可能从「0」变为非零。但这是把「扫不到」变成「扫得到且已尽可能修复」,
是真实基线而非退步。已在 SECURITY.md 中作为例外项完整披露,并给出使用建议:
仅从可信来源获取 checkpoint;加载来源不明的权重时显式指定 weights_only=True

验证

检查 结果
pip install --dry-run -r requirements.txt ✅ 解析通过,无版本冲突
声明下限经 OSV 复查 ✅ numpy / tqdm / jinja2 / requests / certifi / idna / urllib3 / setuptools / tree-sitter / prettytable 均为 0 条
许可证经 PyPI 元数据核查 ✅ 无 GPL/AGPL/LGPL;仅 certifitqdm 为 MPL-2.0(弱 copyleft,与 MIT 兼容)

附带交付

文件 对应指标
THIRD-PARTY-NOTICES.md 许可证清单、MPL-2.0 组件保留义务、依赖准入白名单
sbom.json 「SBOM 完备性」——CycloneDX 1.5,22 个组件
SECURITY.md 「漏洞响应时效」「私有漏洞报告渠道完备性」,含残余风险披露与变更验证步骤
README(中英文) 补充 pip install -r requirements.txt,说明与 env-hedgecode.yaml 的分工

未处理

社区影响力(关注度/派生数/使用度)与项目成熟度(发布频次/贡献者/PR/Issue)
共 8 项未达标,均为社区运营与协作流程指标,无法通过代码变更改善。

likedislike
合并受阻