某凌EKP未授权访问漏洞分析
字数 1205 2025-08-24 10:10:13
X凌EKP未授权访问漏洞分析教学文档
0x00 产品简介
X凌EKP是一款企业协同办公平台,具有以下特点:
- 适用于各种规模的组织
- 旨在提高工作效率、促进团队协作
- 优化业务流程
- 帮助组织更好地管理日常工作
- 增强企业竞争力
0x01 漏洞概述
漏洞类型:未授权访问漏洞
影响范围:可以读取resource目录下的所有文件,包括日志请求信息
影响版本:V15等版本
0x02 漏洞复现
漏洞利用条件
- 目标系统运行受影响版本的X凌EKP
- 系统未打补丁修复此漏洞
漏洞利用方式
通过构造特殊URL路径,绕过权限检查,访问resource目录下的文件
0x03 漏洞原理深度分析
漏洞核心组件
- spring.xml配置文件中存在匿名路径:
/ui-ext/** - web.xml中对应的Servlet是
com.landray.kmss.web.servlet.RedirectServlet
请求处理流程
- 请求经过一系列Filter后到达RedirectServlet
service方法处理流程:protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String url = request.getRequestURI().replaceFirst(request.getContextPath(), ""); if (!url.endsWith(".theme.css") || !url.startsWith("/ui-ext/") && !url.startsWith("//ui-ext/")) { this.redirect(request, response); } else { ThemeUtil.service(request, response); } }
关键绕过技术
-
路径遍历:使用
/./构造特殊路径- 示例:
/./ui-ext/./behavior - 绕过判断逻辑:
url.startsWith("/ui-ext/")检查
- 示例:
-
多斜杠绕过:
- Spring MVC默认将多个斜杠视为单个斜杠
- 可使用
//ui-ext/方式绕过
文件访问机制
-
redirect方法调用getFileName方法处理路径:private String getFileName(HttpServletRequest request) { String req = request.getRequestURI().replaceFirst(request.getContextPath(), ""); req = req.replaceFirst(this.requestPath, ""); return this.forwardPath + req; } -
路径转换过程:
- 原始路径:
/./ui-ext/./behavior - 替换
/ui-ext/后:/../behavior - 最终拼接:
file:c:/landray/kmss/resource/ui-ext//../behavior - 实际访问:
c:/landray/kmss/resource/behavior
- 原始路径:
安全限制检查
-
检查路径中是否包含非法字符:
%c0(URL编码)%00(空字节)
-
禁止访问
.ini文件
0x04 漏洞修复方案
官方修复
- 联系官方获取补丁
- 升级到安全版本
临时缓解措施
- 修改
spring.xml配置,限制/ui-ext/**路径的访问权限 - 在Filter层增加对路径遍历字符的检查
- 限制resource目录的直接访问
0x05 漏洞验证与测试
测试用例
- 尝试访问:
http://target//ui-ext/../behavior - 尝试访问:
http://target/./ui-ext/./behavior
预期结果
- 漏洞存在时:能够读取resource目录下的文件
- 已修复时:返回403禁止访问或404未找到
0x06 总结
该漏洞利用Spring MVC路径处理特性和路径遍历技术,绕过权限检查,实现未授权访问系统文件。漏洞危害较高,可导致敏感信息泄露,建议受影响用户尽快升级修复。