CVE-2026-40343:CVE-2026-40343:free5GC UDR 策略数据订阅中的 Fail-Open 请求处理

发布: (2026年4月22日 GMT+8 09:40)
4 分钟阅读
原文: Dev.to

Source: Dev.to

漏洞概述

  • 漏洞编号: CVE-2026-40343
  • CVSS 评分: 6.9(完整性)
  • 发布时间: 2026-04-21
  • CWE: CWE‑754(对异常或异常条件的检查不当)
  • 攻击向量: 网络
  • 利用状态:
  • KEV 状态: 未列出

在 free5GC UDR 服务(最高至 1.4.2 版)中存在一个“失效打开”请求处理漏洞。处理 Policy Data 订阅的 POST 请求时,应用在获取 HTTP 请求体或反序列化 JSON 时出现错误后未终止执行。于是继续使用未初始化的数据,攻击者可以创建无效或非预期的 Policy Data 通知订阅并操纵内部状态。

技术细节

  • 组件: free5GC UDR(用户数据仓库)
  • 受影响版本: ≤ 1.4.2
  • 根本原因: HandlePolicyDataSubsToNotifyPost(文件 api_datarepository.go)中缺少错误返回路径。
  • 影响: 完整性——攻击者可以注入格式错误的订阅对象,UDR 会将其视为有效,可能导致未授权的策略更改或服务中断。

失效流程

  1. 处理函数调用 c.GetRawData() 读取请求体。
  2. 若出现错误,代码仅记录错误但 未返回,导致继续执行。
  3. 处理函数随后调用 openapi.Deserialize() 解析 JSON 负载。
  4. Deserialize() 的错误同样只被记录,未提前返回。
  5. 函数使用部分填充的 policyDataSubscription 结构体继续执行,导致未定义行为。

修复步骤

  1. 定位易受攻击的函数
    // File: api_datarepository.go
    func HandlePolicyDataSubsToNotifyPost(c *gin.Context) {
        // ...
    }
  2. 在错误处理块中 添加显式返回
    rawData, err := c.GetRawData()
    if err != nil {
        log.Errorf("Failed to read request body: %v", err)
        c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request body"})
        return   // <-- added
    }
    
    var policyDataSubscription openapi.PolicyDataSubscription
    if err := openapi.Deserialize(rawData, &policyDataSubscription); err != nil {
        log.Errorf("JSON deserialization error: %v", err)
        c.JSON(http.StatusBadRequest, gin.H{"error": "invalid JSON payload"})
        return   // <-- added
    }
  3. 将结构体以指针方式传递Deserialize(如上所示),以确保正确的反序列化。
  4. 重新编译并重新部署 UDR 服务,应用补丁后生效。

其他缓解措施

  • 对 SBI(基于服务的接口)端点进行 网络分段,限制暴露面。
  • 部署 Web 应用防火墙(WAF),使用规则依据 OpenAPI 模式验证 API 负载。

参考资料

欲获取完整分析,包括交互式图表和利用细节,请参阅项目网站上的完整报告。

0 浏览
Back to Blog

相关文章

阅读更多 »