代码审计系列之EOS开发框架
字数 1279 2025-08-24 07:48:33

EOS开发框架代码审计与安全分析

1. EOS框架简介

Primeton EOS(Enterprise Operation System)是基于J2EE平台、采用面向构件技术实现企业级应用开发、运行、管理、监控、维护的中间件平台。EOS6是普元公司推出的基于SOA架构,支持SCA1.0、SDO2.1规范的新一代EOS产品。

2. 默认配置与安全问题

2.1 默认web.xml配置分析

EOS框架的默认web.xml配置中暴露了两个主要的安全问题:

  1. WebService接口泄露:默认配置了多个WebService接口映射
  2. REST接口泄露:通过restconfig.properties文件映射REST接口

2.2 WebService接口泄露

默认配置了以下WebService接口:

<servlet-mapping>
    <servlet-name>ControllerServlet</servlet-name>
    <url-pattern>/WSActivityInstManagerService</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>ControllerServlet</servlet-name>
    <url-pattern>/WSAgentManagerService</url-pattern>
</servlet-mapping>
<!-- 其他类似配置... -->

这些接口可以通过访问http://localhost:8080/WSActivityInstManagerService?wsdl等方式获取WSDL描述。

2.3 REST接口泄露

REST接口通过restconfig.properties文件映射:

resteasy.resources=com.primeton.bps.web.control.restful.WebControlRestService

示例REST接口类:

@Path("/rest/services/bps/webcontrol")
@Consumes({"application/json", "application/x-www-form-urlencoded"})
@Produces({"application/json"})
public class WebControlRestService {
    @POST
    @Path("/queryParticipants")
    public Map<String, Object> queryParticipants(HashMap<String, Object> mapObject) throws WFServiceException, JSONException {
        // 实现逻辑
    }
    // 其他方法...
}

调用方式(JSON参数):

POST /rest/services/bps/webcontrol/queryProcessAndActivity HTTP/1.1
Content-Type: application/json
{"workItemID":1}

3. EOS框架核心机制分析

3.1 拦截器机制

EOS框架通过InterceptorFilterControllerServlet实现请求处理:

  1. 核心拦截器com.eos.access.http.InterceptorFilter
  2. 核心Servletcom.eos.access.http.ControllerServlet

拦截器初始化流程

  1. 初始化子拦截器:
public void init() {
    Map processors = RequstProcessors.INSTANCE.getAllProcessors();
    // 初始化处理器拦截器
    WebInterceptorConfig i$ = new WebInterceptorConfig();
    i$.setFilterId("ProcessorInterceptor_" + (String) interceptors.getKey());
    i$.setSortIdx(2147483647);
    i$.setPattern((String) interceptors.getKey());
    i$.setClassName(ProcessorWebInterceptor.class.getName());
    WebInterceptorManager.INSTANCE.addInterceptorConfig(i$);
    // 其他初始化...
}
  1. 解析handler-processor.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<handlers>
    <handler id="flowProcessor" suffix=".flow" sortIdx="0" class="com.primeton.ext.engine.core.processor.HttpPageFlowProcessor"/>
    <handler id="actionProcessor" suffix=".action" sortIdx="0" class="com.primeton.ext.engine.core.processor.ActionProcessor"/>
    <!-- 其他处理器配置... -->
</handlers>
  1. 解析handler-web.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<handlers>
    <handler id="WSInterceptor" sortIdx="0" pattern="/*" class="com.primeton.sca.host.webapp.SCAWebServiceServletFilter"/>
    <handler id="WebI18NInterceptor" sortIdx="1" pattern="/*" class="com.primeton.access.http.impl.WebI18NInterceptor"/>
    <!-- 其他拦截器配置... -->
</handlers>

拦截器执行流程

public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain filterChain) {
    WebInterceptorChainImpl var16 = (WebInterceptorChainImpl) WebInterceptorManager.INSTANCE.createChain(request, response);
    var16.setFilterChain(filterChain);
    var16.doIntercept(request, response);
}

拦截器链执行:

public void doIntercept(HttpServletRequest servletrequest, HttpServletResponse servletresponse) {
    if (this.pos == this.interceptors.size()) {
        this.filterChain.doFilter(servletrequest, servletresponse);
    } else {
        IWebInterceptor interceptor = (IWebInterceptor) this.interceptors.get(this.pos);
        interceptor.doIntercept(servletrequest, servletresponse, this);
    }
}

3.2 关键拦截器功能

  1. WSInterceptor:WebService请求路由
  2. WebI18NInterceptor:国际化处理
  3. HttpSecurityWebInterceptor:框架安全路由
  4. HttpRefererWebInterceptor:Referer检查
  5. UserLoginInterceptor:登录检查
  6. AccessedResourceInterceptor:资源访问权限检查

4. 安全漏洞分析

