SpringBlade XXE 漏洞总结 漏洞概述 SpringBlade 的 模块(UReport2 集成)存在 XML 外部实体注入(XXE)漏洞。攻击者可通过 接口上传包含恶意 声明的 XML 文件,再通过 接口触发解析,从而读取服务器本地文件或发起 SSRF 请求。 受影响版本: ≤ 4.8.0 受影响组件: 模块 触发端点: 注入点: 触发点: --- 影响范围 1. 任意文件读取:通过注入 ,可读取服务器权限范围内的任意文件(如 、配置文件、密钥等)。 2. 服务端请求伪造(SSRF):通过注入 ,可强制服务器访问内网或外部主机。 3. 拒绝服务(DoS):通过递归实体定义(Billion Laughs 攻击),可耗尽服务器内存和 CPU。 --- 修复方案 立即缓解措施 若生产环境无需报表设计功能,应在网关或 Web 过滤器层阻止对所有 端点的访问。 代码级修复 1. 禁用外部实体解析:在创建 时配置以下安全特性: 2. 保存前校验 XML 内容:在存储报表前,验证 XML 不包含 、 或 关键字。 3. 升级 UReport2:升级至 2019 年后发布版本(≥ v2.2.9),该版本已修复多个已知漏洞(包括 XXE、SQL 注入、类加载等)。 --- POC 代码 步骤1:上传恶意 XML(需 double-URL 编码) 原始 XML payload(编码前): 保存后数据库中的 XML(经 MySQLProvider.saveReport() 存储): 步骤2:触发解析(loadReport 接口) 请求示例: 步骤3:验证结果 响应体中返回的 XML 包含被读取的文件内容(如 内容嵌入在 单元格中)。 --- 根因分析 漏洞存在于 UReport2 的 类中,其创建 时未禁用外部实体解析和 DOCTYPE 声明: 攻击链: 1. 注入:攻击者调用 ,传入含恶意 DOCTYPE 的 XML,未经校验直接存入数据库。 2. 触发:攻击者调用 ,从数据库取回 XML 并传入 ,解析时触发外部实体解析。 3. 外泄:解析后的实体内容(如文件内容)嵌入到报表结构中,随响应返回给攻击者。