CVE-2022-26134 Atlassian Confluence远程代码执行漏洞 | 附自查工具

admin 2022年6月6日08:58:47评论327 views字数 7979阅读26分35秒阅读模式


♫. ♪ ~ ♬..♩~ ♫. ♪..♩~ ♫. ♪ ~ ♬..♩..♩~ ♫. ♪ ~ ♬..♩..♩~ ♫. ♪ ~ ♬..♩
♫. ♪ ~ ♬..♩~ ♫. ♪..♩~ ♫. ♪ ~ ♬..♩..♩~ ♫. ♪ ~ ♬..♩..♩~ ♫. ♪ ~ ♬..♩

点击蓝字关注

♫. ♪ ~ ♬..♩~ ♫. ♪..♩~ ♫. ♪ ~ ♬..♩..♩~ ♫. ♪ ~ ♬..♩..♩~ ♫. ♪ ~ ♬..♩
♫. ♪ ~ ♬..♩~ ♫. ♪..♩~ ♫. ♪ ~ ♬..♩..♩~ ♫. ♪ ~ ♬..♩..♩~ ♫. ♪ ~ ♬..♩

CVE-2022-26134

Atlassian Confluence 未经身份验证的远程 OGNL 注入漏洞

摘要

Atlassian Confluence是一个专业的企业知识管理与协同软件,主要用于公司内员工创建知识库并建立知识管理流程,也可以用于构建企业wiki。

2022 年 6 月 2 日,Atlassian 发布了针对 CVE-2022-26134 的安全公告,这是 Confluence Server 和 Confluence Data Center 中的一个严重的未经身份验证的远程代码执行漏洞。该漏洞在 6 月 2 日发布时未修补。截至 6 月 3 日,补丁和临时解决方法均可用。

在受影响的 Confluence Server 和 Data Center 版本中,存在一个 OGNL 注入漏洞,该漏洞允许未经身份验证的攻击者在 Confluence Server 或 Data Center 实例上执行任意代码。


评级

该漏洞存在在野利用,且利用方式较为简单。面向互联网开放的系统存在被攻击的可能。

漏洞评级高危

CVSS评分10.0

CVE-2022-26134 Atlassian Confluence远程代码执行漏洞 | 附自查工具


影响范围

受影响版本:

1.3.0 <= Confluence Server and Data Center < 7.4.17

7.13.0 <= Confluence Server and Data Center < 7.13.7

7.14.0 <= Confluence Server and Data Center < 7.14.3

7.15.0 <= Confluence Server and Data Center < 7.15.2

7.16.0 <= Confluence Server and Data Center < 7.16.4

7.17.0 <= Confluence Server and Data Center < 7.17.4

7.18.0 <= Confluence Server and Data Center < 7.18.1


不受影响版本:

Confluence Server and Data Center 7.4.17

Confluence Server and Data Center 7.13.7

Confluence Server and Data Center 7.14.3

Confluence Server and Data Center 7.15.2

Confluence Server and Data Center 7.16.4

Confluence Server and Data Center 7.17.4

Confluence Server and Data Center 7.18.1



漏洞分析

调用堆栈演示了从HttpServlet.service到OgnlValueStack.findValue及之后的OGNL注入。

at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:171)at ognl.SimpleNode.getValue(SimpleNode.java:193)at ognl.Ognl.getValue(Ognl.java:333)at ognl.Ognl.getValue(Ognl.java:310)Aat com.opensymphony.xwork.util.OgnlValueStack.findValue(OgnlValueStack.java:141)at com.opensymphony.xwork.util.TextParseUtil.translateVariables(TextParseUtil.java:39)at com.opensymphony.xwork.ActionChainResult.execute(ActionChainResult.java:95)at com.opensymphony.xwork.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:263)at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:187)at com.atlassian.confluence.xwork.FlashScopeInterceptor.intercept(FlashScopeInterceptor.java:21)at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)at com.atlassian.confluence.core.actions.LastModifiedInterceptor.intercept(LastModifiedInterceptor.java:27)at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)at com.atlassian.confluence.core.ConfluenceAutowireInterceptor.intercept(ConfluenceAutowireInterceptor.java:44)at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)at com.atlassian.xwork.interceptors.TransactionalInvocation.invokeAndHandleExceptions(TransactionalInvocation.java:61)at com.atlassian.xwork.interceptors.TransactionalInvocation.invokeInTransaction(TransactionalInvocation.java:51)at com.atlassian.xwork.interceptors.XWorkTransactionInterceptor.intercept(XWorkTransactionInterceptor.java:50)at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)at com.atlassian.confluence.xwork.SetupIncompleteInterceptor.intercept(SetupIncompleteInterceptor.java:61)at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)at com.atlassian.confluence.security.interceptors.SecurityHeadersInterceptor.intercept(SecurityHeadersInterceptor.java:26)at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:115)at com.atlassian.confluence.servlet.ConfluenceServletDispatcher.serviceAction(ConfluenceServletDispatcher.java:56)at com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:199)at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)


OgnlValueStack findValue(str)是很重要的,因为它是OGNL表达式注入的起点。正如以上调用堆栈中看到的,当漏洞被利用时,TextParseUtil.class调用了OgnlValueStack.findValue。


