Confluence 组件安全概览

  • A+
所属分类:安全闲碎

Confluence 组件安全概览


组件概述




1.   关键词

信息共享、协同编辑、企业内网

2.概述

Confluence是一个企业级的Wiki,它是一个知识管理的工具,通过它可以实现团队成员之间的协作和知识共享,Confluence使用简单,但它强大的编辑和站点管理特征能够帮助团队成员之间共享信息,文档协作,集体讨论。

可用于企业、部门、团队内部进行信息共享和协同编辑。

以上引用于:https://www.codenong.com/cs106243330/

3.使用范围及行业分布

lConfluence是全球流行的Wiki系统,业务涵盖100多个国家或地区。IBM、SAP等之知名企业都使用Confluence构建企业Wiki并向公众开放。

lConfluence被用于广泛地用于项目团队,开发团队,市场销售团队。

l全球共有78158个Confluence开放服务,美国最多,有23002个服务,德国第二,有14385个开放服务,中国第三,有7281个服务,澳大利亚第四,有7959个服务,爱尔兰第五,有2893个服务。全国的开放的Confluence服务中,浙江最多,有3040个服务,北京第二,有1713个服务,上海第三,有532个服务,广东第四,有525个服务。

lShodan :Confluence fofa:app="Confluence"  Zoomeye:app:"Confluence"

4.重点产品特性

Confluence 组件安全概览

一.环境搭建、动态调试




1.下载基础ubuntu镜像

由于官方ubuntu没有一些基本工具,自己commit了一个

docker pull skaydocker/lamp:latest

2.启动 并进入docker 容器进行配置

docker run --name confluence6.13.2 -it -p 8090:8090 -p 10010:10010 skaydocker/lamp:latest /bin/bashker run -p 8090:8090 -p 10010:10010 -it skaydocker/lamp:latest /bin/bash

3.将confluence导入docker镜像

docker cp /root/confluence/atlassian-confluence-6.13.2.tar.gz confluence6.13.2:/opt/tar zxf atlassian-confluence-6.13.0.tar.gzcd atlassian-confluence-6.13.0vim ./confluence/WEB-INF/classes/confluence-init.properties #设置confluence的home目录,这里我设置为#confluence.home=/home/cqq/confluence$ vi ./conf/server.xml

去掉注释

Confluence 组件安全概览

修改启动参数 ./bin/setup.sh

CATALINA_OPTS="-Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=10010 ${CATALINA_OPTS}"  # for debug

4.安装jdk

JAVA_HOME=/usr/java/jdk1.8.0_74JRE_HOME=$JAVA_HOME/jreJAVA_BIN=$JAVA_HOME/binCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/libPATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/binexport JAVA_HOME JRE_HOME PATH CLASSPATH

5.启动

./bin/start-confluence.sh

再启动confluence ./start-confluence.sh

Confluence 组件安全概览

开始安装confluence

参考vulhub步骤  https://github.com/vulhub/vulhub/tree/master/confluence/CVE-2019-3396

Confluence 组件安全概览

6.配置idea

Confluence 组件安全概览

7.将要调试的jar包导入idea

docker cp confluence6.13.2:/opt/atlassian-confluence-6.13.2/confluence/WEB-INF/lib  ~/confluence/libdocker cp confluence6.13.2:/opt/atlassian-confluence-6.13.2/confluence/WEB-INF/atlassian-bundled-plugins  ~/confluence/lib1docker cp confluence6.13.2:/opt/atlassian-confluence-6.13.2/lib

 

 ~/confluence/lib2


Confluence 组件安全概览

8.下断点调试

Confluence 组件安全概览

二.漏洞相关




1.漏洞概览

1.1漏洞列表

注: 只列出高危漏洞  其它漏洞详情见 此处放链接

https://confluence.atlassian.com/doc/confluence-security-advisory-2019-03-20-966660264.html

Confluence 组件安全概览

1.2.漏洞分布与关联

A.分布

默认安装的一些插件存在安全漏洞

B.关联

3394 3395 3396 均是一个地方

1.3.漏洞过去、现在、未来

过去是插件存在漏洞 2020年还未爆出高危漏洞 由于使用量较大,未来还会是安全研究人员重点挖掘的目标,肯定还会出漏洞,应该还是插件问题

2.复现及分析

1.CVE-2020-0000

A.复现

1)任意文件读取

Confluence 组件安全概览

2)结合远程文件包含实现命令执行

Confluence 组件安全概览

B.分析

首先漏洞公告信息获得了Widget Connector组件名称,确认漏洞点,

