概述JWT 广泛应用于 REST API 与 OIDC/OAuth2 等场景。常见攻击点包括:启用 `alg=none`、不严格的签名校验、弱密钥与 `kid` 文件/命令注入、嵌入式 JWK 被不当信任等。本文给出防护要点与工程建议。关键风险`alg=none`:将 Header 的 `alg` 改为 `none` 并省略签名,可导致令牌伪造;必须在服务端禁用并拒绝[参考1,2,5]。`kid` 注入:未校验的 `kid` 被拼接到文件路径或传入不安全函数,可能触发 LFI/RCE;`kid` 仅作为安全查找键,需白名单与严格校验[参考2]。JWK 头部嵌入信任:若允许头部嵌入的 JWK 被直接信任,攻击者可替换为自己的公钥并签名伪造;必须仅信任服务端配置的密钥集合[参考3]。弱密钥/密钥泄露:HMAC 弱密钥易被爆破;私钥泄露导致全面伪造。最佳实践明确签名算法:仅接受固定算法(如 `RS256`/`ES256`),拒绝 `none` 与算法切换;同时在库层禁用 `none` 支持[参考1,2,5]。严格校验签名:校验签名与发行方(`iss`)、受众(`aud`)、过期(`exp`)、唯一标识(`jti`)与不可用时间(`nbf`)[参考4]。安全处理 `kid`:使用白名单映射到密钥仓库,不拼接文件路径、不传入系统命令;避免将 `kid` 直接用于文件读取或数据库查询。支持旋转时确保新旧密钥并存期的安全性[参考2]。JWK/JWKS:仅从可信端点加载并缓存;头部嵌入的 JWK 一律拒绝;验证证书链与签名来源[参考3]。存储与传输:令牌仅包含必要最小信息,不含敏感数据;避免长期有效期;支持主动吊销(黑名单/令牌版本)。参考与验证[参考1]博客园:JWT 认证攻击与 `alg=none` 漏洞演示与修复建议:https://www.cnblogs.com/backlion/p/16699442.html[参考2]博客园:JWT 攻击手册(`kid` 注入场景与防护、签名算法选择):https://www.cnblogs.com/xiaozi/p/12031111.html[参考3]FreeBuf:JWT 安全性分析与嵌入 JWK 信任风险讨论(含 CVE 案例):https://www.freebuf.com/vuls/219056.html[参考4]安全博客:JWT 声明字段与校验清单(`iss/aud/exp/nbf/jti`):https://www.secpulse.com/archives/194478.html[参考5]技术笔记:`alg=none` 漏洞原理与演示与修复建议:https://si1ent.xyz/2020/10/21/JWT安全与实战关键词校验关键词聚焦 JWT 风险与防护,与正文一致。

发表评论 取消回复