free5GC AUSF CVE-2026-55784
HIGHAttack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconIdentify target subscriber SUCI via NAS traffic or enumeration
-
DeliveryReach AUSF SBI endpoint on port 8100 (no auth in default config)
-
ExploitSend concurrent POST /nausf-auth/v1/ue-authentications flood for target SUCI
-
InstallEach request unconditionally overwrites UePool[SUPI] with new EAP-AKA' session material
-
C2Legitimate UE EAP response verified against mismatched K_aut from flood context
-
ExecuteAT_MAC verification fails, AUSF returns EAP notification failure
-
ImpactAuthentication DoS persists while flood is sustained
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V15 - Secure Coding and Architecture Concurrency control, locking
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | The attacker must have network access to the AUSF SBI/N12 HTTP interface, which defaults to TCP port 8100 bound on 0.0.0.0. In the default free5GC configuration, OAuth2 is disabled, so no credentials or client certificates are required - network reachability alone is sufficient. The attacker must know or be able to determine the target subscriber's SUCI (Subscription Concealed Identifier) or SUPI (Subscription Permanent Identifier); in a 5G network, SUCI is transmitted in NAS Registration Request messages but is not a publicly enumerable identifier without prior access to NAS-layer traffic. The attack is not a one-shot exploit: denial of service persists only while the concurrent request flood is actively sustained against the target SUPI; once the flood stops, subsequent legitimate authentication attempts may succeed if no further overwrite occurs. The vulnerability does not expose authentication keying material to the attacker and does not crash the AUSF process. In production deployments that enforce mTLS and OAuth2 on the SBI and isolate the 5G core SBA via network segmentation, the attacker would additionally require control of a trusted internal network function or valid client credentials - substantially raising the bar beyond the default configuration. |
| Impact | The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, score 7.5) reflects the default free5GC configuration where OAuth2 is disabled and the AUSF binds to 0.0.0.0:8100, making the SBI endpoint reachable without authentication. In hardened production deployments enforcing mTLS, OAuth2, and SBA network isolation, the effective attack surface narrows significantly - the attacker would additionally need internal network access or control of a trusted 5G core network function. No CISA KEV listing is present in the intelligence, and no EPSS score was provided; the absence of a KEV entry means active exploitation is not confirmed by CISA, though that absence does not rule out opportunistic use against research-grade or misconfigured deployments. The documented proof-of-concept - reproduced with a protocol-valid Python client in a controlled free5GC lab - materially elevates the real-world risk compared to a purely theoretical race condition. The impact is targeted and persistent rather than broad: only the chosen subscriber's authentication is blocked, and only while the flood is sustained, which lowers the aggregate blast radius but makes this a precise subscriber-targeting capability in 5G testbeds or open deployments. With no patch available, all mitigation depends on compensating controls (OAuth2 enforcement, SBI network isolation, per-SUPI rate limiting) that free5GC deployments - frequently research or academic - may not have in place. |
| Exploit ScenarioDerived | An attacker with network access to the AUSF SBI endpoint on TCP port 8100 - reachable without credentials in the default free5GC configuration - identifies the SUCI of a target subscriber and launches a sustained flood of concurrent POST /nausf-auth/v1/ue-authentications requests for that SUCI using a protocol-valid HTTP/2 client. Each flood request is accepted, creates a fresh AusfUeContext with new EAP-AKA' session material, and silently replaces the in-progress context in UePool; the legitimate UE's EAP response, computed against the original challenge's K_aut, reaches the AUSF and fails AT_MAC verification against the flood request's K_aut, returning an EAP notification failure. A Python proof-of-concept implementing this attack flow is referenced in the GHSA advisory and was confirmed to reproduce the failure in a controlled lab. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 28, 2026
Authentication denial of service in free5GC AUSF v1.4.4 and current main allows an attacker with access to the AUSF SBI/N12 interface to permanently block a target subscriber from completing 5G authentication by flooding the AUSF with concurrent POST /nausf-auth/v1/ue-authentications requests for the same SUPI. Each concurrent request silently overwrites the active EAP-AKA' session context stored under that SUPI key, so the legitimate UE's EAP response is validated against mismatched cryptographic material (K_aut, XRES) and fails AT_MAC verification. No vendor patch has been released; a working proof-of-concept was reproduced in a controlled lab and is documented in the upstream GHSA advisory, with no CISA KEV listing identified at time of analysis.
RemediationAI
No vendor-released patch has been identified at time of analysis. The upstream GHSA advisory at https://github.com/free5gc/free5gc/security/advisories/GHSA-334q-h5g3-fpxv recommends the following code-level fix: replace the SUPI-keyed UePool design with a UUID-per-session approach, where each POST /nausf-auth/v1/ue-authentications generates a unique session ID, stores the AusfUeContext under that ID, and returns a session-scoped context URL - eliminating the shared-key collision entirely. As an alternative, if only one active authentication per SUPI is intended, use an atomic LoadOrStore guard and return HTTP 409 with cause AUTHENTICATION_IN_PROGRESS for concurrent attempts. As compensating controls while awaiting a patch: enable and enforce OAuth2 and mTLS on all SBI interfaces to prevent unauthenticated access to the AUSF N12 endpoint (trade-off: requires PKI infrastructure that many research deployments lack); apply network-layer access controls to restrict POST /nausf-auth/v1/ue-authentications to authorized AMF instances only (trade-off: operational overhead in dynamic lab topologies); and implement per-SUPI rate limiting on that endpoint (trade-off: may affect rapid re-authentication scenarios in high-mobility environments). Adding integration tests for concurrent same-SUPI authentication requests is recommended to prevent regression.
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in go
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The AUSF (Authentication Server Function) is a 5G standalone core network function defined by 3GPP that executes EAP-AKA' and 5G-AKA subscriber authentication procedures over the SBI N12 interface. The affected Go package (pkg:go/github.com_free5gc_ausf, confirmed vulnerable at v1.4.4 and current main) maintains a global sync.Map named UePool, indexed by SUPI (Subscriber Permanent Identifier), to track per-subscriber authentication state. CWE-362 (Concurrent Execution Using Shared Resource with Improper Synchronization) applies precisely: while sync.Map ensures atomicity of individual map operations, the session design conflates the subscriber identity with the session identifier. Every incoming authentication request in internal/sbi/processor/ue_authentication.go calls AddAusfUeContextToPool(), which executes UePool.Store(supi, newCtx) unconditionally - no LoadOrStore guard, no AuthStatus check, no unique session UUID. The EAP-AKA' confirmation path retrieves the context solely by SUPI via GetAusfUeContext(currentSupi), making a racing request's freshly stored context indistinguishable from the legitimate one at verification time, and causing the AT_MAC and XRES checks to run against the wrong cryptographic session material.
Know when Python gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Default AUSF binds to 0.0.0.0 with OAuth2 disabled, enabling unauthenticated network access; impact is pure availability DoS with no confidentiality or integrity exposure.
Primary rating from Vendor (https://github.com/free5gc/free5gc).
CVSS VectorVendor: https://github.com/free5gc/free5gc
DescriptionCVE.org
Summary
The AUSF component of free5GC stores per-subscriber authentication state in a global sync.Map keyed only by SUPI. Every incoming authentication request creates a new AusfUeContext and stores it under that SUPI key without checking whether an authentication procedure is already in progress and without generating a per-session unique identifier.
An attacker with access to the AUSF SBI/N12 interface can send concurrent POST /nausf-auth/v1/ue-authentications requests for the same target SUPI. Each request is accepted and overwrites the previous authentication context. A valid EAP-AKA' response for an earlier challenge is then verified against the latest overwritten context, whose K_aut, XRES, and EapID no longer match the challenge. The result is a targeted authentication denial of service for that SUPI while the request flood is maintained.
This issue was confirmed on github.com/free5gc/ausf v1.4.4 and current main as of June 2026.
Details
The vulnerable context pool is defined in internal/context/context.go.
UePool is a sync.Map, which makes individual map operations safe, but it does not make the authentication procedure state safe. The problem is the session design: the key is only the SUPI, and Store() unconditionally replaces any active context for that SUPI.
type AUSFContext struct {
suciSupiMap sync.Map
UePool sync.Map
// ...
}
type AusfUeContext struct {
Supi string
// ...
// for EAP-AKA'
K_aut string
XRES string
Rand string
EapID uint8
Resynced bool
}
func NewAusfUeContext(identifier string) (ausfUeContext *AusfUeContext) {
ausfUeContext = new(AusfUeContext)
ausfUeContext.Supi = identifier
return ausfUeContext
}
func AddAusfUeContextToPool(ausfUeContext *AusfUeContext) {
ausfContext.UePool.Store(ausfUeContext.Supi, ausfUeContext)
}The vulnerable sequence is executed for every authentication request in internal/sbi/processor/ue_authentication.go:
ueid := authInfoResult.Supi
ausfUeContext := ausf_context.NewAusfUeContext(ueid)
ausfUeContext.ServingNetworkName = snName
ausfUeContext.AuthStatus = models.AusfUeAuthenticationAuthResult_ONGOING
ausfUeContext.UdmUeauUrl = udmUrl
ausf_context.AddAusfUeContextToPool(ausfUeContext)There is no guard such as LoadOrStore, no AUTHENTICATION_IN_PROGRESS response, no rate limit per SUPI, and no unique authentication-session ID in the context URL. For EAP-AKA', the returned context URL is derived directly from the SUCI/SUPI path:
/nausf-auth/v1/ue-authentications/{suci}/eap-sessionAll concurrent authentication attempts for the same subscriber therefore point to the same logical context URL, while the backing AusfUeContext in UePool is repeatedly replaced.
When the EAP response is later processed, the AUSF looks up the current context by SUPI:
currentSupi := ausf_context.GetSupiFromSuciSupiMap(eapSessionID)
ausfCurrentContext := ausf_context.GetAusfUeContext(currentSupi)The EAP-AKA' response is then verified against the current context's K_aut and XRES:
K_autStr := ausfCurrentContext.K_aut
XMAC := CalculateAtMAC(K_aut, decodeEapAkaPrimePkt.MACInput)
MAC := decodeEapAkaPrimePkt.Attributes[ausf_context.AT_MAC_ATTRIBUTE].Value
XRES := ausfCurrentContext.XRES
RES := hex.EncodeToString(decodeEapAkaPrimePkt.Attributes[ausf_context.AT_RES_ATTRIBUTE].Value)
if !bytes.Equal(MAC, XMAC) {
eapOK = false
eapErrStr = "EAP-AKA' integrity check fail"
} else if XRES == RES {
logger.AuthELog.Infoln("Correct RES value, EAP-AKA' auth succeed")
// ...
}If another request has overwritten the context between challenge issuance and response processing, the legitimate response is checked against the wrong K_aut and fails the AT_MAC verification.
Attack flow
The attack is selective for a target SUPI:
- The legitimate procedure starts and the AUSF stores
ctx_LEGITunderUePool[target_supi]. - The attacker sends many concurrent authentication requests for the same target SUCI/SUPI.
- Each request obtains a new authentication vector and stores a new context under the same SUPI key.
ctx_LEGITis overwritten byctx_ATTACK.- The legitimate EAP response, computed with
K_aut_LEGIT, reaches/eap-session. - The AUSF retrieves
ctx_ATTACKby SUPI and computesXMACwithK_aut_ATTACK. - AT_MAC verification fails and the AUSF returns an EAP-AKA' notification failure.
When later contexts carry different session material, a continuous flood prevents the target subscriber from completing authentication because the AUSF's stored context keeps changing before the response is processed.
PoC and evidence
The issue was reproduced in two phases in a controlled free5GC lab.
Phase 1: context overwrite
Experiment:
- 3 rounds of 8 concurrent
POST /nausf-auth/v1/ue-authenticationsrequests. - Same target SUCI:
suci-0-001-01-0-0-0-0000000002. - AUSF listening on
0.0.0.0:8100; PoC connected to127.0.0.1:8100.
Observed result:
- 24/24 requests returned HTTP 201.
- 24 distinct EapIDs were issued:
[131, 11, 157, 99, 182, 232, 127, 228, 119, 36, 104, 10,
107, 61, 66, 26, 110, 9, 210, 202, 53, 224, 237, 86]- All responses used the same auth context URL:
/nausf-auth/v1/ue-authentications/suci-0-001-01-0-0-0-0000000002/eap-session- AUSF logs showed repeated context creation for the same SUCI/SUPI in a short interval:
Add SuciSupiPair (suci-0-001-01-0-0-0-0000000002, imsi-001010000000002) to map.
Use EAP-AKA' auth method
| 201 | POST | /nausf-auth/v1/ue-authentications
...This confirms that concurrent authentication requests for the same SUPI are accepted independently but collapse onto one shared context key.
Phase 2: valid EAP response fails after overwrite
The second PoC used a mock UDM with h2c support that returns different EAP-AKA' vectors by request counter for the same SUCI. This makes the overwrite directly observable:
| Request | Vector class | XRES | Effect |
|---|---|---|---|
| 1st | LEGIT | 0102030405060708 | response client computes AT_MAC with K_aut_LEGIT |
| 2nd and later | ATTACK | deadbeefcafe0000 | flood overwrites AUSF context with K_aut_ATTACK |
Baseline without flood:
POST /ue-authentications
-> EapID=120, context with K_aut_LEGIT stored
POST /eap-session with AT_MAC(K_aut_LEGIT)
-> AUSF log: Correct RES value, EAP-AKA' auth succeed
-> HTTP 200, EAP successRace condition run:
POST /ue-authentications
-> EapID=243, context with K_aut_LEGIT stored
20 concurrent POST /ue-authentications requests for the same SUCI
-> 20/20 accepted
-> K_aut_ATTACK overwrites K_aut_LEGIT in UePool
POST /eap-session with AT_MAC(K_aut_LEGIT)
-> AUSF validates against K_aut_ATTACK
-> AUSF log: EAP-AKA' failure: EAP-AKA' integrity check fail
-> HTTP 200, EAP notification failureCritical AUSF log excerpt:
Add SuciSupiPair (suci-0-001-01-0-0-0-0000000002, imsi-001010000000002) to map.
... repeated for the same SUCI/SUPI ...
EapAuthComfirmRequest
[WARN] EAP-AKA' failure: EAP-AKA' integrity check fail
| 200 | 127.0.0.1 | POST | /nausf-auth/v1/ue-authentications/.../eap-session |Baseline and attack logs are in the private evidence bundle:
hallazgos/finding13-ausf-auth-race/evidencia/20260527-195933-race-condition-p2-final/The final PoC uses a Python client that constructs a protocol-valid synthetic EAP-AKA' response from known vectors. It is not a full UERANSIM/AMF trace, and the P2 run uses a mock UDM returning distinct LEGIT/ATTACK vectors to make the overwrite observable. The synthetic response is sufficient to prove the AUSF state bug because the baseline succeeds with the same client and vectors, while the flood run fails at the exact AT_MAC check predicted by the code.
Impact
The confirmed impact is targeted denial of authentication service for a chosen SUPI.
An attacker with access to the AUSF SBI/N12 interface can keep a subscriber from authenticating by continuously overwriting that subscriber's AUSF context. The AUSF process remains running; this is not a process crash and does not expose authentication material to the attacker. The availability impact is on the AUSF's primary security function for the targeted subscriber.
In the default free5GC deployment observed in the lab, the AUSF reported OAuth2 disabled and listened on 0.0.0.0:8100. In a production deployment with strict SBI isolation, mTLS, OAuth2, or firewalling, the attacker would need access to the internal SBA network or control of a network function that can send AUSF authentication requests.
Suggested remediation
The most robust fix is to stop using SUPI as the sole authentication-session key.
Recommended design:
- Generate a unique session identifier for every authentication request.
- Store the
AusfUeContextunder that session identifier. - Return the session identifier in the auth context URL.
- On
/eap-sessionor/5g-aka-confirmation, retrieve the exact session context by session ID rather than by SUPI.
Conceptual example:
sessionID := uuid.New().String()
ausfUeContext := ausf_context.NewAusfUeContext(sessionID)
ausfUeContext.Supi = ueid
// populate context...
ausf_context.AddAusfUeContextToPool(ausfUeContext)
// Return:
// /nausf-auth/v1/ue-authentications/{sessionID}/eap-sessionIf the intended behavior is to allow only one active authentication procedure per SUPI, use an atomic check-and-insert operation and reject concurrent attempts explicitly:
if existing, loaded := ausf_context.LoadOrStoreAusfUeContext(ueid, newCtx); loaded {
if existing.AuthStatus == models.AusfUeAuthenticationAuthResult_ONGOING {
c.JSON(http.StatusConflict, models.ProblemDetails{
Status: http.StatusConflict,
Cause: "AUTHENTICATION_IN_PROGRESS",
})
return
}
}A mutex inside AusfUeContext alone is not sufficient if new requests are still allowed to replace the global map entry for the same SUPI.
Additional hardening:
- Apply per-SUPI rate limiting on
POST /ue-authentications. - Enable and enforce OAuth2/mTLS for SBI access in deployments.
- Add tests for concurrent authentication requests targeting the same SUPI.
Prior art / non-duplication note
Known related issues appear to be different:
- CVE-2026-33063 / GHSA-4jrw-92fg-4jwx affects free5GC AUSF, but concerns a nil interface conversion / DoS in
GetSupiFromSuciSupiMap. It does not cover authentication context overwrite by concurrent requests. - CVE-2026-44318 affects free5GC BSF and concerns a different concurrency issue in a different NF. It does not cover AUSF
UePoolauthentication state keyed by SUPI.
Articles & Coverage 1
Technical POC Analysis
CWE-362 (race condition / concurrent execution using a shared resource with improper synchronization).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A denial-of-service vulnerability in free5GC AUSF (the 5G authentication service) allows attackers on the internal network to block subscribers from completing authentication, preventing access to 5G services. Publicly available exploit code exists, and no vendor patch has been released. This poses a direct operational risk to service availability and customer connectivity for organizations operating free5GC-based authentication infrastructure.
Network segmentation restricting AUSF SBI/N12 interface access to trusted network elements only; rate limiting and request deduplication on concurrent authentication attempts per subscriber; enhanced monitoring and alerting for abnormal authentication session patterns; least-privilege access controls on internal 5G network interfaces. No vendor-released patch identified at time of analysis.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Race conditions occur when multiple concurrent requests exploit the brief time gap between checking a condition and acting upon it (TOCTOU - Time of Check, Time of Use).
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Affected Products (CPE)CVE.org
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
GHSA-334q-h5g3-fpxv
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB