Shiro权限绕过漏洞(CVE-2020-1957,CVE-2020-11989、CVE-2020-13933)

一、Apache Shiro

Apache Shiro 是一个强大且易用的Java安全框架,能够用于身份验证、授权、加密和会话管理。

二、Shiro漏洞指纹(部分)

1、在请求包的cookie中有remember字段赋任意值
2、返回包中存在set-Cookie:remeberMe=deleteMe

三、受影响版本

Apache Shiro <1.5.2

四、漏洞原理

Shiro框架通过拦截器功能来实现对用户访问权限的控制和拦截。Shiro中常见的拦截器有anon,authc等拦截器。
1.anon为匿名拦截器,不需要登录就能访问,一般用于静态资源,或者移动端接口
2.authc为登录拦截器,需要登录认证才能访问的资源。
用户可以在Shiro.ini编写匹配URL配置,将会拦截匹配的URL,并执行响应的拦截器。从而实现对URL的访问控制,URL路径表达式通常为ANT格式。如下配置,访问 /index.html主页的时候,Shiro将不会对其进行登录判断,anon拦截器不需要登录就能进行访问。而对于/user/xiaoming 等 /user/xiaogang等接口,authc拦截器将会对其进行登录判断,有登录认证才能访问资源。
[urls] /index.html = anon /user/** = authc
Shiro的URL路径表达式为Ant 格式,路径通配符支持 ? * **
? :匹配一个字符
*:匹配零个或多个字符串
** :匹配路径中的零个或多个路径
其中*表示匹配零个或多个字符串,/*可以匹配/hello,但匹配不到/hello/,因为*通配符无法匹配路径。假设/hello接口设置了authc拦截器,访问/hello将会被进行权限判断,如果请求的URI为/hello/呢,/*URL路径表达式将无法正确匹配,放行。然后进入到spring(Servlet)拦截器,spring中/hello 形式和/hello/形式的URL访问的资源是一样的。(从大佬那搬运过来的)

五、漏洞复现

vulhub靶场

命令:docker-compose up -d  (打开靶机)
命令:docker-compose down(关闭靶机)
命令:docker ps (查看镜像)
命令:docker stop ID (关闭镜像)

Shiro权限绕过漏洞(CVE-2020-1957,CVE-2020-11989、CVE-2020-13933)_第1张图片

点击login需要填写账号密码
Shiro权限绕过漏洞(CVE-2020-1957,CVE-2020-11989、CVE-2020-13933)_第2张图片
而在url中直接添加路径:/xxx/…;/admin/,即可绕过验证
Shiro权限绕过漏洞(CVE-2020-1957,CVE-2020-11989、CVE-2020-13933)_第3张图片

六、url请求绕过过程

CVE-2020-1957
客户端请求URL: /xxx/..;/admin/
Shrio 内部处理得到校验URL为 /xxxx/..,校验通过
SpringBoot 处理 /xxx/..;/admin/ , 最终请求 /admin/, 成功访问了后台请求。

CVE-2020-11989
客户端请求URL: /;/test/admin/page
Shrio 内部处理得到校验URL为/,校验通过
SpringBoot最终请求 /admin/page, 成功访问了后台请求。

CVE-2020-13933
客户端请求URL:/admin/;page
Shrio 内部处理得到校验URL为/admin/,校验通过
SpringBoot最终请求 /admin/;page, 成功访问了后台请求。

七、修复建议

升级到最新版本

你可能感兴趣的:(Shiro权限绕过漏洞)