普元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 请求拦截机制

  1. 核心拦截器:web.xml中配置了com.eos.access.http.InterceptorFilter过滤器,拦截所有请求

  2. 拦截链创建

    • 拦截器创建WebInterceptorChain处理请求
    • 通过请求的servletPath遍历configs中的WebInterceptorConfig对象
    • 使用正则匹配决定哪些IWebInterceptor对象加入处理链
  3. 配置来源

    • handler-web.xml文件
    • handler-processor.xml文件
    • contribution.eosinf文件

2.2 鉴权机制分析

普元EOS的鉴权主要在两个组件中实现:

  1. UserLoginWebInterceptor
  2. UserLoginCheckedFilter

鉴权流程:

  1. 检查登录状态 → 已登录则放行
  2. 检查白名单路径 → 在白名单则放行
  3. 检查黑名单路径 → 在黑名单则抛出异常
  4. 既不在白名单也不在黑名单 → 放行

注:黑白名单路径在user-config.xml中配置

3. 漏洞细节

3.1 漏洞入口

  1. 路由配置:在handler-processor.xml中配置了*.jmx路由处理
  2. 处理类JmxServiceProcessor类的process()方法

3.2 漏洞触发点

JmxServiceProcessor.process()方法中存在以下不安全操作:

  1. 直接从request获取请求体
  2. 使用请求体作为参数创建ObjectInputStream对象
  3. 调用readObject()方法进行反序列化

3.3 利用条件

  1. 存在commons-collections依赖
  2. commons-collections版本在可利用范围内

4. 漏洞复现

4.1 基本复现步骤

  1. 构造恶意序列化payload(使用CC链)
  2. 向目标发送POST请求:
    • URL: /default/.jmx
    • 请求体: 序列化payload

4.2 高级利用 - CC6变种

标准CC6通过反射调用Runtime.getRuntime().exec()执行命令,但功能有限。改进方案:

// 通过JS引擎实现复杂操作(如内存马注入)
// 示例代码结构(具体实现需根据实际情况调整):
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
engine.eval("复杂JS代码");

优势:

  • 可执行更复杂的操作
  • 绕过部分防护措施
  • 实现内存驻留等高级攻击

5. 防御建议

  1. 升级到官方修复版本
  2. 临时缓解措施:
    • 禁用JMX接口
    • 配置WAF拦截对*.jmx的恶意请求
    • 更新commons-collections到安全版本
  3. 实施输入验证和过滤
  4. 使用Java反序列化过滤器

6. 参考

  1. 普元EOS官方文档
  2. Commons Collections安全公告
  3. Java反序列化最佳实践

附录:常见问题解答

Q:调用CC6没有成功可能的原因?
A:可能原因包括:

  • 目标环境缺少必要的依赖
  • 使用的CC链版本与目标环境不匹配
  • 网络防护设备拦截了恶意请求
  • 目标系统已实施反序列化防护措施

建议尝试不同的CC链变种或使用其他利用链。

普元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 4.2 高级利用 - CC6变种 标准CC6通过反射调用 Runtime.getRuntime().exec() 执行命令,但功能有限。改进方案: 优势: 可执行更复杂的操作 绕过部分防护措施 实现内存驻留等高级攻击 5. 防御建议 升级到官方修复版本 临时缓解措施: 禁用JMX接口 配置WAF拦截对 *.jmx 的恶意请求 更新commons-collections到安全版本 实施输入验证和过滤 使用Java反序列化过滤器 6. 参考 普元EOS官方文档 Commons Collections安全公告 Java反序列化最佳实践 附录:常见问题解答 Q:调用CC6没有成功可能的原因? A:可能原因包括: 目标环境缺少必要的依赖 使用的CC链版本与目标环境不匹配 网络防护设备拦截了恶意请求 目标系统已实施反序列化防护措施 建议尝试不同的CC链变种或使用其他利用链。