我在同一个项目上运行了 npm audit 和 DepGra —— 这两者各自发现了什么

发布: (2026年3月15日 GMT+8 21:26)
6 分钟阅读
原文: Dev.to

Source: Dev.to

npm audit

npm audit 报告了 10 个漏洞(3 个中等,7 个高危),涉及 8 个包:

PackageVersionAdvisorySeverity
serialize‑javascript6.0.2RCE via RegExp.flagshigh
next15.5.92 advisorieshigh
minimatch3.1.2, 9.0.53 ReDoS advisories eachhigh
flatted3.3.3Unbounded recursion DoShigh
rollup4.54.0Arbitrary file write via path traversalhigh
ai4.3.19Filetype whitelist bypassmoderate
jsondiffpatch0.6.0XSS via HtmlFormattermoderate
ajv6.12.6, 8.17.1ReDoS with $data optionmoderate

npm audit 还会指示是否有可用的修复以及是否需要破坏性更改——这些信息是 DepGra 所不提供的。

DepGra 扫描

DepGra 在 6.5 秒 内扫描了相同的 package-lock.json,发现 10 个包中共 12 条唯一 advisory:

严重性GHSA ID受影响的包
CRITICALGHSA-5c6j-r48x-rmvqserialize-javascript@6.0.2
HIGHGHSA-23c5-xmqv-rm74minimatch@3.1.2, minimatch@9.0.5
HIGHGHSA-25h7-pfq9-p65fflatted@3.3.3
HIGHGHSA-3ppc-4f35-3m26minimatch@3.1.2, minimatch@9.0.5
HIGHGHSA-7r86-cg39-jmmjminimatch@3.1.2, minimatch@9.0.5
HIGHGHSA-h25m-26qc-wcjfnext@15.5.9
HIGHGHSA-mw96-cpmx-2vgcrollup@4.54.0
MEDIUMGHSA-33vc-wfww-vjfvjsondiffpatch@0.6.0
MEDIUMGHSA-5f7q-jpqc-wp7hnext@15.5.9
MEDIUMGHSA-9g9p-9gw9-jx7fnext@15.5.9
MEDIUMGHSA-rwvc-j5jr-mgvhai@4.3.19
UNKNOWNGHSA-2g4f-4pwh-qvx6ajv@6.12.6, ajv@8.17.1

npm audit 报告的 11 条 advisory 全部出现在 DepGra 的结果中,另有一条额外的 advisory

  • GHSA-5f7q-jpqc-wp7h (CVE‑2025‑59472)Next.js 通过 PPR 恢复端点导致的无限内存消耗(发布于 2026‑01‑28)。此 advisory 已在 OSV.dev(DepGra 的数据来源)中出现,但尚未进入 npm audit 使用的 GitHub Advisory Database。

差异原因

  • 数据来源:DepGra 查询 OSV.dev,该平台聚合了多个漏洞信息源。npm audit 查询 GitHub Advisory Database。两者的更新时间不同会导致结果不一致。
  • 严重性评分npm auditserialize-javascript 归类为 high,而 DepGra 读取完整的 CVSS 向量后评为 critical
  • 计数方法npm audit 按每个受影响的包实例计数;DepGra 按唯一 CVE ID 计数。

Source:

图形洞察

在将 DepGra 扫描加载到其图形视图时,会显现出两个模式:

  1. Minimatch 作为瓶颈
    扁平列表显示 minimatch 有三个高危建议。图形揭示 minimatch@3.1.2 是多个广泛使用的包(@sentry/node@typescript-eslint/typescript-estreeglob)的传递依赖。其 影响范围 因此比单纯的严重性提示更大。

  2. 通向 serialize-javascript 的多条风险路径
    扁平列表只列出一项,但图形显示了两条不同的依赖链:

    • copy-webpack-plugin → serialize-javascript@6.0.2
    • terser-webpack-plugin → serialize-javascript@6.0.2

    两条路径都指向 关键的 RCE 漏洞,凸显了可视化拓扑结构而非仅依赖手动 npm ls 分析的优势。

技术栈

  • 解析器: package-lock.json, Cargo.lock, poetry.lock, requirements.txt, go.mod
  • 漏洞来源: OSV.dev 批量 API(一次请求获取所有包,随后进行详细抓取)
  • 存储与分析: SQLite + NetworkX(中心性评分,路径查找)
  • API: Flask(REST)
  • 前端: Svelte + Cytoscape.js(图形渲染)
  • 布局算法: 有向无环图(DAG)布局的拓扑排序 – O(V + E),高效处理 > 1,300 个节点
  • Python requirements.txt 处理: 通过 PyPI API 解析传递依赖(因为锁文件不可用)

安装与使用

# Clone the repository
git clone https://github.com/KPCOFGS/depgra
cd depgra

# Backend setup
cd backend
uv venv .venv
source .venv/bin/activate
uv pip install -r requirements.txt
cd ..

# Frontend setup
cd frontend
npm install
npm run build
cd ..

# Run the server
python run.py
# Open http://127.0.0.1:5000

CLI 替代方案

# Scan a lockfile
python run.py scan path/to/package-lock.json

# Scan a requirements file and fail on HIGH severity or above
python run.py scan requirements.txt --fail-on HIGH

Limitations

  • No auto‑remediation: DepGra 不会建议升级版本或创建修复的 pull request(不同于 npm audit fix)。
  • Scope: 仅专注于依赖漏洞可视化——不进行容器扫描、许可证合规或机密信息检测。
  • Severity variance: 分类来源于 OSV.dev,可能与其他工具(例如 Snyk、npm audit)报告的结果不同。
  • Large graphs: 当可视化的包超过 1,000 个时,图形会变得密集;仍然可用,但不如小图整洁。

未来方向

  • SBOM 导出(CycloneDX / SPDX)
  • 自动化修复建议(解决 CVE 的最低版本升级)
  • GitHub Action 用于 CI/CD 集成

该项目采用 MIT 许可证,欢迎反馈。

0 浏览
Back to Blog

相关文章

阅读更多 »

关于 JavaScript 的简介

介绍 在今天的课堂上,我学习了 JavaScript 的简短介绍,所以我将在这篇博客中分享一些关于 JavaScript 的事实。什么是 JavaScript?JavaScr...