分析Emissary 的反序列化漏洞 (CVE-2021-32634)
字数 1407 2025-08-05 08:19:38

Emissary 反序列化漏洞分析 (CVE-2021-32634) 教学文档

1. 漏洞概述

CVE-2021-32634 是 NSA 开发的 Emissary 项目中发现的两个不安全的反序列化漏洞。这些漏洞存在于 WorkSpaceClientEnqueueAction 和 WorkSpaceAdapter 类中,允许攻击者通过精心构造的序列化数据执行任意代码。

2. Emissary 项目简介

Emissary 是一个基于 P2P 的数据驱动工作流引擎,运行在异构的、可能广泛分散的、多层的 P2P 计算资源网络中。主要特点包括:

  • 工作流不是预先计划的,而是随着数据发现而动态确定
  • 高度可配置的框架
  • 主要组件:
    • emissary.place.ServiceProviderPlace:用户扩展执行工作的基类
    • emissary.core.MobileAgent:管理工作流的类
    • emissary.directory.DirectoryPlace:管理可用服务及 P2P 网络连接

3. 漏洞详细分析

3.1 第一个漏洞 (WorkSpaceClientEnqueueAction)

漏洞位置emissary.server.mvc.internal.WorkSpaceClientEnqueueAction

漏洞代码

@POST
@Path("/WorkSpaceClientEnqueue.action")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.TEXT_PLAIN)
public Response workspaceClientEnqueue(
    @FormParam(WorkSpaceAdapter.CLIENT_NAME) String clientName,
    @FormParam(WorkSpaceAdapter.WORK_BUNDLE_OBJ) String workBundleString) {
    
    // 漏洞代码
    final ObjectInputStream ois = new ObjectInputStream(
        new ByteArrayInputStream(workBundleString.getBytes("8859_1")));
    WorkBundle paths = (WorkBundle) ois.readObject();
    success = place.enque(paths);
    // ...
}

攻击向量

  • 通过认证的 POST 请求访问 /WorkSpaceClientEnqueue.action 端点
  • 表单参数 WorkSpaceAdapter.WORK_BUNDLE_OBJ (即 tpObj) 被解码并反序列化
  • 攻击者可构造恶意序列化数据实现 RCE

限制条件

  • 需要身份验证后才能利用
  • 由于修复了 CSRF 漏洞,无法通过 CSRF 代表已登录用户利用

3.2 第二个漏洞 (WorkSpaceAdapter)

漏洞位置emissary.server.mvc.adapters.WorkSpaceAdapter

漏洞代码

public boolean inboundEnque(final HttpServletRequest req) throws NamespaceException {
    final EnqueRequestBean bean = new EnqueRequestBean(req);
    // ...
}

// EnqueRequestBean 构造函数
EnqueRequestBean(final HttpServletRequest req) {
    setPlace(RequestUtil.getParameter(req, CLIENT_NAME));
    setPaths(RequestUtil.getParameter(req, WORK_BUNDLE_OBJ));
}

// setPaths 方法中的反序列化
void setPaths(final String s) {
    final ObjectInputStream ois = new ObjectInputStream(
        new ByteArrayInputStream(s.getBytes("8859_1")));
    this.paths = (WorkBundle) ois.readObject();
}

攻击向量

  • 通过调用 inboundEnque() 方法并传入恶意序列化数据
  • 目前代码中未直接调用此方法,属于"定时炸弹"漏洞

4. 漏洞利用条件

  1. 对于第一个漏洞:

    • 攻击者需要有效的身份验证凭据
    • 能够发送 POST 请求到 /WorkSpaceClientEnqueue.action
    • 能够控制 WORK_BUNDLE_OBJ 参数
  2. 对于第二个漏洞:

    • 需要应用程序在后续版本中启用 inboundEnque() 方法调用
    • 能够控制传入的 WORK_BUNDLE_OBJ 参数

5. 修复建议

  1. 避免使用 Java 原生序列化机制处理不受信任的数据
  2. 使用安全的替代方案,如:
    • JSON 或 XML 等安全的数据交换格式
    • 使用白名单验证反序列化的类
    • 实现自定义的序列化/反序列化逻辑
  3. 对于必须使用 Java 序列化的场景:
    • 实现 ObjectInputFilter 限制可反序列化的类
    • 使用加密签名验证序列化数据的完整性

6. 漏洞影响

成功利用这些漏洞可能导致:

  • 远程代码执行 (RCE)
  • 服务器完全被控制
  • 敏感数据泄露
  • 进一步内网渗透

7. 参考链接

  1. GitHub Security Lab 报告
  2. Emissary GitHub 仓库
  3. CVE-2021-32634 详细信息
Emissary 反序列化漏洞分析 (CVE-2021-32634) 教学文档 1. 漏洞概述 CVE-2021-32634 是 NSA 开发的 Emissary 项目中发现的两个不安全的反序列化漏洞。这些漏洞存在于 WorkSpaceClientEnqueueAction 和 WorkSpaceAdapter 类中,允许攻击者通过精心构造的序列化数据执行任意代码。 2. Emissary 项目简介 Emissary 是一个基于 P2P 的数据驱动工作流引擎,运行在异构的、可能广泛分散的、多层的 P2P 计算资源网络中。主要特点包括: 工作流不是预先计划的,而是随着数据发现而动态确定 高度可配置的框架 主要组件: emissary.place.ServiceProviderPlace :用户扩展执行工作的基类 emissary.core.MobileAgent :管理工作流的类 emissary.directory.DirectoryPlace :管理可用服务及 P2P 网络连接 3. 漏洞详细分析 3.1 第一个漏洞 (WorkSpaceClientEnqueueAction) 漏洞位置 : emissary.server.mvc.internal.WorkSpaceClientEnqueueAction 类 漏洞代码 : 攻击向量 : 通过认证的 POST 请求访问 /WorkSpaceClientEnqueue.action 端点 表单参数 WorkSpaceAdapter.WORK_BUNDLE_OBJ (即 tpObj ) 被解码并反序列化 攻击者可构造恶意序列化数据实现 RCE 限制条件 : 需要身份验证后才能利用 由于修复了 CSRF 漏洞,无法通过 CSRF 代表已登录用户利用 3.2 第二个漏洞 (WorkSpaceAdapter) 漏洞位置 : emissary.server.mvc.adapters.WorkSpaceAdapter 类 漏洞代码 : 攻击向量 : 通过调用 inboundEnque() 方法并传入恶意序列化数据 目前代码中未直接调用此方法,属于"定时炸弹"漏洞 4. 漏洞利用条件 对于第一个漏洞: 攻击者需要有效的身份验证凭据 能够发送 POST 请求到 /WorkSpaceClientEnqueue.action 能够控制 WORK_BUNDLE_OBJ 参数 对于第二个漏洞: 需要应用程序在后续版本中启用 inboundEnque() 方法调用 能够控制传入的 WORK_BUNDLE_OBJ 参数 5. 修复建议 避免使用 Java 原生序列化机制处理不受信任的数据 使用安全的替代方案,如: JSON 或 XML 等安全的数据交换格式 使用白名单验证反序列化的类 实现自定义的序列化/反序列化逻辑 对于必须使用 Java 序列化的场景: 实现 ObjectInputFilter 限制可反序列化的类 使用加密签名验证序列化数据的完整性 6. 漏洞影响 成功利用这些漏洞可能导致: 远程代码执行 (RCE) 服务器完全被控制 敏感数据泄露 进一步内网渗透 7. 参考链接 GitHub Security Lab 报告 Emissary GitHub 仓库 CVE-2021-32634 详细信息