public class TextParseUtil {    public static String translateVariables(String expression, OgnlValueStack stack) {        StringBuilder sb = new StringBuilder();        Pattern p = Pattern.compile("\$\{([^}]*)\}");        Matcher m = p.matcher(expression);        int previous = 0;        while (m.find()) {            String str1, g = m.group(1);            int start = m.start();            try {                Object o = stack.findValue(g);                str1 = (o == null) ? "" : o.toString();            } catch (Exception ignored) {                str1 = "";            }             sb.append(expression.substring(previous, start)).append(str1);            previous = m.end();        }         if (previous < expression.length())            sb.append(expression.substring(previous));         return sb.toString();    }}


ActionChainResult.class利用this.namespace作为提供的表达式调用了TextParseUtil.translateVariables:


public void execute(ActionInvocation invocation) throws Exception {    if (this.namespace == null)        this.namespace = invocation.getProxy().getNamespace();     OgnlValueStack stack = ActionContext.getContext().getValueStack();    String finalNamespace = TextParseUtil.translateVariables(this.namespace, stack);    String finalActionName = TextParseUtil.translateVariables(this.actionName, stack);


其中,namespace是从请求url的字符串com.opensymphony.webwork.dispatcher.ServletDispatcher.getNamespaceFromServletPath中创建的。


public static String getNamespaceFromServletPath(String servletPath) {    servletPath = servletPath.substring(0, servletPath.lastIndexOf("/"));    return servletPath;}


结果是,攻击者提供的URI将被转换为namespace,然后该namespace将被转换为OGNL表达式进行计算。在较高级别上,这与CVE-2018-11776非常相似,即Apache Struts2命名空间OGNL注入漏洞。


漏洞复现:


执行系统命令

CVE-2022-26134 Atlassian Confluence远程代码执行漏洞 | 附自查工具


反弹shell

CVE-2022-26134 Atlassian Confluence远程代码执行漏洞 | 附自查工具


批量检测

CVE-2022-26134 Atlassian Confluence远程代码执行漏洞 | 附自查工具


企业自检自查工具后台回复CVE-2022-26134获取


修复建议

1、安装补丁

目前厂商已发布修复版本,请升级到以下版本:

Atlassian Confluence Server and Data Center 7.4.17

Atlassian Confluence Server and Data Center 7.13.7

Atlassian Confluence Server and Data Center 7.14.3

Atlassian Confluence Server and Data Center 7.15.2

Atlassian Confluence Server and Data Center 7.16.4

Atlassian Confluence Server and Data Center 7.17.4

Atlassian Confluence Server and Data Center 7.18.1

详情参考官方说明:

https://confluence.atlassian.com/doc/confluence-security-advisory-2022-06-02-1130377146.html


2、缓解措施

对于 Confluence 7.15.0 - 7.18.0:如果在集群内运行Confluence则需要在每个节点上重复以下过程:

a)关闭Confluence

b)在https://packages.atlassian.com/maven-internal/opensymphony/xwork/1.0.3-atlassian-10/xwork-1.0.3-atlassian-10.jar下载到服务器

c)删除或者将<confluence-install>/confluence/WEB-INF/lib/xwork-1.0.3-atlassian-8.jar 移出Confluence 安装目录

d)将第二步下载的文件复制到<confluence-install>/confluence/WEB-INF/lib/ 目录中

e)检查该文件权限是否和所在目录的其他文件权限一致。

f)启动Confluence

对于 Confluence 7.0.0 - Confluence 7.14.2:如果在集群内运行Confluence则需要在每个节点上重复以下过程:

a)关闭Confluence

b)将以下三个文件下载到服务器

https://packages.atlassian.com/maven-internal/opensymphony/xwork/1.0.3-atlassian-10/xwork-1.0.3-atlassian-10.jar

https://packages.atlassian.com/maven-internal/opensymphony/webwork/2.1.5-atlassian-4/webwork-2.1.5-atlassian-4.jar

https://confluence.atlassian.com/doc/files/1130377146/1137639562/3/1654274890463/CachedConfigurationProvider.class

c)删除或者移出以下路径的文件

<confluence-install>/confluence/WEB-INF/lib/xwork-1.0.3.6.jar

<confluence-install>/confluence/WEB-INF/lib/webwork-2.1.5-atlassian-3.jar

d)将下载的xwork-1.0.3-atlassian-10.jar复制到<confluence-install>/confluence/WEB-INF/lib/

e)将下载的webwork-2.1.5-atlassian-4.jar复制到<confluence-install>/confluence/WEB-INF/lib/

f)检查上述文件权限是否和同一目录的其他文件权限一样。

g)切换到目录<confluence-install>/confluence/WEBINF/classes/com/atlassian/confluence/setup

新建目录webwork

将下载的CachedConfigurationProvider.class复制到<confluence-install>/confluence/WEB-INF/classes/com/atlassian/confluence/setup/webwork目录中

确保复制的文件和新建的目录所有权等权限匹配

h)启动Confluence


声明

本文只用于技术交流,个人学习记录。相关工具只限用于企业内部自检自查,由于使用该工具造成的一切不良后果与本文及作者无关。请谨慎食用。



参考链接:

https://www.rapid7.com/blog/post/2022/06/02/active-exploitation-of-confluence-cve-2022-26134/

https://mp.weixin.qq.com/s/MTvGtHTD3sM2nudueVTD_w

https://confluence.atlassian.com/doc/confluence-security-advisory-2022-06-02-1130377146.html


我知道你  在看  哦


原文始发于微信公众号(401SecNote):CVE-2022-26134 Atlassian Confluence远程代码执行漏洞 | 附自查工具

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月6日08:58:47
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2022-26134 Atlassian Confluence远程代码执行漏洞 | 附自查工具http://cn-sec.com/archives/1090670.html

发表评论

匿名网友 填写信息