4.1 反序列化漏洞

HttpPageFlowProcessor处理流程中:

  1. 参数处理:
public void doProcess(HttpServletRequest request, HttpServletResponse response, IParameterSet parameterSetA) {
    Object var35 = request.getAttribute("_eosRequestDataContext");
    if (var35 != null && var35 instanceof PageflowRuntimeContext) {
        // 处理逻辑...
    }
}
  1. 参数构建:
public void build(IVariable[] vars, IDataContext context) {
    // 处理_eosFlowDataContext参数
    String var33 = (String) this.values.get("_eosFlowDataContext");
    if (var33 != null && !var33.equals("")) {
        Object var35 = ContextSerializer.deserialize(var33);
    }
}
  1. 反序列化实现:
public static Object deserialize(String codedString) throws IOException, ClassNotFoundException {
    BASE64Decoder decoder = new BASE64Decoder();
    byte[] buf = decoder.decodeBuffer(codedString);
    ByteArrayInputStream bais = new ByteArrayInputStream(buf);
    ObjectInputStream oos = new ObjectInputStream(bais);
    Object o = oos.readObject(); // 反序列化点
    oos.close();
    return o;
}

4.2 XXE漏洞

AjaxBizProcessor中:

public void init() {
    String e = this.request.getParameter("__ajaxParam");
    StringBuffer buffer = new StringBuffer(URLDecoder.decode(e, "UTF-8"));
    String xml = buffer.toString();
    Document var11;
    if (!getXMLHeader(xml).contains("encoding")) {
        String paramNode = MultipartResolver.getEncoding();
        var11 = XmlUtil.parseStringThrowsException(xml, paramNode); // XXE潜在点
    } else {
        var11 = XmlUtil.parseString(xml); // XXE潜在点
    }
}

5. 安全建议

  1. 避免默认配置保留发布

    • 移除不必要的WebService接口映射
    • 禁用或保护REST接口
  2. 接口安全

    • 对REST接口采用复杂命名
    • 实施适当的访问控制
  3. XML处理安全

    • 禁用XML解析库的实体解析
    • 在Filter中添加XXE防护
  4. 反序列化防护

    • 升级JDK版本
    • 替换不安全的反序列化实现
    • 实施反序列化白名单控制
  5. 其他建议

    • 实施输入验证和过滤
    • 启用安全日志记录
    • 定期进行安全审计
EOS开发框架代码审计与安全分析 1. EOS框架简介 Primeton EOS(Enterprise Operation System)是基于J2EE平台、采用面向构件技术实现企业级应用开发、运行、管理、监控、维护的中间件平台。EOS6是普元公司推出的基于SOA架构,支持SCA1.0、SDO2.1规范的新一代EOS产品。 2. 默认配置与安全问题 2.1 默认web.xml配置分析 EOS框架的默认web.xml配置中暴露了两个主要的安全问题: WebService接口泄露 :默认配置了多个WebService接口映射 REST接口泄露 :通过restconfig.properties文件映射REST接口 2.2 WebService接口泄露 默认配置了以下WebService接口: 这些接口可以通过访问 http://localhost:8080/WSActivityInstManagerService?wsdl 等方式获取WSDL描述。 2.3 REST接口泄露 REST接口通过 restconfig.properties 文件映射: 示例REST接口类: 调用方式(JSON参数): 3. EOS框架核心机制分析 3.1 拦截器机制 EOS框架通过 InterceptorFilter 和 ControllerServlet 实现请求处理: 核心拦截器 : com.eos.access.http.InterceptorFilter 核心Servlet : com.eos.access.http.ControllerServlet 拦截器初始化流程 初始化子拦截器: 解析 handler-processor.xml 配置文件: 解析 handler-web.xml 配置文件: 拦截器执行流程 拦截器链执行: 3.2 关键拦截器功能 WSInterceptor :WebService请求路由 WebI18NInterceptor :国际化处理 HttpSecurityWebInterceptor :框架安全路由 HttpRefererWebInterceptor :Referer检查 UserLoginInterceptor :登录检查 AccessedResourceInterceptor :资源访问权限检查 4. 安全漏洞分析 4.1 反序列化漏洞 在 HttpPageFlowProcessor 处理流程中: 参数处理: 参数构建: 反序列化实现: 4.2 XXE漏洞 在 AjaxBizProcessor 中: 5. 安全建议 避免默认配置保留发布 : 移除不必要的WebService接口映射 禁用或保护REST接口 接口安全 : 对REST接口采用复杂命名 实施适当的访问控制 XML处理安全 : 禁用XML解析库的实体解析 在Filter中添加XXE防护 反序列化防护 : 升级JDK版本 替换不安全的反序列化实现 实施反序列化白名单控制 其他建议 : 实施输入验证和过滤 启用安全日志记录 定期进行安全审计