oscerd/CVE-2026-43867
GitHub: oscerd/CVE-2026-43867
CVE-2026-43867 复现程序,演示 Apache Camel camel-pqc 的 AwsSecretsManagerKeyLifecycleManager 因缺少反序列化过滤器导致的远程代码执行漏洞。
Stars: 0 | Forks: 0
# camel-pqc AWS Secrets Manager Key-Metadata 不安全反序列化复现程序 (CVE-2026-43867)
本项目演示了 Apache Camel 的 `camel-pqc` 组件中的一个 **Java 反序列化漏洞**,追踪编号为 **CVE-2026-43867**。
`AwsSecretsManagerKeyLifecycleManager.deserializeMetadata()` 通过对存储的值进行 Base64 解码,并使用原始的
`java.io.ObjectInputStream.readObject()` 且**没有使用 `ObjectInputFilter`** 的方式,从 AWS Secrets Manager 的 secret 中
读取持久化的后量子密钥元数据——向 `KeyMetadata` 的类型转换仅在 `readObject()` 返回*之后*发生,
因此任何 `readObject()` 的副作用都会优先执行。拥有该 secret 写入权限 (`secretsmanager:PutSecretValue`) 的主体
可以存储一个精心构造的序列化对象,该对象会在正常的密钥生命周期操作中被反序列化,从而可能导致**代码执行**。
安全通告:
## 漏洞概述
| 属性 | 值 |
|----------|-------|
| **组件** | `camel-pqc` (`AwsSecretsManagerKeyLifecycleManager`) |
| **受影响类** | `org.apache.camel.component.pqc.lifecycle.AwsSecretsManagerKeyLifecycleManager#deserializeMetadata` |
| **CWE** | CWE-502: Deserialization of Untrusted Data |
| **影响** | 在密钥管理应用程序中执行代码(需要对元数据 secret 具有写权限) |
| **受影响版本** | 从 4.18.0 到 4.18.3 之前,从 4.19.0 到 4.21.0 之前 |
| **修复版本** | 4.18.3, 4.21.0 (camel-pqc **不**在 4.14.x LTS 线上) |
| **JIRA** | CAMEL-23726 |
| **报告者** | Venkatraman Kumar (Securin) |
## 技术细节
```
// AwsSecretsManagerKeyLifecycleManager - affected 4.18.2
private KeyMetadata deserializeMetadata(String base64) throws Exception {
byte[] data = Base64.getDecoder().decode(base64);
ByteArrayInputStream bais = new ByteArrayInputStream(data);
try (ObjectInputStream ois = new ObjectInputStream(bais)) { // NO ObjectInputFilter
return (KeyMetadata) ois.readObject(); // gadget fires here, before the cast
}
}
```
`getKeyMetadata(keyId)` 读取名为 `//metadata` 的 secret,解析其 JSON 信封
(`{"metadata":"","keyId":...,"algorithm":...}`),并将 `metadata` 字段传递给
`deserializeMetadata`。修复方案 (4.18.3 / 4.21.0) 引入了一个共享的 `KeyMetadataCodec`,它将所有管理器的元数据存储为
JSON,并使用允许列表(allow-list)`ObjectInputFilter` 来约束剩余的传统 `ObjectInputStream` 读取操作。
## 攻击者与受害者
**受害者**是使用 AWS 管理器管理 PQC 密钥的应用程序。**攻击者**是任何
可以写入元数据 secret (`secretsmanager:PutSecretValue`) 的主体。此 PoC 使用 **LocalStack** 来模拟 AWS
Secrets Manager;`/exploit/attack` 端点写入一个精心构造的元数据 secret,然后驱动管理器的
读取路径。
```
CVE-2026-43867/
├── pom.xml # camel-pqc 4.18.2 + aws-sdk secretsmanager 2.41.28 + commons-collections 3.2.1
├── Dockerfile # runs the app (--add-opens for gadget build)
├── docker-compose.yml # LocalStack (Secrets Manager) + the reproducer app
├── README.md
└── src/main/
├── java/com/example/
│ ├── Application.java
│ ├── Gadget.java # CommonsCollections6 gadget, fires during readObject()
│ └── ExploitController.java # writes the crafted secret, then calls getKeyMetadata()
└── resources/
└── application.properties
```
## 前置条件
- Java 17+ 和 Maven 3.8+
- Docker(用于运行 LocalStack 和应用程序)
## 复现步骤
### 步骤 1:构建并启动所有组件
```
mvn clean package -DskipTests
docker compose up -d --build
```
这将启动 LocalStack(模拟 AWS Secrets Manager)和复现程序应用程序,该应用程序通过端点覆盖将其
`AwsSecretsManagerKeyLifecycleManager` 指向 LocalStack。
### 步骤 2:触发反序列化 (RCE)
```
curl -s http://localhost:8080/exploit/attack
# -> 已将精心构造的序列化 metadata 写入 AWS Secrets Manager secret 'pqc/keys/victim-key/metadata'。
# getKeyMetadata() 抛出了 java.lang.ClassCastException(符合预期 — gadget 在 readObject 期间运行 ...)
# # >>> RCE 证明 — /tmp/pwned 存在:true
```
### 步骤 3:验证
```
docker exec cve-2026-43867 ls -la /tmp/pwned
```
### 清理
```
docker compose down
```
## 攻击向量
任何使用 `AwsSecretsManagerKeyLifecycleManager` 且其密钥元数据 secret 可被非应用程序自身受信身份
写入的应用程序。反序列化发生在普通的密钥生命周期操作期间
(`getKeyMetadata`, `loadExistingKeys`, `listKeys`,轮换检查等)。
## 利用条件
1. 应用程序在受影响的版本上使用了 camel-pqc 的 `AwsSecretsManagerKeyLifecycleManager`。
2. 攻击者可以写入该元数据 secret(对其具有 `secretsmanager:PutSecretValue` 权限)。
3. **classpath 中存在 gadget 库**(此处的 `commons-collections:3.2.1`)。
## 推荐修复方案
升级至 **4.18.3 / 4.21.0** (CAMEL-23726)。元数据将以 JSON 格式存储,并且剩余的所有传统
`ObjectInputStream` 读取操作都将受到允许列表 `ObjectInputFilter` 的约束。
## 缓解措施
在升级之前:
1. 将 camel-pqc 元数据 secret 上的 `secretsmanager:PutSecretValue` 权限限制为仅应用程序自身的身份
(最小权限 IAM)。
2. 将 PQC 密钥材料保存在一个**独立**的 secret 中,与任何受信程度较低的主体可以写入的数据隔离开来。
3. 从 classpath 中**移除 gadget 库**(升级/移除 commons-collections 3.x 及类似库)。
## 免责声明
此复现程序仅用于**安全研究和授权测试**,针对的是一个**已公开披露且已修复**的
漏洞。未经明确许可,请勿将其用于攻击任何系统。
标签:Apache Camel, AWS, DPI, GHAS, Go语言工具, Java安全, JS文件枚举, 代码执行, 反序列化漏洞, 域名枚举, 漏洞复现, 版权保护, 请求拦截