漏洞概述 漏洞名称: AUSF: null byte injection in supiOrSuci causes HTTP 500 internal service failure 漏洞编号: #1048 漏洞类型: CWE-20 (Improper Input Validation) 漏洞描述: AUSF (Authentication Server Function) 接受包含空字节 (\x00) 和其他控制字符的 supiOrSuci 值,而未进行验证。这些值被转发到 UDM 的 URL 路径中,导致 Go 的 net/url.Parse() 失败。AUSF 返回 HTTP 500 "System failure" 而不是 HTTP 400 "Bad Request"。 影响: HTTP 500 响应泄露内部实现细节 (net/url: invalid control character in URL),便于后端指纹识别。该漏洞在 5.4% 的 special_chars 突变中触发,产生 HTTP 500。 影响范围 受影响版本: free5GC Version: Docker image free5gc-fuzz-latest 操作系统: Ubuntu 22.04 Server 内核版本: 6.8.0-110-generic Go 版本: 1.21+ 部署环境: Docker containers on bridge network 172.24.0.0/16 修复方案 预期行为: 1. 在构建 UDM URL 之前验证 supiOrSuci。 2. 返回 HTTP 400 "Bad Request" 并附带描述性的 ProblemDetails 正文。 3. 不在响应中泄露内部 net/url 解析错误。 建议修复代码: POC 代码 其他信息 发现方式: 通过自动化 5G 协议模糊测试发现,使用 5g-fuzzer 框架。 攻击链: 1. 攻击者 -> AUSF: POST "supiOrSuci": "imsi-\x00...", ... 2. AUSF: 350N 解析 OK(空字节在 350N 中有效) 3. AUSF -> UDM: GET /nudm-ueau/v1/imsi-\x00.../security-information/... 4. UDM: net/url.Parse() 失败(\x00 非法,RFC 3986) 5. AUSF -> UDM: error 6. AUSF -> 攻击者: HTTP 500 ("message": "System failure") 与 C/C++ 5GCs 的对比: 相同的突变(空字节在字符串字段中)在 OAI (C++) 和 Open5GS (C) 中导致 SIGSEGV/SIGABRT,但在 free5GC (Go) 中仅返回 HTTP 500。Go 的内存安全将崩溃转换为可恢复的错误——服务存活,但拒绝服务同样有效。 CVE 请求: 已请求 CVE ID,GitHub 将在 3 个工作日内分配。