Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-101259 — 针对 CVE-2026-101259 的可运行概念验证复现程序,演示 Apache Camel camel-coap 消费者在 Spring Boot 和 Quarkus 上的错误消息泄露问题,并包含修复验证。 | Kitploit
工具/GitHubGitHub/oscerd/cve-2026-101259
防御工具Web漏洞扫描器漏洞分析信息收集论文与研究学习与教育
GitHuboscerd/cve-2026-101259

CVE-2026-101259

针对 CVE-2026-101259 的可运行概念验证复现程序,演示 Apache Camel camel-coap 消费者在 Spring Boot 和 Quarkus 上的错误消息泄露问题,并包含修复验证。

查看仓库
11天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-101259 — camel-coap:消费者将异常消息发送给了 CoAP 客户端

针对 Apache Camel 漏洞的可运行概念验证复现程序:当 CoAP 消费者在路由已完成之后无法构建其响应时,CamelCoapResource 会捕获由此产生的异常,并将其消息作为 5.00 Internal Server Error 的负载发送回 CoAP 客户端:

} catch (Exception e) {
    cexchange.respond(ResponseCode.INTERNAL_SERVER_ERROR, e.getMessage());
}
运行时目录技术栈
Camel Spring Bootcamel-spring-boot/Spring Boot 3.5.13 + camel-coap 4.22.1
Camel Quarkuscamel-quarkus/Camel Quarkus 3.39.0(Quarkus 3.39.0,Camel 4.22.0)

为什么“路由完成后”这一点很重要

消费者会在路由返回之后将最终的消息体转换为 byte[] 负载,并将 CamelCoapMaxAge 和 CamelCoapETag 头转换为各自的类型——因此这一过程发生在路由的错误处理器之外。路由中的 onException 无法捕获它,因为失败发生在 消费者中,而不是在路由中。

cd camel-spring-boot          # or: cd camel-quarkus
mvn clean package
docker compose up -d --build
until [ "$(curl -s http://localhost:8080/exploit/ready)" = "Started" ]; do sleep 1; done
curl -s http://localhost:8080/exploit/attack
docker compose down

在受影响的构建上输出(两个运行时上完全相同):

1) Converting the body to the byte[] payload fails once the route has completed
     CoAP GET coap://127.0.0.1:5683/reading
     response code    : 5.00 (INTERNAL_SERVER_ERROR)
     response payload : Error during type conversion from type: com.example.FailingBackendStream to the
                        required type: byte[] with value com.example.FailingBackendStream@5eede7d7 due to
                        java.io.IOException: connection to prod-db.internal:5432 reset while streaming
                        sensor_readings for node edge-gateway-07.dc2.internal

2) The CamelCoapMaxAge header cannot be converted to its type
     CoAP GET coap://127.0.0.1:5683/reading-maxage
     response code    : 5.00 (INTERNAL_SERVER_ERROR)
     response payload : Error during type conversion from type: java.lang.String to the required type:
                        java.lang.Long with value not-a-number due to java.lang.NumberFormatException:
                        For input string: "not-a-number"

3) A route that simply fails
     CoAP GET coap://127.0.0.1:5683/reading-failing
     response code    : 2.05 (CONTENT)
     response payload : partially built response

What a remote CoAP client learned from these responses:
  the backend host and port, out of the cause's message : true
  class names of the cause                             : true
  the source and target types of the conversion        : true
  the string form of the offending value               : true
  a failed route answered with a SUCCESS code          : true

>>> PROVEN: ...

此类失败的消息会指明被转换值的类,携带该值的字符串形式,并以底层原因的类名和消息结尾——因此远程 CoAP 客户端可以读取类名和包名、值的字符串形式,以及底层原因所携带的任何内容,实践中可能包括后端的路径、主机名和连接详情。消费者无法抑制这一行为,不像 HTTP 消费者那样提供 muteException 用于此目的。

探针 3 是该问题的另一半。 失败路由所抛出的异常根本没有被发送:消费者没有检查交换是否失败,而是对路由失败返回了 2.05 Content 以及消息当时持有的任何正文——对失败的路由返回了成功代码。

这个复现器必须做对的一点: 仅仅存在没有对应转换器的正文是不够的。 在这种情况下,getBody(byte[].class) 返回 null 而不是抛出异常,消费者随后以空载荷返回 2.05——没有泄露。转换必须失败,而不是不可用,这就是为什么探针 1 使用一个在读取中途抛出异常的流式正文。头部探针则以另一种方式失败,通过一个形状错误的值。

可达性

要达到该泄露,需要一条路由,其已完成的响应能被远程客户端变为不可转换,这取决于路由的编写方式。此处没有任何认证,客户端发送的全部是普通的 CoAP GET 请求。

漏洞摘要

属性值
组件camel-coap (CamelCoapResource)
CWECWE-209(生成包含敏感信息的错误消息)
严重性中
攻击向量向消费者发送 CoAP 请求,其已完成的响应无法构建——正文无法转换为 byte[],或 CamelCoapMaxAge / CamelCoapETag 头部无法转换
影响远程 CoAP 客户端可读取类名和包名、值的字符串形式以及底层原因的消息——实践中包括路径、主机名和后端连接详情
受影响版本从 4.0.0 起至 4.18.5 之前,从 4.19.0 起至 4.22.2 之前
修复版本4.18.5、4.22.2、4.23.0
JIRACAMEL-25087
致谢Zhixi "Jace" Sun,独立安全研究员

公告:https://camel.apache.org/security/CVE-2026-101259.html

修复

消费者新增了 muteException 选项——在 coap、coaps、coap+tcp 和 coaps+tcp 端点上均可用——该选项在全部三个已修复的发布线上默认为 true,因此仅升级本身就已足够,无需更改配置。消费者仍返回 5.00 Internal Server Error,但带有空载荷,并且现在通过消费者的异常处理器报告该异常,因此静默它并不会对运维人员隐藏它。

它还会检查交换是否失败,并在同一规则下对路由失败返回 5.00 Internal Server Error,而此前返回的是 2.05 Content。

在 main 上通过 apache/camel#26994(2245feac)修复,向后移植到 camel-4.22.x 的 #27046(868d5604)以及 camel-4.18.x 的 #27048(aaf5bbf8)。

检查已修复的构建

将 camel.version 设置为 4.22.2 并再次运行。已针对 4.22.1 → 4.22.2 验证:

1) ... response code: 5.00 (INTERNAL_SERVER_ERROR)   response payload : <empty>
2) ... response code: 5.00 (INTERNAL_SERVER_ERROR)   response payload : <empty>
3) ... response code: 5.00 (INTERNAL_SERVER_ERROR)   response payload : <empty>

>>> NOT reproduced: the error payload was empty.

Probe 3 还会改变代码,从 2.05 Content 变为 5.00 Internal Server Error——路由失败现在会被当作失败来应答。

无需升级的缓解措施

确保路由完成后响应始终能够被构建:在每个从 coap 端点消费的路由的最后一步,将 body 转换为 byte[] 或 String(convertBodyTo),只给 CamelCoapMaxAge 和 CamelCoapETag 头赋予其自身类型的值,并添加一个 onException 处理器,将失败标记为已处理并显式设置响应 body——这样转换失败就会在路由内部被抛出并替换,而不是在消费者中。

免责声明

本仓库出于教育和防御目的发布:帮助 Apache Camel 用户理解该漏洞、验证自身是否受影响,并确认升级能够解决该问题。请勿将本材料用于您不拥有或运营的系统。

下载工具