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 框架实现认证授权,主要特点:
- 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参数}
利用方式:
http://172.16.13.77:9216/api/common/payForm/PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==
(解码后为 <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 版本起)
潜在攻击向量(已默认防护):
<#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")}
加固建议:
- 保持 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 攻击。