You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何NPM Audit要求降级mssql?jsonwebtoken依赖漏洞排查

为什么npm audit要求降级mssql而非使用最新版本?

我们收到关于jsonwebtoken <= 8.5.1的npm audit警告,官方建议修复方案是升级mssql至7.2.0。但我们执行npm remove mssql卸载后,重新安装最新版本npm i -D mssql,最终安装了9.0.1版本。

然而npm audit仍发出警告,要求安装mssql@7.2.0,这是为什么?


npm audit 输出

$ npm audit --registry=https://registry.npmjs.org/ 

# npm 审计报告

jsonwebtoken  <=8.5.1
严重程度:高
jsonwebtoken不受限制的密钥类型可能导致旧密钥被使用
jsonwebtoken的jwt.verify函数存在不安全输入验证
jsonwebtoken密钥检索函数实现不安全,可能导致RSA到HMAC的可伪造公/私令牌
jsonwebtoken因jwt.verify()默认算法不安全,存在签名验证绕过漏洞
可通过`npm audit fix --force`修复
将安装mssql@7.2.0,这是一个破坏性变更
node_modules/jsonwebtoken
  @azure/msal-node  *
  依赖易受攻击版本的jsonwebtoken
  node_modules/@azure/msal-node
    @azure/identity  >=1.2.0-alpha.20200903.1
    依赖易受攻击版本的@azure/msal-node
    node_modules/@azure/identity
      tedious  >=11.0.9
      依赖易受攻击版本的@azure/identity
      node_modules/tedious
        mssql  >=7.2.1
        依赖易受攻击版本的tedious
        node_modules/mssql

5个漏洞(4个中等,1个高风险)

要解决所有问题(包括破坏性变更),请运行:
  npm audit fix --force

依赖关系链

  • "mssql": "9.0.1"
    • "tedious": "^15.0.1"(实际安装15.1.2)
      • "@azure/identity": "^2.0.4"
        • "@azure/msal-node": "^1.10.0"
          • "jsonwebtoken": "^8.5.1"

我们没有其他直接依赖jsonwebtoken的库。


package.json 内容

{
  "dependencies": {
    "express": "^4.18.1",
    "flatted": "^3.1.1",
    "http-proxy-middleware": "^2.0.6",
    "log-timestamp": "^0.3.0",
    "node-fetch": "^2.6.1",
    "nodemon": "^2.0.20",
    "sha1-hex": "^1.0.0"
  },
  "devDependencies": {
    "@types/jest": "^26.0.3",
    "eslint": "^7.7.0",
    "eslint-config-strongloop": "^2.1.0",
    "jest": "^28.1.3",
    "jest-junit": "^8.0.0",
    "mssql": "^9.0.1"
  }
}

原因分析

npm audit的修复建议是基于现有依赖树中能解决漏洞的最低版本变更,而非优先推荐最新版本:

  1. 从依赖链可见,mssql@9.0.1依赖的tedious@15.x版本,会引入@azure/identity@2.x,进而依赖@azure/msal-node@1.10.x,最终带入易受攻击的jsonwebtoken@8.5.1。
  2. npm audit检测到,mssql@7.2.0依赖的tedious版本更低,其依赖树中不存在这条带漏洞的链路。
  3. npm自动修复逻辑会选择能解决问题的最小版本变更路径,哪怕是降级操作。它不会主动判断最新版本是否有其他未被收录的修复方案,仅依据已有的漏洞数据库信息给出建议。

可行解决方案

  • 强制指定安全版本:在package.json中添加resolutions字段(npm 8+支持),强制将jsonwebtoken锁定到安全版本(如^9.0.0):
    "resolutions": {
      "jsonwebtoken": "^9.0.0"
    }
    
    执行npm install即可应用该强制解析。
  • 等待上游更新:关注@azure/msal-node、@azure/identity或tedious的版本更新,当它们升级jsonwebtoken到安全版本后,再升级mssql就能自动解决漏洞。
  • 忽略漏洞(不推荐):若确认该漏洞在项目中无实际风险,可执行npm audit --ignore=GHSA-8cf7-32gw-wr33,GHSA-27h2-hvpr-p74q,GHSA-hjrf-2m68-5959,GHSA-qwph-4952-7xr6忽略特定漏洞,但这会留存安全隐患。

内容的提问来源于stack exchange,提问作者Marc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:40:23