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文件枚举, 代码执行, 反序列化漏洞, 域名枚举, 漏洞复现, 版权保护, 请求拦截