普元Primeton EOS Platform JMX 反序列化漏洞分析及复现
字数 1404 2025-08-19 12:41:56
普元Primeton EOS Platform JMX反序列化漏洞分析与复现技术文档
1. 漏洞概述
普元Primeton EOS Platform(以下简称普元EOS)存在JMX接口反序列化漏洞,攻击者可通过构造恶意序列化数据发送到特定JMX接口,实现远程代码执行。
2. 漏洞分析
2.1 普元EOS框架分析
2.1.1 请求拦截机制
-
核心拦截器:web.xml中配置了
com.eos.access.http.InterceptorFilter过滤器,拦截所有请求 -
拦截链创建:
- 拦截器创建
WebInterceptorChain处理请求 - 通过请求的
servletPath遍历configs中的WebInterceptorConfig对象 - 使用正则匹配决定哪些
IWebInterceptor对象加入处理链
- 拦截器创建
-
配置来源:
handler-web.xml文件handler-processor.xml文件contribution.eosinf文件
2.2 鉴权机制分析
普元EOS的鉴权主要在两个组件中实现:
- UserLoginWebInterceptor
- UserLoginCheckedFilter
鉴权流程:
- 检查登录状态 → 已登录则放行
- 检查白名单路径 → 在白名单则放行
- 检查黑名单路径 → 在黑名单则抛出异常
- 既不在白名单也不在黑名单 → 放行
注:黑白名单路径在user-config.xml中配置
3. 漏洞细节
3.1 漏洞入口
- 路由配置:在
handler-processor.xml中配置了*.jmx路由处理 - 处理类:
JmxServiceProcessor类的process()方法
3.2 漏洞触发点
JmxServiceProcessor.process()方法中存在以下不安全操作:
- 直接从request获取请求体
- 使用请求体作为参数创建
ObjectInputStream对象 - 调用
readObject()方法进行反序列化
3.3 利用条件
- 存在
commons-collections依赖 commons-collections版本在可利用范围内
4. 漏洞复现
4.1 基本复现步骤
- 构造恶意序列化payload(使用CC链)
- 向目标发送POST请求:
- URL:
/default/.jmx - 请求体: 序列化payload
- URL:
4.2 高级利用 - CC6变种
标准CC6通过反射调用Runtime.getRuntime().exec()执行命令,但功能有限。改进方案:
// 通过JS引擎实现复杂操作(如内存马注入)
// 示例代码结构(具体实现需根据实际情况调整):
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
engine.eval("复杂JS代码");
优势:
- 可执行更复杂的操作
- 绕过部分防护措施
- 实现内存驻留等高级攻击
5. 防御建议
- 升级到官方修复版本
- 临时缓解措施:
- 禁用JMX接口
- 配置WAF拦截对
*.jmx的恶意请求 - 更新commons-collections到安全版本
- 实施输入验证和过滤
- 使用Java反序列化过滤器
6. 参考
- 普元EOS官方文档
- Commons Collections安全公告
- Java反序列化最佳实践
附录:常见问题解答
Q:调用CC6没有成功可能的原因?
A:可能原因包括:
- 目标环境缺少必要的依赖
- 使用的CC链版本与目标环境不匹配
- 网络防护设备拦截了恶意请求
- 目标系统已实施反序列化防护措施
建议尝试不同的CC链变种或使用其他利用链。