type
Post
status
Published
date
Dec 14, 2022
slug
summary
tags
漏洞
业务安全
category
漏洞分析
icon
password
Property
Feb 9, 2023 07:25 AM

漏洞描述

在 Apache ShenYu Admin 中发现了一个缺陷。ShenyuAdminBootstrap 中 JWT 的错误使用允许攻击者绕过身份验证。

影响版本

Apache ShenYu 2.3.0 | 2.4.0

漏洞复现

本次漏洞环境搭建采用官方的docker镜像
> docker pull apache/shenyu-admin:2.4.0 > docker run -d -p 9095:9095 apache/shenyu-admin:2.4.0
利用脚本如下:
第三方库要求是PyJWT的jwt,这里对脚本进行了修改,32行的
token = jwt.encode(payload=payload, key=salt,algorithm='HS256', headers=headers).decode('utf-8') #改为 token = jwt.encode(payload=payload, key=salt, algorithm='HS256', headers=headers)
利用效果如图:
notion image
得到admin的密码,尝试登陆
notion image

漏洞成因

下载2.4.0源码以以下方式进行搭建:https://blog.csdn.net/weixin_45847167/article/details/118485959开始分析,漏洞描述里提到是admin的权限校验被绕过所以先去看 shenyu-admin 的模块部分代码
notion image
查看 pom.xml 中发现使用了 shiro ,所以先去看一下 shiro 部分实现的逻辑代码来到org.apache.shenyu.admin.shiro.config,这里创建了 Filter 并添加到 FilterMap 里面,并且设置的路径是,这里创建 Filter 是为了让 jwt 来进行权限的管理
notion image
跟进查看 StatelessAuthFilter ,获取请求包中的 X-Access-Token 头里面的token 数据
notion image
会将获取到的 token 调用 subject.login
notion image
接下来就会来到org.apache.shenyu.admin.shiro.config#doGetAuthenticationInfo,可以看到压根没有对 jwt 的 key 进行校验
notion image
而在 2.4.1 版本中进行了修复 增加了对 key 的校验
notion image
并且修复了默认key的情况
notion image
MySQL JDBC XXE漏洞(CVE-2021-2471)ManageEngine OpManager 信息泄露漏洞(CVE-2020-11946)