然后在lib里面寻找相应代码位置comatlassianconfluenceextrawidgetconnector,根据漏洞点来精确的diff,

Confluence 组件安全概览

关键函数

this.sanitizeFields = Collections.unmodifiableList(Arrays.asList(VelocityRenderService.TEMPLATE_PARAM));

而TEMPLATE_PARAM的值就是_template,所以这个补丁就是过滤了外部传入的_template参数,TEMPLATE_PARAM就是模板文件的路径

Confluence 组件安全概览

Confluence 组件安全概览

以上参考于https://paper.seebug.org/884/

模板路径一般是写死,若出现例外,调用了可控的模板,造成模板注入

然后,去应用里找代码对应的功能点

Confluence 组件安全概览


插入参数开始debug

Confluence 组件安全概览


我这里就直接用poc来debug了

POST /rest/tinymce/1/macro/preview HTTP/1.1Host: 192.168.33.128:8090Connection: closeUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3670.0 Safari/537.36Referer: http://192.168.33.128:8090/pages/resumedraft.action?draftId=786457&draftShareId=056b55bc-fc4a-487b-b1e1-8f673f280c23&Content-Type: application/json; charset=utf-8Content-Length: 170{"contentId":"786457","macro":{"name":"widget","body":"","params":{"url":"https://www.viddler.com/v/23464dc5","width":"1000","height":"1000","_template":"../web.xml"}}}

我们第一个断点下到这里render:31, DefaultVelocityRenderService  可以看到_template取出来赋值给template,其他传递进来的参数取出来经过判断之后放入到contextMap,调用getRenderedTemplate函数,也就是调用VelocityUtils.getRenderedTemplate。

Confluence 组件安全概览

跟进this.getRenderedTemplate

Confluence 组件安全概览

跟着作者跟断电到loadResource:322, ConfigurableResourceManager 这里我我发现只有_templete是url的时候才会停到这里,../web.xml并不会

Confluence 组件安全概览

这里有四个ResourceLoaders 用来取模板,因为Fresourcetype是1 所以我们直接跟进org.apache.velocity.runtime.resource.loader.FileResourceLoader  getResourceStream:132, FileResourceLoader  getResourceStream:132, FileResourceLoader  FileResourceLoader会对用户传入的模板路径使用normalizePath函数进行校验

Confluence 组件安全概览

跟进去 过滤了/../ 跳目录失败

Confluence 组件安全概览

我们再回到getResourceStream:152, FileResourceLoader  停到inputStream = this.findTemplate(path, template); 这里会凭借一个固定的path,这个是Confluence的安装路径

Confluence 组件安全概览

所以我们可以督导Confluence目录下面的文件了,但是无法读取安装目录以外的文件,但是可以跳一层,../还是可以用的, 我们继续跟着作者走到getResourceStream:119, ClasspathResourceLoader 的ClassUtils.getResourceAsStream

Confluence 组件安全概览

跟进去停到getResourceAsStream:1087, WebappClassLoaderBase 这里也用了normallize多路径过滤了

Confluence 组件安全概览


我懒 就不踩坑了  图片链接https://paper.seebug.org/884/

Confluence 组件安全概览

跟着大佬直接i断到/org/apache/catalina/loader/WebappClassLoaderBase.class的getResourceAsStream

然后停到getResourceAsStream:1094, WebappClassLoaderBase  这里很关键,URL url = super.findResource(name); 会获取到url对象哦,可以远程加载模板啦

Confluence 组件安全概览

最终获取到数据给Velocity渲染。

跟着大佬一步步走下来 牛批,膜。


2.CVE-2019-3395

同3396  都可以file http协议之类的了 ssrf还不是小意思

3.CVE-2019-3394

Well 同上~

4.CVE-2019-3398

https://xz.aliyun.com/t/4854


3.漏洞信息跟进

官方公告

https://confluence.atlassian.com/doc/confluence-security-advisory-2019-03-20-966660264.html

4.厂商防护及绕过思路

漏洞pay都是url get post参数存在问题 单纯正则比较难以防御,绕过方式较多

5.漏洞自动化利用相关

反序列化漏洞exp公开,且可利用性高

简单burp发包即可


三.个人思考




主要参考链接是seebug一篇文章,从官方预警给出到自己构造poc,思考路径很值得借鉴,膜~


四.参考链接




https://note.qidong.name/2017/08/nexus-repository-oss/

https://github.com/sonatype/nexus-public/

本文始发于微信公众号(白帽100安全攻防实验室):Confluence 组件安全概览

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: