jeepay v2.4.0反射型xss+存储型xss分析
字数 2011 2025-08-22 12:22:30

Jeepay v2.4.0 安全漏洞分析与防护指南

1. 系统概述

Jeepay v2.4.0 是一个支付系统,包含多个子模块:

  • jeepay-manager:管理后台
  • jeepay-merchant:商户端
  • jeepay-payment:支付核心模块

2. 认证机制分析

2.1 认证架构

系统采用 Spring Security 框架实现认证授权,主要特点:

  1. WebSecurityConfig 实现 WebSecurityConfigurerAdapter 接口
  2. 认证流程:
    • 首先匹配全局配置
    • 然后匹配 HTTP 安全配置
  3. 未授权访问限制:
    • 仅允许访问静态资源(html、js 等)
    • 允许访问 Swagger 接口文档

2.2 JWT 认证实现

  1. JeeAuthenticationTokenFilter 负责认证过滤

  2. 认证流程细节:

    • 使用固定密钥 t7w3P8X6472qWc3u 进行 JWT 解密
    • 解密后检查 Redis 中是否存在对应的 cacheKey
    • cacheKey 组成:sysuserid + 36 字符随机 UUID
    • 认证失败条件:
      • JWT 解密失败
      • Redis 中不存在对应的 cacheKey
  3. 安全限制:

    • 无法伪造 iToken(需要知道 sysuserid 和对应的 UUID)
    • 无法实现越权访问

2.3 各模块认证差异

模块 认证方式 备注
jeepay-manager Spring Security + JWT 完整认证体系
jeepay-merchant 同 manager 模块 认证方式相同
jeepay-payment 接口级权限验证 支付接口需特殊处理

3. 漏洞分析

3.1 反射型 XSS

漏洞位置/api/common/payForm/{base64参数}

利用方式

http://172.16.13.77:9216/api/common/payForm/PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==

(解码后为 <script>alert(1)</script>)

防护建议

  1. 对输出进行 HTML 编码
  2. 实现 CSP 策略
  3. 对 base64 解码后的内容进行严格过滤

3.2 存储型 XSS

漏洞位置:头像 URL 参数

利用方式
通过传入恶意 URL 实现持久化 XSS 攻击

防护建议

  1. 对用户输入的 URL 进行严格验证
  2. 实现内容安全策略
  3. 对动态生成的图像标签进行输出编码

3.3 潜在的模板注入风险

环境信息

  • 使用 FreeMarker 模板引擎
  • 版本:2.3.31

安全配置

  • api_builtin_enabled 默认已禁用(自 2.3.22 版本起)

潜在攻击向量(已默认防护):

<#assign ac=springMacroRequestContext.webApplicationContext>
<#assign fc=ac.getBean('freeMarkerConfiguration')>
<#assign dcr=fc.getDefaultConfiguration().getNewBuiltinClassResolver()>
<#assign VOID=fc.setNewBuiltinClassResolver(dcr)>
${"freemarker.template.utility.Execute"?new()("cmd.exe /c calc")}

加固建议

  1. 保持 FreeMarker 最新版本
  2. 避免允许用户修改模板内容
  3. 配置 new_builtin_class_resolver 为更严格的策略

4. 安全加固指南

4.1 认证加固

  1. JWT 改进

    • 使用动态生成的密钥而非固定密钥
    • 实现 JWT 密钥轮换机制
    • 增加 JWT 有效期检查
  2. Redis 缓存改进

    • 设置合理的 cacheKey 过期时间
    • 实现缓存失效后的重新认证流程

4.2 XSS 防护

  1. 输入验证

    • 对所有用户输入进行严格过滤
    • 实现白名单机制的输入验证
  2. 输出编码

    • 根据输出上下文(HTML/JS/URL)使用适当的编码方式
    • 使用安全的模板引擎自动转义功能
  3. CSP 策略

    • 实现严格的内容安全策略
    • 禁止内联脚本执行

4.3 其他安全建议

  1. 依赖管理

    • 保持所有依赖库的最新安全版本
    • 定期进行依赖项漏洞扫描
  2. API 安全

    • 对支付接口实现额外的安全校验
    • 实现完善的日志记录和监控
  3. 配置安全

    • 确保类似 ActiveMQ 的 credentials.properties 文件权限正确
    • 生产环境避免使用默认密码

5. 漏洞验证方法

5.1 XSS 验证步骤

  1. 反射型 XSS

    • 构造包含恶意脚本的 base64 编码 URL
    • 观察是否弹出警告框或执行脚本
  2. 存储型 XSS

    • 在头像 URL 字段输入恶意脚本
    • 查看页面加载时是否执行

5.2 认证绕过验证

  1. 尝试伪造 JWT:

    • 使用已知密钥生成测试 token
    • 验证系统是否接受非法 token
  2. 测试未授权访问:

    • 尝试直接访问需要认证的 API
    • 验证静态资源和 Swagger 的可访问性

