Skip to content
KitploitKITPLOIT
工具博客
Log in
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-42779 — 概念验证,演示 Apache MINA 中反序列化过滤器绕过导致远程代码执行,包含详细的根因分析、漏洞利用 PoC 及修复指导。 | Kitploit
工具/GitHubGitHub/dinosn/cve-2026-42779
漏洞分析漏洞利用Web应用程序漏洞利用论文与研究学习与教育
GitHubdinosn/cve-2026-42779

CVE-2026-42779

概念验证,演示 Apache MINA 中反序列化过滤器绕过导致远程代码执行,包含详细的根因分析、漏洞利用 PoC 及修复指导。

查看仓库
11285个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-42779 — Apache MINA 反序列化过滤器绕过导致远程代码执行

CVSS 3.1: 9.8 严重 AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H CWE: CWE-502 不可信数据反序列化 报告者: Venkatraman Kumar, Securin 公告: Apache 邮件列表

概述

Apache MINA 版本 2.1.0 至 2.1.11 和 2.2.0 至 2.2.6 在 AbstractIoBuffer.resolveClass() 中存在反序列化过滤器绕过漏洞。当 ObjectStreamClass.forClass() 返回 null 时,用于限制可反序列化 Java 类的 acceptMatchers 白名单会被完全跳过。

攻击者只要能够通过网络访问使用 ObjectSerializationCodecFactory 的 MINA 端点,即可构造绕过类过滤器的协议载荷,通过标准 Java 反序列化 gadget 链(例如 Commons Collections)实现完全远程代码执行。

这是 CVE-2026-41635 的不完整修复。原始补丁应用于 2.0.x 分支,但由于合并疏忽,从未移植到 2.1.x 或 2.2.x。

受影响版本

分支受影响版本修复版本
2.1.x2.1.0 – 2.1.112.1.12
2.2.x2.2.0 – 2.2.62.2.7

根本原因

该漏洞位于 AbstractIoBuffer.resolveClass() 中,该函数负责在 Java 对象反序列化期间处理类解析。

MINA 使用自定义序列化协议,包含两种类描述符类型:

  • 类型 0 — 非 Serializable 类、基本类型和数组(标准 Java 类描述符格式)
  • 类型 1 — Serializable 类(紧凑类名格式)

在易受攻击的代码中,acceptMatchers 过滤器仅在类型 1 分支中检查(当 forClass() 返回非 null 时)。类型 0 分支直接调用 Class.forName(),完全绕过过滤器:

// AbstractIoBuffer.java — 易受攻击 (2.2.6)
protected Class<?> resolveClass(ObjectStreamClass desc) {
    Class<?> clazz = desc.forClass();

    if (clazz == null) {
        // BUG: 未检查 acceptMatchers — 过滤器被完全绕过
        return Class.forName(name, false, classLoader);
    } else {
        // 过滤器仅在此处应用
        for (ClassNameMatcher matcher : acceptMatchers) { ... }
    }
}

2.2.7 中的修复将过滤器检查移至分支之前:

// AbstractIoBuffer.java — 已修复 (2.2.7)
protected Class<?> resolveClass(ObjectStreamClass desc) {
    String className = desc.getName();

    // 首先应用过滤器,无论 forClass() 结果如何
    if (!acceptMatchers.stream().anyMatch(m -> m.matches(className))) {
        throw new ClassNotFoundException("Class not in accept list " + className);
    }

    Class<?> clazz = desc.forClass();
    // ... 后续安全解析
}

漏洞利用

攻击流程

攻击者                                    易受攻击的 MINA 服务器
   |                                              |
   |  1. 构造包含类型 0 描述符的 MINA 载荷         |
   |     用于 gadget 链类                          |
   |                                              |
   |  2. 发送到使用                               |
   |     ObjectSerializationCodecFactory 的端点 -->|
   |                                              |
   |          3. readClassDescriptor() 读取类型 0  |
   |             → 委托给父类(标准 Java)         |
   |                                              |
   |          4. resolveClass() 发现 forClass()==null
   |             → 调用 Class.forName() 且无过滤器 |
   |                                              |
   |          5. gadget 链被完全反序列化           |
   |             → readObject() 触发链             |
   |             → Runtime.exec() 执行             |
   |                                              |
   |                              远程代码执行成功 |

前提条件

  1. 目标应用使用 IoBuffer.getObject() 或 ObjectSerializationCodecFactory
  2. 目标配置了 accept()(未配置过滤器的应用已可通过 CVE-2026-41635 被利用)
  3. classpath 中存在 gadget 链库(Commons Collections、Spring 等)

关键洞察

攻击者控制序列化字节流。通过对 Serializable gadget 链类使用类型 0 类描述符(而非类型 1),反序列化图中的每个类都会绕过 acceptMatchers 过滤器,无论应用的白名单配置如何。

