Jwt Security Review

securityskills/skills/web-appsec/auth/jwt-security-review

作者 securityskillsb2b6b5200ee91a249816df209a0b89ff01ae450a无许可证收录于 2026年10月9日更新于 2026年10月9日

Audit JSON Web Token implementations for algorithm confusion, weak secrets, missing validation, and token lifecycle flaws. Use when a codebase or API uses JWTs for auth.

仅含说明Security
AI 生成的概览

审计 JWT 认证实现,检查算法混淆、弱密钥、声明校验缺失和令牌生命周期缺陷。

功能
指导对 JSON Web Token 认证进行端到端安全审查,涵盖算法处理、密钥与密钥强度、声明校验以及令牌生命周期。它列出具体攻击检查项,例如 alg:none 令牌、RS256 转 HS256 混淆、jku/x5u 与 kid 注入,以及刷新令牌重放。产出包含脱敏令牌样本、受影响代码路径和逐项修复建议的发现报告。
适用场景
适用于代码库或 API 使用 JWT 进行认证并需要安全审计的场景。适合在发布前或怀疑存在缺陷时,审查令牌签发、验证以及刷新或吊销流程。
运行要求
仅为说明文档,不含脚本或附带资源。需要能够访问待审查的 JWT 相关源代码和配置。

JWT Security Review

Review JWT-based authentication end to end.

Review Areas

Algorithm Handling

  • Pin the expected algorithm server-side; reject alg: none outright
  • RS256→HS256 confusion: if the server verifies HMAC using the public key as the secret, an attacker can forge tokens. Confirm verification uses the correct key type per algorithm
  • Watch for jku/x5u header injection where the server fetches keys from an attacker-controllable URL
  • kid injection: path traversal or SQL/Command injection in key lookup

Key and Secret Strength

  • HS256 secrets: ≥32 bytes of entropy, not from wordlists (jwt-tools crack mode)
  • Keys rotated; old keys revoked rather than just unused

Claims Validation

  • exp and nbf enforced, clock skew bounded
  • iss and aud validated against expected values
  • Reject tokens with unexpected/extra privileged claims (e.g., admin: true) — parse then validate allowlist
  • Don't trust client-controlled role/uid claims if a server-side lookup exists

Token Lifecycle

  • Refresh tokens: rotation with reuse detection; stored hashed server-side
  • Revocation path exists for logout/password change/admin force-logout
  • Access tokens short-lived (≤15 min); no long-lived bearer tokens
  • Tokens not persisted in localStorage if XSS surface exists; prefer httpOnly cookies with CSRF protection
  • sub is stable and unambiguous (user ID, not email that can change)

Common Code Smells

jwt.decode(token)            // decode ≠ verify: signature never checkedjwt.verify(token, key)       // no algorithms option pinnedjwt.verify(token, key, { algorithms: ['*'] })

Test Cases

  1. Remove the signature; send alg: none token
  2. Flip alg to HS256 signed with the public key
  3. Expired/missing exp, wrong iss/aud
  4. Tampered claims with valid signature (e.g., escalate role)
  5. Replay a rotated refresh token — should invalidate the family

Output

Findings with token samples (redacted), affected code paths, and remediation per issue.

来源与署名

来源:securityskills/skills位于web-appsec/auth/jwt-security-review提交b2b6b52

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架