Confluence 路径穿越漏洞分析(CVE-2019-3398)
字数 1443 2025-08-29 08:32:18
Confluence 路径穿越漏洞分析(CVE-2019-3398) 教学文档
漏洞概述
漏洞编号: CVE-2019-3398
影响产品: Confluence Server 和 Data Center
漏洞类型: 路径穿越漏洞
影响范围: 允许攻击者在系统任意位置写入文件,可能导致远程代码执行
所需权限: 需要具备以下任一权限:
- 向页面或博客添加附件的权限
- 创建新空间或个人空间的权限
- 空间管理员权限
漏洞原理
核心问题
漏洞存在于DownloadAllAttachments资源中,关键问题在于文件名构造不当导致路径穿越:
- 修复前代码直接使用
attachment.getFileName()获取文件名 - 修复后代码对文件名进行了二次处理,防止路径穿越
技术细节
漏洞触发流程:
- 攻击者上传包含恶意路径的文件(如
../../evil.jsp) - 系统在处理"下载全部附件"功能时,将文件复制到临时目录
- 由于文件名未经正确处理,导致文件被写入系统任意位置
漏洞分析
DownloadAllAttachments处理流程
位于com.atlassian.confluence.pages.actions.DownloadAllAttachmentsOnPageAction类中,主要流程:
- 收集页面所有附件信息存入数组
- 遍历数组,对每个附件执行:
- 根据文件名创建File对象(
tmpFile) - 将文件内容写入输入流
- 将
FileOutputStream输出流指向File对象 - 将输入流内容拷贝到输出流
- 根据文件名创建File对象(
关键点:
getTempDirectoryForZipping()生成临时目录,格式如download2q1gP165938- 文件路径是zip目录与文件名直接拼接,未做路径规范化处理
利用链分析
两种上传方式对比:
-
直接上传(FileStorer):
- 调用
com.atlassian.confluence.pages.actions.beans.FileStorer - 会对请求中的文件名进行处理,过滤恶意路径
- 调用
-
插件上传(drag-and-drop):
- 调用
com.atlasian.confluence.plugins.dragdrop.UploadAction - 不对请求中的文件名进行处理,保留原始恶意路径
- 调用
漏洞复现(POC)
环境准备
- 受影响版本的Confluence Server或Data Center
- 具有上传附件权限的账户
复现步骤
- 登录系统,编辑一个已有多个附件的页面
- 使用"拖放上传"功能添加附件
- 使用Burp等工具拦截上传请求,修改文件名为恶意路径(如
../../evil.jsp) - 在附件管理页面点击"下载全部附件"
- 检查系统目录,确认文件被写入指定位置
预期结果
文件将被写入/confluence_home/temp/zip文件名../../指定的目录中
修复建议
- 官方补丁:升级到修复版本
- 临时缓解措施:
- 限制上传文件类型
- 禁用不必要的上传功能
- 监控系统关键目录的文件变动
参考链接
总结
该漏洞利用Confluence在处理批量下载附件时的路径构造缺陷,结合特定上传方式对文件名处理不严的问题,实现了任意文件写入。攻击者可在系统关键位置写入恶意文件,进而可能导致远程代码执行。建议用户及时升级到修复版本,并严格控制上传权限。