(CVE-2023-22527)Atlassian Confluence - Remote Code Execution

(CVE-2023-22527)Atlassian Confluence - Remote Code Execution

漏洞描述

Atlassian Confluence 存在模板注入代码执行漏洞,攻击者可构造恶意请求触发模板注入进而造成远程命令执行。

影响版本

停止更新的各个版本以及:
8.4.0 <= Confluence Data Center and Server <= 8.4.4
8.5.0 <= Confluence Data Center and Server <= 8.5.3
8.6.0 <= Confluence Data Center <= 8.6.1

漏洞分析

还是老样子,diff一下代码发现confluence的一些修改,有一个删除了的文件引起注意:

删除了:

ConfluenceStrutsUtil继承自VelocityStrutsUtil:

VelocityStrutsUtil又继承自StrutsUtil,看到这里推测velocity模板注入。
具体应该和前几次有几分相似,velocity解析导致的ognl表达式执行,于是可以去看vm文件。
再看vm文件的时候,犯了一个很大的错误,我在重置密码这里看了好久,但是始终是没有结果,它是从action里面读取的变量,所以应该不存在漏洞了,通过vm文件进行访问的时候并不能设置这个值。

又正值年终总结正好很忙,于是就暂且搁置。
后来发现GitHub上多了一个项目https://github.com/Sudistark/patch-diff-CVE-2023-22527,里面有所有vm的信息,于是就是直接搜一下:

于是我尝试一些其他接口,但是都是一无所获,这期间想让Z3教我,得到的回复是:

最后在text-inline.vm中会调用到findvalue方法从而造成表达式的执行:

试一下经典poc:

在StrutsUtil里面果然是找到了这个内容,太长了分开截:

后面就会按照模板定义的走到findvalue

到这里就执行了:

然后通过getText方法取值,这里发现已经计算完毕了:

那么这也就通过velocity造成了Ognl表达式执行漏洞。

关于RCE

这块可是焦头烂额,尝试构造了几个都没成功执行命令(弹计算器),直到今天看到P牛的vulhub更新了,才想起用回显,这里放下vulhub链接,就不照抄了。
https://github.com/vulhub/vulhub/tree/master/confluence/CVE-2023-22527


(CVE-2023-22527)Atlassian Confluence - Remote Code Execution
http://www.springkill.club/2024/01/23/CVE-2023-22527-Atlassian-Confluence-Remote-Code-Execution/
作者
SpringKill
发布于
2024年1月23日
许可协议