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
由于 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"] })
参考¶
Auth0 博客:“None” 算法介绍.
常见漏洞枚举:CWE-347.