用途:在授权安全评估中测试 JWT 库是否接受 alg 头为 none 的令牌,从而绕过签名校验。该漏洞由 Tim McLean 于 2015 年披露,曾影响多语言 JWT 库。
主要能力:捕获合法 JWT 后解码 Header 与 Payload;构造 alg 为 none(含 none、None、NONE、nOnE 等大小写变体)且签名为空的令牌;生成角色提升(如 role=admin)与用户冒充(修改 sub)令牌;批量测试各变体与空签名格式(带尾点、无尾点、最小 base64 签名)对目标端点的响应,判断是否被接受。
使用方式:需目标应用使用 JWT 认证、可拦截修改 HTTP 请求(Burp Suite、mitmproxy)、Python 3.8+ 与 PyJWT,并具备测试授权。流程为:拦截合法令牌;用 base64 与 json 解码分析;用脚本构造伪造令牌;通过 requests 发送 Authorization: Bearer <token> 测试。示例命令:python jwt_none_attack.py <target_url> <original_token>。资料还提及算法混淆(RS256 转 HS256)与 JWK 头注入(CVE-2018-0114)等变体。
适用场景:安全评估、事件响应、计划性安全测试与审计、通过实操验证安全控制。
限制与缓解:仅限拥有或获书面许可的系统,未授权使用违法。防护上应显式指定允许算法(如 algorithms=["HS256"])、要求 exp/iat/sub 等声明并校验过期;检测指标包括日志中出现 alg 为 none 的令牌、空签名段、算法字段突变、同一会话声明被修改、Authorization 头仅含两段 Base64。具体价格、平台支持等信息暂未提供。