针对 Apache Camel 漏洞的可运行概念验证复现程序,该漏洞中 camel-pqc 的
FileBasedKeyLifecycleManager 将生成的密钥材料写入磁盘时采用了进程默认 umask 所产生的权限,
而不是将文件限制为仅所有者可访问。在 umask 允许组或其他用户读取的主机上(常见的 022),
未加密的私钥可被其他本地账户读取。暴露对象是本地一方
而非远程发送方,但在适用的情况下后果是彻底的:拥有私钥
即可攻破该部署使用它执行的所有签名和密钥交换。
| 运行时 | 目录 | 技术栈 |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-pqc 4.22.0(受影响;修复版本 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-pqc(Camel 4.22.0,受影响;修复对照 CQ 3.40.0 / Camel 4.22.1) |
两个模块均演示了受影响和修复后的行为。两者均在 umask 022(常见默认值)下运行,
这正是该缺陷的前提。
驱动程序使用真实的 FileBasedKeyLifecycleManager:它将 RSA 密钥对存储到新目录
(manager.storeKey("k1", keyPair, new KeyMetadata("k","RSA"))),然后读取所写入的
k1.private.json 的 POSIX 权限。
umask 022 下为 rw-r--r--(0644)— 因此组
和其他用户可读取未加密的私钥。rw-------(0600,仅所有者)写入。# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: rw-r--r-- private key; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
umask 022 && java -jar target/cve-2026-85300-pqc-key-permissions-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: rw------- ; >>> Not exploited
# Camel Quarkus
cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected (Camel 4.22.0): rw-r--r-- private key
docker compose down
# Patched control: CQ 3.40.0 ships Camel 4.22.1
mvn clean package -Dcamel-quarkus.version=3.40.0 -Dquarkus.platform.version=3.40.0
umask 022 && java -jar target/quarkus-app/quarkus-run.jar &
curl -s http://localhost:8080/exploit/attack # fixed: rw-------
| 属性 | 值 |
|---|---|
| 组件 | camel-pqc(FileBasedKeyLifecycleManager.storeKey) |
| CWE | CWE-276(默认权限不正确) |
| 严重性 | 中危 |
| 攻击向量 | 在具有宽松(例如 022)umask 的主机上,能够读取密钥目录的本地账户 |
| 影响 | 未加密的私钥泄露给其他本地账户 |
| 受影响版本 | 从 4.12.0 起至 4.18.5 之前,从 4.19.0 起至 4.22.1 之前 |
| 修复版本 | 4.18.5、4.22.1、4.23.0 |
| JIRA | CAMEL-24447 |
| 致谢 | Claude Security Scan Tool |
公告:https://camel.apache.org/security/CVE-2026-85300.html
Quarkus 受影响的模块基于 CQ 3.39.0(Camel 4.22.0)构建:
camel-quarkus-pqc在此处首次映射到受影响的 Camel 版本(CQ 3.29.0 / Camel 4.15.0 早于此处使用的基于文件的密钥生命周期管理器)。
FileBasedKeyLifecycleManager 现在会在写入之前将密钥目录和每个
私钥文件限制为其所有者可访问(通过 setPosixFilePermissions 设置为 rwx------ / rw-------,对于非 POSIX
文件系统则使用 java.io.File 作为回退方案),并在重写时收紧已存在的全局可读密钥文件
(该文件是被截断而非重新创建,因此否则会保留旧权限)。已使用宽松权限写入的密钥材料应被视为已泄露并进行轮换。
将密钥目录放置在只有服务账户才能遍历的路径上,并收紧进程 umask;将任何已使用宽松权限写入的密钥 视为已泄露并进行轮换。
本仓库出于教育和防御目的发布:帮助 Apache Camel 用户了解该漏洞、验证自己是否受影响,并确认升级可以解决该问题。 RSA 密钥对在进程内生成到临时目录中,并在检查后删除。请勿将本材料用于您不拥有或运营的系统。