演示针对 JSON Web Token (JWT) 库的算法混淆攻击。JWT 通常用于 Cookie 中认证用户会话,因此该攻击至关重要。使用 Node 模块 [email protected] 来展示此漏洞。
该项目也是一次愉快的 vibe coding 活动,因为前端(除 API 调用外)几乎完全由 LLM 完成。
JWT 的格式如下:
b64(header).b64(payload).b64(signature)
在我们的场景中:
header = (algorithm, type)
payload = (username, role)
在当时,各种 JWT 库可以使用某种算法签名,但并未强制校验算法,而是依赖 JWT 头部的内容,从而让用户自行决定加密方式。这导致了许多利用方式,但本例中使用的是以下方法:
在登录页面以任意用户身份进行认证。您需要先注册。
进入首页后,有一个按钮只有在拥有有效管理员会话时才可点击。然后您需要运行漏洞利用程序来伪造这个 JWT。
最后,将本地存储中的原始 JWT 替换为伪造的 JWT,刷新页面后该按钮应变为可点击状态,FLAG 就是您的了!