openfire鉴权绕过漏洞原理解析

渗透技巧 1年前 (2023) admin
579 0 0

Openfire是根据开放源 Apache 许可获得许可的实时协作(RTC)服务器。它使用唯一被广泛采用的用于即时消息的开放协议 XMPP(也称为 Jabber)。Openfire 的设置和管理非常简单,但是却提供了坚实的安全性和性能。

Openfire存在鉴权绕过漏洞,允许未经身份验证的用户在已配置的 Openfire 环境中使用未经身份验证的 Openfire设置环境,以访问为管理用户保留的 Openfire 管理控制台中的受限页面。


#01

分 析

3.10.04.7.4之间的所有版本都受到影响,在4.6.8, 4.7.5, 4.8.0中做了修复。
那么以4.7.4为例,比对一下4.7.5修复的内容:
其一:xmppserver/src/main/webapp/WEB-INF/web.xml
openfire鉴权绕过漏洞原理解析
这实际上是openfire的一个鉴权机制,为了将某些页面,如上图中的登陆页面从鉴权中排除,且为了更灵活而运用了通配符,但也成为了漏洞的利用条件之一,官方在修复中也把配置中的setup-*这一项去除了。
其二:xmppserver/src/main/java/org/jivesoftware/admin/AuthCheckFilter.java
比较大的改动都在这个文件中,主要集中在testURLPassesExclude函数中:
openfire鉴权绕过漏洞原理解析
在鉴权机制中匹配到的是setup/setup-*,满足exclude.endsWith(“*”),同时url不包含..或者%2e那么就返回true,此时回到doFilter
openfire鉴权绕过漏洞原理解析
true后就break掉了,也就意味着这一路径不需要经过鉴权验证。
openfire鉴权绕过漏洞原理解析
对于漏洞的修复也是比较简单,直接进行一层url解码。
对于..%2e的绕过方式如下:
/setup/setup-s/%u002e%u002e/%u002e%u002e/log.jsp
采用unicode uri替代原本的utf-8,即..=>%u002e来完成绕过。
openfire采用内置的Jetty作为Web服务器,带着%u002euri进入JettyJetty支持对此类unicode uri的解析,因此转为..,成功绕过访问到log.jsp
openfire鉴权绕过漏洞原理解析

#02

同类漏洞

从官方的修复角度来看其实能找到类似的漏洞,官方的修复历程为:
CVE-2008-6508
Poc:
/setup/setup-/../../log.jsp
随后官方就修复了..绕过鉴权,通过添加一层验证,也就是后来被绕过的testURLPassesExclude来对传入的url验证是否含有..
openfire鉴权绕过漏洞原理解析
与此同时也将通配符这一特性加入鉴权机制中:
openfire鉴权绕过漏洞原理解析
之后官方又添加了对应%2e的验证,然后就出现了现在最新的%u002e的绕过方案,与之类似的还有Eclipse Jetty
CVE-2021-28164中可以使用:
/%2e/WEB-INF/web.xml
来读取web.xml,官方在修复后同样的被绕过的,貌似是分析官方修复补丁时捡漏的一处漏洞,也是采用unicode uri的方式bypass
/%u002e/WEB-INF/web.xml
而在路径放行上,即配置文件中对于setup路径或者是静态文件放行,类似于weblogic console权限绕过,weblogicopenfire类似的,在配置文件中写了鉴权机制,对于cssimages等都不需要鉴权,也同样导致了权限绕过。
/console/css/%252e%252e%252fconsole.portal

#03

修复

那么官方给出的修复建议有如下:
1.严格限制访问网络
2.修改配置文件
<filter>
    <filter-name>AuthCheck</filter-name>
    <filter-class>org.jivesoftware.admin.AuthCheckFilter</filter-class>
    <init-param>
        <param-name>excludes</param-name>
        <param-value>
            login.jsp,index.jsp?logout=true,setup/index.jsp,setup/setup-*,.gif,.png,error-serverdown.jsp,loginToken.jsp
        </param-value>
    </init-param>
</filter>

3.修改openfire.xml使控制台仅回环地址访问

<?xml version="1.0" encoding="UTF-8"?>
<jive>
  <adminConsole>
      <interface>127.0.0.1</interface>
      <port>9090</port>
      <securePort>9091</securePort>
  </adminConsole>

4.使用AuthFilterSanitizer插件


#04

reference

[1] Administration Console authentication bypass

https://github.com/igniterealtime/Openfire/security/advisories/GHSA-gw42-f939-fhvm

[2] (CVE-2021-28164/CVE-2021-34429)Eclipse Jetty WEB-INF敏感信息泄露漏洞分析

https://blog.csdn.net/weixin_50464560/article/details/120608463


       

原文始发于微信公众号(山石网科安全技术研究院):openfire鉴权绕过漏洞原理解析

版权声明:admin 发表于 2023年6月13日 上午10:54。
转载请注明:openfire鉴权绕过漏洞原理解析 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...