6. 总结

Jeepay v2.4.0 存在的主要安全问题包括反射型和存储型 XSS 漏洞,虽然认证体系设计相对完善,但仍需注意以下方面:

  1. 对所有用户输入进行严格验证和编码
  2. 保持依赖库的最新安全版本
  3. 实现深度防御策略,包括 CSP、输入验证和输出编码
  4. 定期进行安全审计和渗透测试

通过实施上述安全措施,可以显著提高系统的整体安全性,防范潜在的 Web 攻击。

Jeepay v2.4.0 安全漏洞分析与防护指南 1. 系统概述 Jeepay v2.4.0 是一个支付系统,包含多个子模块: jeepay-manager:管理后台 jeepay-merchant:商户端 jeepay-payment:支付核心模块 2. 认证机制分析 2.1 认证架构 系统采用 Spring Security 框架实现认证授权,主要特点: WebSecurityConfig 实现 WebSecurityConfigurerAdapter 接口 认证流程: 首先匹配全局配置 然后匹配 HTTP 安全配置 未授权访问限制: 仅允许访问静态资源(html、js 等) 允许访问 Swagger 接口文档 2.2 JWT 认证实现 JeeAuthenticationTokenFilter 负责认证过滤 认证流程细节: 使用固定密钥 t7w3P8X6472qWc3u 进行 JWT 解密 解密后检查 Redis 中是否存在对应的 cacheKey cacheKey 组成: sysuserid + 36 字符随机 UUID 认证失败条件: JWT 解密失败 Redis 中不存在对应的 cacheKey 安全限制: 无法伪造 iToken(需要知道 sysuserid 和对应的 UUID) 无法实现越权访问 2.3 各模块认证差异 | 模块 | 认证方式 | 备注 | |------|----------|------| | jeepay-manager | Spring Security + JWT | 完整认证体系 | | jeepay-merchant | 同 manager 模块 | 认证方式相同 | | jeepay-payment | 接口级权限验证 | 支付接口需特殊处理 | 3. 漏洞分析 3.1 反射型 XSS 漏洞位置 : /api/common/payForm/{base64参数} 利用方式 : (解码后为 <script>alert(1)</script> ) 防护建议 : 对输出进行 HTML 编码 实现 CSP 策略 对 base64 解码后的内容进行严格过滤 3.2 存储型 XSS 漏洞位置 :头像 URL 参数 利用方式 : 通过传入恶意 URL 实现持久化 XSS 攻击 防护建议 : 对用户输入的 URL 进行严格验证 实现内容安全策略 对动态生成的图像标签进行输出编码 3.3 潜在的模板注入风险 环境信息 : 使用 FreeMarker 模板引擎 版本:2.3.31 安全配置 : api_builtin_enabled 默认已禁用(自 2.3.22 版本起) 潜在攻击向量 (已默认防护): 加固建议 : 保持 FreeMarker 最新版本 避免允许用户修改模板内容 配置 new_builtin_class_resolver 为更严格的策略 4. 安全加固指南 4.1 认证加固 JWT 改进 : 使用动态生成的密钥而非固定密钥 实现 JWT 密钥轮换机制 增加 JWT 有效期检查 Redis 缓存改进 : 设置合理的 cacheKey 过期时间 实现缓存失效后的重新认证流程 4.2 XSS 防护 输入验证 : 对所有用户输入进行严格过滤 实现白名单机制的输入验证 输出编码 : 根据输出上下文(HTML/JS/URL)使用适当的编码方式 使用安全的模板引擎自动转义功能 CSP 策略 : 实现严格的内容安全策略 禁止内联脚本执行 4.3 其他安全建议 依赖管理 : 保持所有依赖库的最新安全版本 定期进行依赖项漏洞扫描 API 安全 : 对支付接口实现额外的安全校验 实现完善的日志记录和监控 配置安全 : 确保类似 ActiveMQ 的 credentials.properties 文件权限正确 生产环境避免使用默认密码 5. 漏洞验证方法 5.1 XSS 验证步骤 反射型 XSS : 构造包含恶意脚本的 base64 编码 URL 观察是否弹出警告框或执行脚本 存储型 XSS : 在头像 URL 字段输入恶意脚本 查看页面加载时是否执行 5.2 认证绕过验证 尝试伪造 JWT: 使用已知密钥生成测试 token 验证系统是否接受非法 token 测试未授权访问: 尝试直接访问需要认证的 API 验证静态资源和 Swagger 的可访问性 6. 总结 Jeepay v2.4.0 存在的主要安全问题包括反射型和存储型 XSS 漏洞,虽然认证体系设计相对完善,但仍需注意以下方面: 对所有用户输入进行严格验证和编码 保持依赖库的最新安全版本 实现深度防御策略,包括 CSP、输入验证和输出编码 定期进行安全审计和渗透测试 通过实施上述安全措施,可以显著提高系统的整体安全性,防范潜在的 Web 攻击。