kkFileView 4.2.0-4.4.0 任意文件上传导致远程执行漏洞分析
字数 1266 2025-08-23 18:31:34

kkFileView 4.2.0-4.4.0 任意文件上传导致远程执行漏洞分析

漏洞概述

kkFileView 是一个基于 Spring Boot 构建的文件文档在线预览解决方案,支持主流办公文档的在线预览。在 4.2.0 到 4.4.0-beta 版本中,文件上传功能存在 ZIP 路径穿越问题,导致攻击者可以通过上传恶意构造的 ZIP 包覆盖任意文件,进而可能导致远程代码执行。

影响版本

  • kkFileView 4.2.0 至 4.4.0-beta

漏洞原理

漏洞源于对压缩文件解压时未正确处理文件路径,导致攻击者可以通过构造包含路径穿越符号(如../)的 ZIP 文件,将恶意文件写入系统任意位置。

环境搭建

  1. 下载受影响版本(如 v4.3.0):

    https://github.com/kekingcn/kkFileView/releases/tag/v4.3.0
    
  2. 解决 aspose 依赖问题:

    • 注释掉配置的其他仓库
    • 添加以下镜像配置:
      <mirror>
        <id>aspose-maven-repository</id>
        <url>http://artifact.aspose.com/repo/</url>
      </mirror>
      
    • 添加必要的 jar 包
  3. 启动后访问:

    http://127.0.0.1:8012
    

漏洞复现

构造恶意 ZIP 文件

使用以下 Python 脚本创建恶意 ZIP 文件(hack.zip):

import zipfile

if __name__ == "__main__":
    try:
        binary1 = b'test'
        binary2 = b'test_Yu9'
        zipFile = zipfile.ZipFile("hack.zip", "a", zipfile.ZIP_DEFLATED)
        info = zipfile.ZipInfo("hack.zip")
        zipFile.writestr("test", binary1)
        zipFile.writestr(".AAA/flag", binary2)
        zipFile.close()
    except IOError as e:
        raise e

注意:ZIP 文件中必须包含至少一个正常文件(如 test),以便创建 hack.zip_ 缓存文件。

利用步骤

  1. 上传恶意压缩包
  2. 点击预览
  3. 观察任意文件写入效果

利用思路

  • Linux 系统(高权限情况下):

    • 写入计划任务实现反弹 shell
    • 示例路径:/etc/cron.d/evil
  • Windows 系统(高权限情况下):

    • 写入启动目录实现持久化
    • 示例路径:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\evil.bat

漏洞分析

漏洞入口

漏洞入口位于:

cn.keking.web.controller.OnlinePreviewController#onlinePreview

该方法根据文件 URL 获取文件属性信息,并选择合适的文件预览处理器进行预览处理。

关键处理流程

  1. 请求进入 CompressFilePreviewImpl#filePreviewHandle 方法
  2. 调用 CompressFileReader#unRar 方法处理压缩文件

漏洞点分析

CompressFileReader#unRar 方法中:

  1. 使用 SevenZip 库的 openInArchive 方法打开压缩文件
  2. 通过 getSimpleInterface() 获取压缩文件的简单接口
  3. 调用 getArchiveItems() 获取压缩文件中所有项的列表
  4. 遍历处理压缩文件项时,未对文件路径进行安全校验,直接拼接创建文件

关键问题:缺乏对解压路径的合法性检查,导致可以写入任意位置。

修复建议

  1. 升级到最新安全版本
  2. 临时缓解措施:
    • 对解压路径进行规范化处理
    • 检查解压路径是否在预期目录内
    • 禁止路径中包含 ../ 等穿越符号

参考资源

总结

该漏洞利用简单但危害严重,攻击者可通过上传恶意构造的 ZIP 文件实现任意文件写入,进而可能导致远程代码执行。建议受影响用户立即升级或采取缓解措施。

kkFileView 4.2.0-4.4.0 任意文件上传导致远程执行漏洞分析 漏洞概述 kkFileView 是一个基于 Spring Boot 构建的文件文档在线预览解决方案,支持主流办公文档的在线预览。在 4.2.0 到 4.4.0-beta 版本中,文件上传功能存在 ZIP 路径穿越问题,导致攻击者可以通过上传恶意构造的 ZIP 包覆盖任意文件,进而可能导致远程代码执行。 影响版本 kkFileView 4.2.0 至 4.4.0-beta 漏洞原理 漏洞源于对压缩文件解压时未正确处理文件路径,导致攻击者可以通过构造包含路径穿越符号(如 ../ )的 ZIP 文件,将恶意文件写入系统任意位置。 环境搭建 下载受影响版本(如 v4.3.0): 解决 aspose 依赖问题: 注释掉配置的其他仓库 添加以下镜像配置: 添加必要的 jar 包 启动后访问: 漏洞复现 构造恶意 ZIP 文件 使用以下 Python 脚本创建恶意 ZIP 文件(hack.zip): 注意 :ZIP 文件中必须包含至少一个正常文件(如 test),以便创建 hack.zip_ 缓存文件。 利用步骤 上传恶意压缩包 点击预览 观察任意文件写入效果 利用思路 Linux 系统 (高权限情况下): 写入计划任务实现反弹 shell 示例路径: /etc/cron.d/evil Windows 系统 (高权限情况下): 写入启动目录实现持久化 示例路径: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\evil.bat 漏洞分析 漏洞入口 漏洞入口位于: 该方法根据文件 URL 获取文件属性信息,并选择合适的文件预览处理器进行预览处理。 关键处理流程 请求进入 CompressFilePreviewImpl#filePreviewHandle 方法 调用 CompressFileReader#unRar 方法处理压缩文件 漏洞点分析 在 CompressFileReader#unRar 方法中: 使用 SevenZip 库的 openInArchive 方法打开压缩文件 通过 getSimpleInterface() 获取压缩文件的简单接口 调用 getArchiveItems() 获取压缩文件中所有项的列表 遍历处理压缩文件项时, 未对文件路径进行安全校验 ,直接拼接创建文件 关键问题:缺乏对解压路径的合法性检查,导致可以写入任意位置。 修复建议 升级到最新安全版本 临时缓解措施: 对解压路径进行规范化处理 检查解压路径是否在预期目录内 禁止路径中包含 ../ 等穿越符号 参考资源 kkFileView-v4.3.0-RCE-POC 官方更新日志和安全公告 总结 该漏洞利用简单但危害严重,攻击者可通过上传恶意构造的 ZIP 文件实现任意文件写入,进而可能导致远程代码执行。建议受影响用户立即升级或采取缓解措施。