前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Confluence 路径穿越漏洞分析(CVE-2019-3398)

Confluence 路径穿越漏洞分析(CVE-2019-3398)

作者头像
C4rpeDime
发布2020-01-20 14:39:51
1.2K0
发布2020-01-20 14:39:51
举报
文章被收录于专栏:黑白安全黑白安全

感觉最近Confluence一下子就火起来了,各种爆洞= =。这个洞是17号爆的,影响没有之前那个RCE的大,需要登录,还需要有修改文章上传附件的权限,个人感觉有点鸡肋。Anyway,分析的过程还是比较简单并有乐趣的。

0x01 漏洞概述

Confluence Server and Data Center had a path traversal vulnerability in the downloadallattachments resource. A remote attacker who has permission to add attachments to pages and / or blogs, or to create a new space or personal space, or who has ‘Admin’ permissions for a space, can exploit this path traversal vulnerability to write files to arbitrary locations which can lead to remote code execution on systems that run a vulnerable version of Confluence Server or Data Center.

根据官方文档的描述,我们大致能知道这是个需要权限的路径穿越的漏洞,并且可以将文件上传到任意路径。造成这个漏洞的关键点在于DownloadAllAttachments这个资源。在经过diff后,可以确定漏洞触发的关键点在于文件名的构造:

修复前

 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)

修复后

 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)
 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)

可以看到这里是对这里的attachment.getFileName所获取的文件名进行二次文件名获取。

0x02 漏洞分析

分析这个漏洞要从两个点入手:

  • DownloadAllAttachments自身的处理流程
  • 如何让文件名中包含../

在分析前我们应清楚哪里能调用DownloadAllAttachments,这样才方便调试。根据官方给出的临时修补措施,我们大致可以从附件管理的Download all attachments这个地方入手:

 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)
 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)

2.1 DownloadAllAttachments处理流程

DownloadAllAttachments位于com.atlassian.confluence.pages.actions.DownloadAllAttachmentsOnPageAction,为了便于快速的解释这个漏洞,我用动态调试+静态分析的方法来进行说明。

我这里选取的是默认生成的Lay out your page (step 6 of 9)这个页面的下载全部附件进行测试的:

 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)

代码非常简单,分两部分来看:

 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)

可以看到在这里首先会将附件中的所有文件的基础信息置于一个数组中,然后对数组进行遍历,然后执行以下操作:

  1. 根据文件名创建一个新的File对象(tmpFile)
  2. 将文件内容写入输入流
  3. FileOutputStream输出流指向File对象
  4. 将输入流中的内容拷贝到FileOutputStream输出流中

这样就完成了将文件拷贝到另外一个位置的操作。

这里的attachment.getFileName()

 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)

而title名就是文件名:

 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)

getTempDirectoryForZipping()

 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)
 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)

是根据时间和随机数生成的一个目录,格式类似于download2q1gP165938,这里我们通过方法的名字就能看出这里是建立了一个创建一个zip的目录,这个目录在confluence_home/temp/

ok,知道了这些,继续向下看DownloadAllAttachments

 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)

这里是完成将zip目录打包成zip文件的过程。

在进行文件复制的时候,我们注意到文件的路径是zip目录与文件名直接进行进行拼接生成的:

 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)

而这里就是整个目录穿越的关键,也就是说在生成zip文件前,如果附件列表中有文件的文件名是../../xxx的格式的话,就能进行目录穿越,在任意位置创建文件。

2.2 寻找利用链

默认情况下,我们是没有办法创建以.开头的文件的,如果想要上传一个文件名类似../../xxx的文件的话,最简单的思路是用burp中间改包,但是在这个例子中是不行的:

 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)

应该是进行了自动的过滤,这个方法行不通。我又注意到了在属性中好像能修改文件名:

 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)

但是也是不成功的:

 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)

就在我想要放弃的时候我尝试了一下编辑页面中的上传附件功能,竟然成功了:

 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)
 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)
 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)

在这里我点击下载全部,即可完成目录穿越:

 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)

我们来对比一下两种上传方式有什么不同。

直接上传(FileStorer)

直接上传这里是调用的com.atlassian.confluence.pages.actions.beans.FileStorer,关键点在:

 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)

在获取文件名时会对请求中的文件名进行处理:

 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)
 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)

会将文件名提取出来。

利用插件上传

在利用插件上传时用的是drag-and-drop这个插件在com.atlasian.confluence.plugins.dragdrop.UploadAction

在处理请求时并未对请求中的文件名进行处理:

 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)

所以会保存我们恶意修改的文件名

至此该漏洞分析完毕。

0x03 构造POC

首先登陆后编辑附件数大于2个的页面,在页面中加入附件:

 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)

burp抓包修改上传文件的文件名:

 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)

在附件管理页面下载全部附件:

 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)

文件会生成到/confluence_home/temp/zip文件名../../目录中:

 Confluence 路径穿越漏洞分析(CVE-2019-3398)
Confluence 路径穿越漏洞分析(CVE-2019-3398)

0x04 Reference

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-04-205,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01 漏洞概述
  • 0x02 漏洞分析
    • 2.1 DownloadAllAttachments处理流程
      • 2.2 寻找利用链
        • 直接上传(FileStorer)
        • 利用插件上传
    • 0x03 构造POC
    • 0x04 Reference
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档