(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