Confluence 路径穿越漏洞分析(CVE-2019-3398)
字数 1443 2025-08-29 08:32:18

Confluence 路径穿越漏洞分析(CVE-2019-3398) 教学文档

漏洞概述

漏洞编号: CVE-2019-3398
影响产品: Confluence Server 和 Data Center
漏洞类型: 路径穿越漏洞
影响范围: 允许攻击者在系统任意位置写入文件,可能导致远程代码执行
所需权限: 需要具备以下任一权限:

  • 向页面或博客添加附件的权限
  • 创建新空间或个人空间的权限
  • 空间管理员权限

漏洞原理

核心问题

漏洞存在于DownloadAllAttachments资源中,关键问题在于文件名构造不当导致路径穿越:

  1. 修复前代码直接使用attachment.getFileName()获取文件名
  2. 修复后代码对文件名进行了二次处理,防止路径穿越

技术细节

漏洞触发流程:

  1. 攻击者上传包含恶意路径的文件(如../../evil.jsp
  2. 系统在处理"下载全部附件"功能时,将文件复制到临时目录
  3. 由于文件名未经正确处理,导致文件被写入系统任意位置

漏洞分析

DownloadAllAttachments处理流程

位于com.atlassian.confluence.pages.actions.DownloadAllAttachmentsOnPageAction类中,主要流程:

  1. 收集页面所有附件信息存入数组
  2. 遍历数组,对每个附件执行:
    • 根据文件名创建File对象(tmpFile)
    • 将文件内容写入输入流
    • FileOutputStream输出流指向File对象
    • 将输入流内容拷贝到输出流

关键点:

  • getTempDirectoryForZipping()生成临时目录,格式如download2q1gP165938
  • 文件路径是zip目录与文件名直接拼接,未做路径规范化处理

利用链分析

两种上传方式对比:

  1. 直接上传(FileStorer):

    • 调用com.atlassian.confluence.pages.actions.beans.FileStorer
    • 会对请求中的文件名进行处理,过滤恶意路径
  2. 插件上传(drag-and-drop):

    • 调用com.atlasian.confluence.plugins.dragdrop.UploadAction
    • 不对请求中的文件名进行处理,保留原始恶意路径

漏洞复现(POC)

环境准备

  • 受影响版本的Confluence Server或Data Center
  • 具有上传附件权限的账户

复现步骤

  1. 登录系统,编辑一个已有多个附件的页面
  2. 使用"拖放上传"功能添加附件
  3. 使用Burp等工具拦截上传请求,修改文件名为恶意路径(如../../evil.jsp
  4. 在附件管理页面点击"下载全部附件"
  5. 检查系统目录,确认文件被写入指定位置

预期结果

文件将被写入/confluence_home/temp/zip文件名../../指定的目录中

修复建议

  1. 官方补丁:升级到修复版本
  2. 临时缓解措施:
    • 限制上传文件类型
    • 禁用不必要的上传功能
    • 监控系统关键目录的文件变动

参考链接

总结

该漏洞利用Confluence在处理批量下载附件时的路径构造缺陷,结合特定上传方式对文件名处理不严的问题,实现了任意文件写入。攻击者可在系统关键位置写入恶意文件,进而可能导致远程代码执行。建议用户及时升级到修复版本,并严格控制上传权限。

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对象 将输入流内容拷贝到输出流 关键点: 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 Security Advisory 2019-04-17 总结 该漏洞利用Confluence在处理批量下载附件时的路径构造缺陷,结合特定上传方式对文件名处理不严的问题,实现了任意文件写入。攻击者可在系统关键位置写入恶意文件,进而可能导致远程代码执行。建议用户及时升级到修复版本,并严格控制上传权限。