如果是 Confluence 8.5.3 版本,需要注意一下 jdk 版本需要为 11
0x01 漏洞描述
Atlassian Confluence 是由 Atlassian 开发的企业级协作软件。
2024年1月16日,Atlassian 官方披露 CVE-2023-22527 Atlassian Confluence 模板注入代码执行漏洞。攻击者可在无需登录的情况下构造恶意请求导致远程代码执行。Atlassian 官方评级严重,外界尚未流传相关利用。
0x02 影响版本
影响范围
Atlassian Confluence Data Center and Server 8.0.x
Atlassian Confluence Data Center and Server 8.1.x
Atlassian Confluence Data Center and Server 8.2.x
Atlassian Confluence Data Center and Server 8.3.x
Atlassian Confluence Data Center and Server 8.4.x
Atlassian Confluence Data Center and Server 8.5.0-8.5.3
安全版本
Atlassian Confluence Data Center and Server 8.5.4
Atlassian Confluence Data Center 8.6.0
Atlassian Confluence Data Center 8.7.1
0x03 漏洞分析
diff 分析
加黑了,此处加黑的是 OGNL 节点
下面的是黑名单类,黑名单里面的内容很多,其中有一项为 com.opensymphony.xwork2.ActionContext
,这个类相比起于其他的类看着更奇怪一些
继续看黑名单,甚至给 package 都加了黑
加上之前在 CVE-2023-22522 里面 diff 的经验,是有一个 OGNL Guard 的类的,那么实际上这一个攻击大概率就是通过调 OGNL,通过 AST 的一系列手法最终 RCE,紧接着问题来了,入口呢?
漏洞复现
OGNL 表达式
最简单的入口就是 .vm
的文件,但是有一个前提是使用了 $stack.findValue
或是 $ognl.findValue
,且参数可控。
找了一下有一个文件完美符合我们的需求 confluence/template/aui/text-inline.vm
处理 .vm
接口的 Servlet 为 ConfluenceVelocityServlet
,跟一下对应请求的处理。先用对应通杀请求
label=test\u0027%2b#{7*7}%2b\u0027
跟进,往下走跟进 this.handleRequest()
方法生成模板,通过层层递归,最终从 URI 中拿取对应文件,并匹配
继续往下,最终会来到 org.apache.velocity.runtime.parser.node.SimpleNode#render
方法,这里会根据 OGNL 的节点类型渲染,会循环整个数组