Quarkus 数据泄露漏洞分析:上下文复制导致的潜在风险

本文详细分析了CVE-2025-49574漏洞,该漏洞存在于Quarkus框架中,由于Vert.x库更改了重复上下文的复制语义,可能导致敏感数据在不同事务间泄露。文章涵盖影响版本、漏洞原理、修复方案及临时缓解措施。

漏洞概述

CVE-2025-49574 是一个存在于Quarkus框架中的中等严重性安全漏洞。该漏洞的根源在于底层使用的Vert.x库(版本4.5.12)更改了“重复上下文”的复制语义,可能导致存储于上下文中的敏感数据在不同处理事务间意外泄露。

漏洞细节

影响范围:

  • 受影响版本:
    • io.quarkus:quarkus-vertx <= 3.15.5
    • io.quarkus:quarkus-vertx >= 3.16.0.CR1, <= 3.20.1
    • io.quarkus:quarkus-vertx >= 3.21.0.CR1, <= 3.24.0
  • 已修复版本:
    • 3.15.6
    • 3.20.2
    • 3.24.1

漏洞原理: “重复上下文”是用于在同步或异步处理过程中传播数据的对象。每个“事务”或“处理”都在其自身独立的重复上下文中运行。

在Vert.x 4.5.12之前,复制一个已存在的重复上下文会创建一个全新的(空的)上下文,这意味着新的上下文可用于管理一个独立的事务。然而,在Vert.x 4.5.12中,此语义被更改:父重复上下文的内容会被复制到新的上下文中,这潜在地导致了数据泄露。

Quarkus广泛使用Vert.x的重复上下文来实现上下文传播。因此,在新的语义下,一个事务的数据可能泄露给另一个事务。大量数据存储在重复上下文中,包括请求范围、安全详情和元数据。

触发场景: 复制重复上下文的情况较为罕见,仅发生在少数几个地方:

  1. 使用OTel(OpenTelemetry)的Quarkus REST客户端(但属于同一事务,因此不存在泄露)。
  2. Quarkus消息传递连接器。
  3. Quarkus SmallRye Health(同一事务,无泄露)。

修复与缓解

官方补丁: 经过与Vert.x团队的讨论,此项更改将在Vert.x 4.x版本中被回滚。Vert.x 5将添加新的API来区分这两种情况。

临时解决方案: 在复制重复上下文时,可以使用以下代码来避免潜在的数据泄露:

1
((ContextInternal) VertxContext.getRootContext(ctx)).duplicate()

一旦包含了修复的Vert.x版本被集成,此解决方案将不再需要。但即使修复后,此方案仍然有效。

参考信息

安全评分

CVSS v3.1 总体评分:6.4(中等)

基础指标:

  • 攻击向量: 相邻网络
  • 攻击复杂度:
  • 所需权限:
  • 用户交互:
  • 影响范围: 未改变
  • 机密性影响:
  • 完整性影响:
  • 可用性影响:

弱点枚举:

  • CWE-668: 资源暴露至错误范围

EPSS(漏洞被利用预测评分系统)评分: 0.026%(第7百分位)

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计