CVE-2023-32315 openfire 认证绕过漏洞
漏洞信息
漏洞名称:Openfire 管理后台认证绕过漏洞复现
应用介绍:Openfire 是免费的、开源的、基于可拓展通讯和表示协议 ( XMPP )、采用Java编程语言开发的实时协作服务器。Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器甚至可支持上万并发用户。
影响版本:
-
3.10.0 <= Openfire < 4.6.8
-
4.7.0 <= Openfire 4.7.x < 4.7.5
漏洞介绍:Openfire的Web管理后台存在一处目录穿越漏洞,这将允许攻击者绕过权限校验访问所有受限页面。我们可以借此漏洞未授权创建管理员用户,并结合后台自定义插件的上传,达到 RCE。
搜索语法:
- icon_hash="1211608009"
- body="jive-loginVersion"
- title="Openfire Admin Console"
- title="Openfire 管理"
- title="Openfire Console Admin"
环境搭建
https://github.com/igniterealtime/Openfire/releases/download/v4.7.4/openfire_4_7_4_x64.exe
漏洞分析
Openfire 管理后台曾经爆出过一次 CVE-2008-6508,该漏洞也是路径穿越漏洞,随后官方对其进行修复,修复方法为检测路径中是否有 .. 和 %2e ( .. 的 url 编码 ),但由于Openfire内置的 Jetty Web 服务器升级支持对 UTF-16 ( %u002e ) 这类非标准 unicode uri 的解析,从而使路径穿越重新出现。
源码:https://github.com/igniterealtime/Openfire/releases/download/v4.7.4/openfire_4_7_4.zip
先看 web.xml 中的过滤器:xmppserver/src/main/webapp/WEB-INF/web.xml
定位过滤器位置,查看器 doFilter 函数:org/jivesoftware/admin/AuthCheckFilter.java
它有一个对于 excludes的判断,就是判断 URL 是否是后台过滤器的白名单,如果是那就不进行后面匹配,跟进具体的实现:
可以看到它第一个判断中,对应有 *存在的白名单规则,截取路径部分,然后判断其中是否包含 .. 和 %2e,如果都不存在则返回 true 然后就会绕过后面的权限校验。
上面说过器内置服务器可以解析 UTF-16 这类字符,那么就可以把 ../换成 %u002e%u002e/ 就可以再次进行路径穿越。
那么只要使用 setup/setup-* 加上 %u002e%u002e/ 就可以实现路径穿越。
就像这样:/setup/setup-s/%u002e%u002e/%u002e%u002e/log.jsp
漏洞利用
利用思路为:
-
创建后台用户登录后台
-
上传插件 getshell
创建后台用户:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
发现还需要一个 csrf 和 JSESSIONID,这两个东西直接访问个页面就会回显:
获取这 2 个东西后,即可创建用户。不过后面发现没有这两个也能创建用户,但是貌似不太稳定?第一次直接成功,但后面几次都失败了,还是加上稳一点。
密码是 123
漏洞修复
看了一下过滤器,发现直接把有 *的白名单给删除了:
然后 testURLPassesExclude 这里,对 URL 进行 utf-8 解码,这样就解决了上面的因为编码问题导致绕过:








