CodeQL 文档

JWT 缺少密钥或公钥验证

ID: js/jwt-missing-verification
Kind: problem
Security severity: 7.0
Severity: warning
Precision: high
Tags:
   - security
   - external/cwe/cwe-347
Query suites:
   - javascript-code-scanning.qls
   - javascript-security-extended.qls
   - javascript-security-and-quality.qls

点击查看 CodeQL 代码库中的查询

由于 None 算法,解码 JSON Web Token (JWT) 的应用程序可能配置错误。

通过使用假值而不是加密密钥或密钥调用 verify() 函数来选择 None 算法。None 算法禁用 JWT 负载的完整性强制,并可能允许恶意行为者对 JWT 负载进行意外更改,从而导致特权提升等严重的安全问题。

建议

调用 verify() 函数应使用加密密钥或密钥来解码 JWT 负载。

示例

在以下示例中,false 用于禁用 JWT 负载的完整性强制。这可能允许恶意行为者更改 JWT 负载。

const jwt = require("jsonwebtoken");

const secret = "my-secret-key";

var token = jwt.sign({ foo: 'bar' }, secret, { algorithm: "none" })
jwt.verify(token, false, { algorithms: ["HS256", "none"] })

以下代码通过使用加密密钥或密钥来解码 JWT 负载来解决此问题。

const jwt = require("jsonwebtoken");

const secret = "my-secret-key";

var token = jwt.sign({ foo: 'bar' }, secret, { algorithm: "HS256" }) 
jwt.verify(token, secret, { algorithms: ["HS256", "none"] })

参考

  • ©GitHub, Inc.
  • 条款
  • 隐私