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 会将其视为有效,可能导致未授权的策略更改或服务中断。
失效流程
- 处理函数调用
c.GetRawData()读取请求体。 - 若出现错误,代码仅记录错误但 未返回,导致继续执行。
- 处理函数随后调用
openapi.Deserialize()解析 JSON 负载。 Deserialize()的错误同样只被记录,未提前返回。- 函数使用部分填充的
policyDataSubscription结构体继续执行,导致未定义行为。
修复步骤
- 定位易受攻击的函数
// File: api_datarepository.go func HandlePolicyDataSubsToNotifyPost(c *gin.Context) { // ... } - 在错误处理块中 添加显式返回:
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 } - 将结构体以指针方式传递 给
Deserialize(如上所示),以确保正确的反序列化。 - 重新编译并重新部署 UDR 服务,应用补丁后生效。
其他缓解措施
- 对 SBI(基于服务的接口)端点进行 网络分段,限制暴露面。
- 部署 Web 应用防火墙(WAF),使用规则依据 OpenAPI 模式验证 API 负载。
参考资料
欲获取完整分析,包括交互式图表和利用细节,请参阅项目网站上的完整报告。