从FlexPaper 2.3.7 安全更新入手反推漏洞
字数 1577 2025-08-26 22:11:39

FlexPaper 2.3.7 安全漏洞分析与教学文档

1. 前言

FlexPaper 是一个开源轻量级的文档浏览器显示组件,允许在 Web 客户端、移动设备和平板设备上查看各种文档。2.3.7 版本修复了三个关键漏洞:

  1. 无需身份验证的 RCE 漏洞
  2. 两处未公开的 XSS 漏洞

2. 漏洞概览

通过对比 2.3.6 和 2.3.7 版本,发现共有 7 个 PHP 文件被修改,其中 5 个涉及安全更新:

  1. change_config.php - 修复任意文件删除导致的 RCE
  2. simple_document.php - 修复反射型 XSS
  3. split_document.php - 修复反射型 XSS

3. 任意文件删除导致 RCE 漏洞分析

3.1 漏洞位置

php/change_config.php

3.2 漏洞成因

3.2.1 未授权访问

  • 2.3.6 版本中身份验证位于第 54 行,前 53 行代码可无需认证执行
  • 攻击者可利用前 53 行中的功能

3.2.2 任意文件删除

  • 第 47 行存在 unlink 方法,可删除 $dir 指定目录中所有文件
  • $dir$configManager->getConfig('path.swf') 获取
  • path.swf 配置可通过 POST 参数 SWF_Directory 控制

3.2.3 攻击链

  1. 攻击者通过未授权访问 change_config.php
  2. 提交 SWF_Directory 参数指向任意目录
  3. 触发 unlink 清空目标目录

3.3 结合 setup.php 实现 RCE

3.3.1 setup.php 作用

  • 是 FlexPaper 后台的安装程序
  • 用于生成和配置配置文件

3.3.2 关键方法

pdf2jsonEnabledpdf2swfEnabled 方法:

function pdf2jsonEnabled($path_to_pdf2json) {
    exec($path_to_pdf2json, $output, $returnvalue);
    return $returnvalue == 0;
}

function pdf2swfEnabled($path_to_pdf2swf) {
    exec($path_to_pdf2swf, $output, $returnvalue);
    return $returnvalue == 0;
}

3.3.3 漏洞利用

  1. 利用任意文件删除清空 php/config/ 目录
  2. 使系统认为未安装(admin.password 为 null)
  3. 访问 setup.php 并传入恶意参数:
    • PDF2JSON_PATHPDF2SWF_PATH 参数可执行任意命令

4. 反射型 XSS 漏洞分析

4.1 simple_document.php XSS

漏洞位置

php/simple_document.php

漏洞代码

$doc = $_GET['doc'];
// ...
echo $doc;

修复方式

2.3.7 版本添加了 htmlspecialchars 过滤

4.2 split_document.php XSS

漏洞位置

php/split_document.php

漏洞代码

$doc = $_GET['doc'];
// ...
echo $doc;

修复方式

2.3.7 版本添加了 htmlspecialchars 过滤

利用限制

  • 需要 getTotalPages 方法能成功读取 PDF 文件
  • 攻击 payload 需与现有 PDF 文件名匹配
  • 否则会导致 numPages 为空,XSS 无法稳定触发

5. 漏洞修复建议

  1. 权限控制

    • 在所有敏感操作前进行身份验证
    • 使用最小权限原则
  2. 输入验证

    • 对所有用户输入进行严格过滤
    • 使用 htmlspecialchars 防御 XSS
  3. 文件操作安全

    • 限制文件操作目录范围
    • 对用户可控的路径参数进行严格校验
  4. 命令执行安全

    • 避免直接使用用户输入执行系统命令
    • 如需必要,应进行白名单校验
  5. 安装程序安全

    • 安装完成后强制删除或禁用安装程序
    • 安装过程中增加 CSRF 防护

6. 总结

FlexPaper 2.3.6 版本存在三个高危漏洞:

  1. 通过任意文件删除触发重装机制,导致 RCE
  2. 两处反射型 XSS 漏洞

这些漏洞的组合可导致未授权攻击者完全控制服务器。开发人员应及时升级到安全版本,并遵循安全编码实践。

FlexPaper 2.3.7 安全漏洞分析与教学文档 1. 前言 FlexPaper 是一个开源轻量级的文档浏览器显示组件,允许在 Web 客户端、移动设备和平板设备上查看各种文档。2.3.7 版本修复了三个关键漏洞: 无需身份验证的 RCE 漏洞 两处未公开的 XSS 漏洞 2. 漏洞概览 通过对比 2.3.6 和 2.3.7 版本,发现共有 7 个 PHP 文件被修改,其中 5 个涉及安全更新: change_config.php - 修复任意文件删除导致的 RCE simple_document.php - 修复反射型 XSS split_document.php - 修复反射型 XSS 3. 任意文件删除导致 RCE 漏洞分析 3.1 漏洞位置 php/change_config.php 3.2 漏洞成因 3.2.1 未授权访问 2.3.6 版本中身份验证位于第 54 行,前 53 行代码可无需认证执行 攻击者可利用前 53 行中的功能 3.2.2 任意文件删除 第 47 行存在 unlink 方法,可删除 $dir 指定目录中所有文件 $dir 由 $configManager->getConfig('path.swf') 获取 path.swf 配置可通过 POST 参数 SWF_Directory 控制 3.2.3 攻击链 攻击者通过未授权访问 change_config.php 提交 SWF_Directory 参数指向任意目录 触发 unlink 清空目标目录 3.3 结合 setup.php 实现 RCE 3.3.1 setup.php 作用 是 FlexPaper 后台的安装程序 用于生成和配置配置文件 3.3.2 关键方法 pdf2jsonEnabled 和 pdf2swfEnabled 方法: 3.3.3 漏洞利用 利用任意文件删除清空 php/config/ 目录 使系统认为未安装( admin.password 为 null) 访问 setup.php 并传入恶意参数: PDF2JSON_PATH 或 PDF2SWF_PATH 参数可执行任意命令 4. 反射型 XSS 漏洞分析 4.1 simple_ document.php XSS 漏洞位置 php/simple_document.php 漏洞代码 修复方式 2.3.7 版本添加了 htmlspecialchars 过滤 4.2 split_ document.php XSS 漏洞位置 php/split_document.php 漏洞代码 修复方式 2.3.7 版本添加了 htmlspecialchars 过滤 利用限制 需要 getTotalPages 方法能成功读取 PDF 文件 攻击 payload 需与现有 PDF 文件名匹配 否则会导致 numPages 为空,XSS 无法稳定触发 5. 漏洞修复建议 权限控制 : 在所有敏感操作前进行身份验证 使用最小权限原则 输入验证 : 对所有用户输入进行严格过滤 使用 htmlspecialchars 防御 XSS 文件操作安全 : 限制文件操作目录范围 对用户可控的路径参数进行严格校验 命令执行安全 : 避免直接使用用户输入执行系统命令 如需必要,应进行白名单校验 安装程序安全 : 安装完成后强制删除或禁用安装程序 安装过程中增加 CSRF 防护 6. 总结 FlexPaper 2.3.6 版本存在三个高危漏洞: 通过任意文件删除触发重装机制,导致 RCE 两处反射型 XSS 漏洞 这些漏洞的组合可导致未授权攻击者完全控制服务器。开发人员应及时升级到安全版本,并遵循安全编码实践。