针对同一 Apache Camel 漏洞的可运行概念验证复现程序,每种运行时一个:
| 运行时 | 目录 | 技术栈 |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.2.0 + camel-pqc 4.18.2 |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.36.0 + Camel Quarkus 3.36.0(捆绑 Camel 4.20.0) |
两者均为受影响版本(已在 4.18.3 / 4.21.0 中修复),且都展示了完全相同的缺陷:
FileBasedKeyLifecycleManager 将后量子密钥以 PKCS#8/X.509 JSON 格式持久化,但仍使用原始 ObjectInputStream 且不带 ObjectInputFilter 迁移旧版(Java 序列化)密钥文件——这是 CVE-2026-40048 修复不彻底的残留问题。getKey(keyId) 会回退到 migrateLegacyKey(),该方法会反序列化攻击者植入的 <keyId>.key 文件;对 KeyPair 的强制类型转换仅在 readObject() 返回之后发生,因此精心构造的对象会先执行(CWE-502)。
每个子目录都是一个自包含项目,带有各自的 Dockerfile、docker-compose.yml 和 README。简而言之,对于任一项目:
cd camel-spring-boot # 或:cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
| 属性 | 值 |
|---|---|
| 组件 | camel-pqc |
| 受影响类 | org.apache.camel.component.pqc.lifecycle.FileBasedKeyLifecycleManager#migrateLegacyKey(以及 migrateLegacyMetadata),外加 HashicorpVault / AwsSecretsManager 同类实现 |
| CWE | CWE-502(不可信数据反序列化) |
| 影响 | 当读取旧版密钥/元数据值时,可在密钥管理应用程序中执行代码 |
| 受影响版本 | 4.18.0 至 4.18.3 之前,4.19.0 至 4.21.0 之前(camel-pqc 密钥管理器在 4.16.0 之前不存在,因此 4.14.x 不受影响) |
| 修复版本 | 4.18.3、4.21.0 |
| JIRA | CAMEL-23726(PR apache/camel#23912,反向移植 #23914) |
| 致谢 | Yu Bao(PayPal) |
公告:https://camel.apache.org/security/CVE-2026-46590.html
这些复现程序仅供安全研究和授权测试使用,针对的是已公开披露并已修复的漏洞。未经明确许可,请勿将其用于任何系统。