Apache Shiro 认证绕过漏洞 CVE-2020-1957
1. 漏洞描述
Apache Shiro 1.5.2之前版本中存在安全漏洞。攻击者可借助特制的请求利用该漏洞绕过身份验证。 Shiro框架通过拦截器功能来对用户访问权限进行控制,如anon, authc等拦截器。anon为匿名拦截器,不需要登录即可访问;authc为登录拦截器,需要登录才可以访问。可以通过构造恶意的URL进行越权实现未授权访问。
2.环境搭建
之前已经搭建过vulhub环境,直接进入vulhub/shiro/CVE-2020-1957目录下,执行如下命令启动环境。
docker-compose up -d
如图环境启动成功,访问查看页面 说明
该环境对url的配置如下
@Bean
public ShiroFilterChainDefinition shiroFilterChainDefinition() {
DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition();
chainDefinition.addPathDefinition("/login.html", "authc"); // need to accept POSTs from the login form
chainDefinition.addPathDefinition("/logout", "logout");
chainDefinition.addPathDefinition("/admin/**", "authc");
return chainDefinition;
}
Shiro的URL路径表达式为Ant 格式,路径通配符支持 ? * ** 。 ?:匹配一个字符 *:匹配零个或多个字符串 **:匹配路径中的零个或多个路径
而shiro对访问的处理过程为:先获取的url,然后会判断分号是否存在,如果存在就会把后面的删除,进入shiro匹配,匹配不上默认放行,之后Spring web对路径进行规范化从而可以绕过登录访问资源
3.漏洞复现
请求admin然后使用brup进行抓包拦截 发现跳转到了登陆页面,然后构造url访问admin 成功访问到管理页面
shiro对访问的处理过程分解开为 1)客户端请求URL: /html;/…/admin/ 2)Shrio 内部处理得到校验URL为 /html;校验通过 3)SpringBoot 处理 /html;/…/admin/ , 最终请求 /admin/, 成功访问了后台请求。
漏洞POC:构造恶意请求/html;/…/admin/,即可绕过权限校验,访问到管理页面。
说明
Shiro的URL路径表达式为Ant格式,路径通配符是* 可以匹配/admin,但是匹配不到/admin/,因为*通配符无法匹配路径。假设/admin接口设置了authc拦截器,访问/admin会进行权限判断,但如果访问的是/admin/,那么将无法正确匹配URL,直接放行,进入到spring拦截器。
补充
而Shiro1.4.2版本绕过权限直接在访问接口时在后面添加/绕过authc拦截器拦截获取资源。如访问/hello/1被拦截跳转到登录界面,添加/,访问/hello/1/就可以绕过登录。
|