Apache Camel 漏洞的复现仓库。在该漏洞中,azure-files 消费者与其他远程文件消费者一样派生自同一个 RemoteFileConsumer 基类,并通过一个简单的拼接辅助方法组合远程路径;它为每个轮询到的文件构建远程路径时,将配置的目录与 Azure File 共享列表中报告的名称直接拼接,且没有包含性检查。因此,一个不是单一路径段的列表名称会在检索时解析到被轮询目录之外,并且在启用 delete/move/preMove/moveFailed/readLock=rename 时,还会导致删除或重命名。
本复现器仅限作者使用 —— 见下文 —— 它是可运行的 CVE-2026-79983(
camel-ftp)和 CVE-2026-79984(camel-mina-sftp)的 Azure-Files 姊妹项目,后两者针对嵌入式恶意服务器端到端演示了相同的 根本原因和修复。
因此,本仓库包含确切受影响的消费者接线(一个真实的 camel-azure-files 路由,见
AzureFilesRoute.java / AzureFilesRoutes.java),记录了机制和修复,并将可运行的端到端演示交由上述 FTP 和 SFTP 复现器完成。
| 运行时 | 目录 | 技术栈 |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-azure-files 4.22.0(受影响;修复版本 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-azure-files 3.29.0(Camel 4.15.0,受影响) |
两个模块均可在没有 Azure 凭据的情况下正常编译和启动(路由以 autoStartup=false 定义)。设置
-Daz.enabled=true 以及 az.account/az.share/az.sharedKey,即可将确切受影响的路由指向你自己的 Azure 文件共享。
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # prints the explanation + links to the runnable PoCs
docker compose down
| 属性 | 值 |
|---|---|
| 组件 | camel-azure-files(azure-files scheme) |
| CWE | CWE-22(对路径名的限制不恰当,导致访问受限目录之外的文件) |
| 严重程度 | 高 |
| 攻击向量 | 一个不是单一路径段的共享列表名称(由服务器提供) |
| 影响 | 读取——以及在启用 delete/move/readLock=rename 时,删除或重命名——轮询目录之外的文件,使用端点的凭据 |
| 受影响版本 | 从 4.0.0 起至 4.18.5 之前,从 4.19.0 起至 4.22.1 之前 |
| 修复版本 | 4.18.5、4.22.1、4.23.0 |
| JIRA | CAMEL-24487 |
| 致谢 | 来自上海交通大学 NSSL 的 Dilrevx |
公告:https://camel.apache.org/security/CVE-2026-79986.html
azure-files 消费者现在应用与其他远程文件消费者相同的包含性检查:解析后的路径若落在轮询目录之外,将被跳过并记录警告,因此携带路径遍历段的列表名称不再能到达 retrieve/delete/rename 操作数。
通过 filter/antInclude/include 约束消费者,使其仅接受单段名称,并避免对列表不完全可信的共享执行 delete/move/preMove/moveFailed/readLock=rename。
本仓库出于教育和防御目的发布:帮助 Apache Camel 用户理解该漏洞、验证自身是否受影响,并确认升级可解决该问题。请勿将本材料用于您不拥有或运营的系统。