概念验证

三个 PoC 展示了逐步升级的影响:

PoC证明内容
FilterBypassPoC.java对基本类型、非 Serializable 类、数组的过滤器绕过
CraftedBypassPoC.java攻击者构造的类型 0 载荷绕过过滤器加载任意 Serializable 类
RcePoC.java通过过滤器绕过使用 CC6 gadget 链实现完全远程代码执行

1. 过滤器绕过(MINA 2.2.6 — 易受攻击)

不在接受列表中的类可不受限制地被反序列化:

易受攻击的 MINA 2.2.6 上的过滤器绕过

2. 构造载荷 — 任意类加载

攻击者构造包含类型 0 描述符的 MINA 协议载荷,绕过仅允许 String 的接受列表加载任意类:

构造载荷绕过

3. 完全远程代码执行 — 命令执行

CC6 变体 gadget 链(HashSet → TiedMapEntry → LazyMap → ChainedTransformer → Runtime.exec())通过过滤器绕过实现命令执行:

在 MINA 2.2.6 上确认远程代码执行

4. 过滤器绕过(MINA 2.2.7 — 已修补)

相同测试在修复版本上被阻止:

在 MINA 2.2.7 上过滤器绕过被阻止

5. 远程代码执行被阻止(MINA 2.2.7 — 已修补)

gadget 链被过滤器拒绝:

在 MINA 2.2.7 上远程代码执行被阻止

快速开始(Docker)

最快的测试方式 — 无需 JDK 或 Maven:

# 克隆此仓库
git clone https://github.com/dinosn/CVE-2026-42779.git
cd CVE-2026-42779

# 构建并运行所有 PoC
docker build -t cve-2026-42779 .
docker run --rm cve-2026-42779

# 运行单个 PoC
docker run --rm cve-2026-42779 bypass     # 仅过滤器绕过
docker run --rm cve-2026-42779 crafted    # 构造载荷绕过
docker run --rm cve-2026-42779 rce        # 完全远程代码执行

# 进入 shell 进行探索
docker run --rm -it cve-2026-42779 shell

该镜像捆绑了易受攻击的 MINA 2.2.6 JAR、Commons Collections 3.2.2 以及所有三个预编译的 PoC。所有内容均在容器内自包含运行。

复现(从源码构建)

如果您更倾向于从源码构建:

# 克隆并构建易受攻击的版本
git clone https://github.com/apache/mina.git /tmp/apache-mina
cd /tmp/apache-mina
git checkout 2.2.6
mvn install -pl mina-core -DskipTests -q

# 下载 commons-collections(用于远程代码执行 PoC)
curl -sL "https://repo1.maven.org/maven2/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2.jar" \
  -o commons-collections-3.2.2.jar

# 编译 PoC
javac -cp mina-core/target/mina-core-2.2.6.jar FilterBypassPoC.java
javac -cp mina-core/target/mina-core-2.2.6.jar CraftedBypassPoC.java
javac -cp mina-core/target/mina-core-2.2.6.jar:commons-collections-3.2.2.jar RcePoC.java

# 运行过滤器绕过 PoC
java -cp .:mina-core/target/mina-core-2.2.6.jar FilterBypassPoC

# 运行构造载荷 PoC
java -cp .:mina-core/target/mina-core-2.2.6.jar CraftedBypassPoC

# 运行完全远程代码执行 PoC
java -Dorg.apache.commons.collections.enableUnsafeSerialization=true \
     --add-opens java.base/java.util=ALL-UNNAMED \
     --add-opens java.base/java.lang.reflect=ALL-UNNAMED \
     -cp .:mina-core/target/mina-core-2.2.6.jar:commons-collections-3.2.2.jar \
     RcePoC

或者使用附带的 Makefile:

make run-all    # 构建并运行所有三个 PoC
make run-rce    # 仅运行远程代码执行 PoC

要求: JDK 11+ 和 Maven(用于源码构建)或 Docker(用于容器)

修复建议

升级到 Apache MINA 2.1.12 或 2.2.7。

如果无法立即升级:

  • 不要对不可信输入使用 IoBuffer.getObject() 或 ObjectSerializationCodecFactory
  • 考虑使用 JEP 290 序列化过滤器作为额外的防御层

时间线

日期事件
2026-05-01Apache MINA PMC 发布公告
2026-05-01发布修复版本 2.1.12 和 2.2.7
2026-05-02开发并测试此 PoC

参考

  • Apache MINA 公告
  • CVE 记录
  • NVD 条目
  • Apache MINA 下载

免责声明

此概念验证仅用于防御性安全研究、教育和授权渗透测试。请负责任地使用,且仅针对您有权测试的系统。

下载工具