CVE-2026-44329: Github.com/free5gc/smf Free5GC's SMF UPI Management Interface Vulnerability

CRITICAL
Advisory Identifier: GHSA-3258-qmv8-frp3
CVSS 10.0
CWE-306 CWE-862
Published
Advisory Summary

CVE-2026-44329 is a CRITICAL (CVSS 10.0) free5gc's smf upi management interface vulnerability (CWE-306: Missing Authentication for Critical Function) affecting Github.com/free5gc/smf libraries in the Go ecosystem. The issue involves free5gc's smf upi management interface lacks auth middleware; unauthenticated topology read/write requests reach handlers. Remediation is available by upgrading affected packages to version 1.4.3.

CVE-2026-44329 at a Glance

CVE Identifier CVE-2026-44329
GHSA Identifier GHSA-3258-qmv8-frp3
Severity CRITICAL
CVSS v3.1 Base Score 10.0
CWE Classification CWE-306: Missing Authentication for Critical Function
Affected Product Github.com/free5gc/smf
Package Ecosystem Go
Published Date
Last Updated

Security Impact

CVSS: 10.0

The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:H/A:H).

Attack Vector Network (AV:N)
Attack Complexity Low (AC:L)
Privileges Required None (PR:N)
User Interaction None (UI:N)
Scope Changed (S:C)
Confidentiality Low (C:L)
Integrity High (I:H)
Availability High (A:H)

How to Fix CVE-2026-44329

To remediate this vulnerability, upgrade all affected Github.com/free5gc/smf dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

github.com/free5gc/smf fixed: 1.4.3
Upgrade github.com/free5gc/smf to 1.4.3
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

inspect dependencies for github.com/free5gc/smf

How to Check if You Are Affected

To determine whether your application is affected by CVE-2026-44329, inspect your project dependencies for Github.com/free5gc/smf:

inspect dependencies for github.com/free5gc/smf

Analyze the terminal output to locate any version of Github.com/free5gc/smf in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 1.4.3), your application is affected.

Note: Verify declared build manifests and deployed runtime container environments.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-306: Missing Authentication for Critical Function, where the product does not perform any authentication for functionality that requires a provable user identity or consumes a significant amount of resources. In Github.com/free5gc/smf, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

### Summary free5GC's SMF mounts the `UPI` management route group without OAuth2/bearer-token authorization middleware. A network attacker who can reach SMF on the SBI can hit `UPI` endpoints with no `Authorization` header at all, and the requests reach the SMF business handlers. In the running Docker lab this was directly demonstrated for read (`GET /upi/v1/upNodesLinks`), write (`POST /upi/v1/upNodesLinks` with attacker-controlled UP-node and link payload), and delete (`DELETE /upi/v1/upNodesLinks/{nodeID}`) operations. The defect is route-group-scoped: there is no inbound auth middleware on the UPI group at all, while a control comparison against the sibling `nsmf-oam` group on the same SMF instance shows OAM IS protected (no-token request returns `401 Unauthorized`). So this is not a global config gap -- it is specifically that the UPI group was mounted without the auth middleware that the OAM group has. ### Details Validated against the SMF container in the official Docker compose lab. - Source repo tag: `v4.2.1` - Running Docker image: `free5gc/smf:v4.2.0` - Docker validation date: 2026-03-13 Control comparison on the same SMF instance: - `GET /upi/v1/upNodesLinks` (no token) -> `200 OK` - `GET /nsmf-oam/v1/` (no token) -> `401 Unauthorized` This side-by-side proves OAuth2 middleware is wired in for `nsmf-oam` but not for `UPI` on the same process. Code evidence (paths in `free5gc/smf`): - UPI group mounted WITHOUT auth middleware: `NFs/smf/internal/sbi/server.go:76` - OAM group mounted WITH auth middleware (control): `NFs/smf/internal/sbi/server.go:95` - UPI business handlers (read / write / delete on `upNodesLinks`): - `NFs/smf/internal/sbi/api_upi.go:44` - `NFs/smf/internal/sbi/api_upi.go:60` - `NFs/smf/internal/sbi/api_upi.go:84` ### PoC Reproduced end-to-end against the running SMF at `http://10.100.200.6:8000`. 1. READ UP-nodes/links with NO `Authorization` header -> `200 OK`: ``` curl -i http://10.100.200.6:8000/upi/v1/upNodesLinks ``` 2. WRITE: POST attacker-controlled UPF node and link with NO `Authorization` header -> `200 OK`: ``` curl -i -X POST http://10.100.200.6:8000/upi/v1/upNodesLinks \ -H 'Content-Type: application/json' \ --data '{"links":[{"A":"gNB1","B":"UPF-POC-20260313","weight":1}],"upNodes":{"UPF-POC-20260313":{"type":"UPF","nodeID":"198.51.100.20","addr":"198.51.100.20","sNssaiUpfInfos":[{"sNssai":{"sst":1,"sd":"010203"},"dnnUpfInfoList":[{"dnn":"internet"}]}]}}}' ``` 3. DELETE with FORGED token -> `404 Not Found` from business logic (auth was bypassed; the 404 is a business response, not an auth rejection): ``` curl -i -X DELETE http://10.100.200.6:8000/upi/v1/upNodesLinks/UPF-POC-20260313 \ -H 'Authorization: Bearer not-a-real-token' ``` 4. CONTROL: same instance, sibling OAM route, no token -> `401 Unauthorized`: ``` curl -i http://10.100.200.6:8000/nsmf-oam/v1/ ``` SMF container logs (`docker logs smf`) confirm the side-by-side behavior: ``` [INFO][SMF][GIN] | 200 | GET | /upi/v1/upNodesLinks [INFO][SMF][GIN] | 401 | GET | /nsmf-oam/v1/ [INFO][SMF][GIN] | 404 | DELETE | /upi/v1/upNodesLinks/UPF-POC-20260313 [INFO][SMF][GIN] | 200 | POST | /upi/v1/upNodesLinks ``` ### Impact Missing inbound authentication (CWE-306) and authorization (CWE-862) on the SMF `UPI` SBI route group. Severity is scored against the route group's intended capability surface (UP-node and link topology management), which is realized by the demonstrated PoC: an unauthenticated network attacker can already today read SMF's view of the UP-plane topology, inject attacker-controlled UPF nodes and link entries, and target deletions of named entries. Any party that can reach SMF on the SBI can: - Read SMF's current UP-node and link topology view anonymously. - Inject attacker-controlled UPF entries (with attacker-chosen nodeID / addr / S-NSSAI / DNN), poisoning SMF's view of which UPFs serve which slices/DNNs and biasing subsequent UPF selection / PFCP path establishment for legitimate PDU sessions. - Issue topology delete operations against named UPF entries, denying or disrupting legitimate UPF participation in SMF's selection logic. The defect is route-group-scoped: there is no auth middleware on the UPI group at all, so every UPI endpoint inside this group inherits the missing inbound auth boundary, and the same-instance OAM control proves this is the UPI mount specifically (not a global SMF config issue). Affected: free5gc v4.2.1. Upstream issue: https://github.com/free5gc/free5gc/issues/887 Upstream fix: https://github.com/free5gc/smf/pull/197

CVE-2026-44329 Affected Github.com/free5gc/smf Versions

1 component(s)
Fixed Versions:
1.4.3
Product / Package Ecosystem Affected Versions Fixed Version
github.com/free5gc/smf
Go
< 1.4.3
1.4.3

References

Frequently Asked Questions

What is CVE-2026-44329?
CVE-2026-44329 is a security vulnerability in Github.com/free5gc/smf involving free5GC's SMF UPI management interface lacks auth middleware; unauthenticated topology read/write requests reach handlers under CWE-306: Missing Authentication for Critical Function.
Which Github.com/free5gc/smf versions are affected?
Affected versions include releases prior to 1.4.3 across affected packages: github.com/free5gc/smf.
What version fixes CVE-2026-44329?
Upgrading to 1.4.3 (or the latest patched release for your respective branch) resolves the vulnerability.
Is github.com/free5gc/smf affected?
Yes, github.com/free5gc/smf is affected in releases prior to 1.4.3. Upgrade your dependency to 1.4.3 or later.
What is the CVSS score of CVE-2026-44329?
CVE-2026-44329 has a CVSS v3.1 base score of 10.0 (CRITICAL) with vector string CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:H/A:H.
What CWE is associated with CVE-2026-44329?
CVE-2026-44329 is classified under CWE-306: Missing Authentication for Critical Function (The product does not perform any authentication for functionality that requires a provable user identity or consumes a significant amount of resources.).
How can I check Go dependencies for CVE-2026-44329?
Run the dependency tree command: 'inspect dependencies for github.com/free5gc/smf'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-3258-qmv8-frp3",
  "modified" : "2026-06-08T20:12:01Z",
  "published" : "2026-05-08T23:02:23Z",
  "aliases" : [ "CVE-2026-44329" ],
  "summary" : "free5GC's SMF UPI management interface lacks auth middleware; unauthenticated topology read/write requests reach handlers",
  "details" : "### Summary\nfree5GC's SMF mounts the `UPI` management route group without OAuth2/bearer-token authorization middleware. A network attacker who can reach SMF on the SBI can hit `UPI` endpoints with no `Authorization` header at all, and the requests reach the SMF business handlers. In the running Docker lab this was directly demonstrated for read (`GET /upi/v1/upNodesLinks`), write (`POST /upi/v1/upNodesLinks` with attacker-controlled UP-node and link payload), and delete (`DELETE /upi/v1/upNodesLinks/{nodeID}`) operations.\n\nThe defect is route-group-scoped: there is no inbound auth middleware on the UPI group at all, while a control comparison against the sibling `nsmf-oam` group on the same SMF instance shows OAM IS protected (no-token request returns `401 Unauthorized`). So this is not a global config gap -- it is specifically that the UPI group was mounted without the auth middleware that the OAM group has.\n\n### Details\nValidated against the SMF container in the official Docker compose lab.\n- Source repo tag: `v4.2.1`\n- Running Docker image: `free5gc/smf:v4.2.0`\n- Docker validation date: 2026-03-13\n\nControl comparison on the same SMF instance:\n- `GET /upi/v1/upNodesLinks` (no token) -> `200 OK`\n- `GET /nsmf-oam/v1/` (no token) -> `401 Unauthorized`\n\nThis side-by-side proves OAuth2 middleware is wired in for `nsmf-oam` but not for `UPI` on the same process.\n\nCode evidence (paths in `free5gc/smf`):\n- UPI group mounted WITHOUT auth middleware: `NFs/smf/internal/sbi/server.go:76`\n- OAM group mounted WITH auth middleware (control): `NFs/smf/internal/sbi/server.go:95`\n- UPI business handlers (read / write / delete on `upNodesLinks`):\n  - `NFs/smf/internal/sbi/api_upi.go:44`\n  - `NFs/smf/internal/sbi/api_upi.go:60`\n  - `NFs/smf/internal/sbi/api_upi.go:84`\n\n### PoC\nReproduced end-to-end against the running SMF at `http://10.100.200.6:8000`.\n\n1. READ UP-nodes/links with NO `Authorization` header -> `200 OK`:\n```\ncurl -i http://10.100.200.6:8000/upi/v1/upNodesLinks\n```\n\n2. WRITE: POST attacker-controlled UPF node and link with NO `Authorization` header -> `200 OK`:\n```\ncurl -i -X POST http://10.100.200.6:8000/upi/v1/upNodesLinks \\\n  -H 'Content-Type: application/json' \\\n  --data '{\"links\":[{\"A\":\"gNB1\",\"B\":\"UPF-POC-20260313\",\"weight\":1}],\"upNodes\":{\"UPF-POC-20260313\":{\"type\":\"UPF\",\"nodeID\":\"198.51.100.20\",\"addr\":\"198.51.100.20\",\"sNssaiUpfInfos\":[{\"sNssai\":{\"sst\":1,\"sd\":\"010203\"},\"dnnUpfInfoList\":[{\"dnn\":\"internet\"}]}]}}}'\n```\n\n3. DELETE with FORGED token -> `404 Not Found` from business logic (auth was bypassed; the 404 is a business response, not an auth rejection):\n```\ncurl -i -X DELETE http://10.100.200.6:8000/upi/v1/upNodesLinks/UPF-POC-20260313 \\\n  -H 'Authorization: Bearer not-a-real-token'\n```\n\n4. CONTROL: same instance, sibling OAM route, no token -> `401 Unauthorized`:\n```\ncurl -i http://10.100.200.6:8000/nsmf-oam/v1/\n```\n\nSMF container logs (`docker logs smf`) confirm the side-by-side behavior:\n```\n[INFO][SMF][GIN] | 200 | GET    | /upi/v1/upNodesLinks\n[INFO][SMF][GIN] | 401 | GET    | /nsmf-oam/v1/\n[INFO][SMF][GIN] | 404 | DELETE | /upi/v1/upNodesLinks/UPF-POC-20260313\n[INFO][SMF][GIN] | 200 | POST   | /upi/v1/upNodesLinks\n```\n\n### Impact\nMissing inbound authentication (CWE-306) and authorization (CWE-862) on the SMF `UPI` SBI route group. Severity is scored against the route group's intended capability surface (UP-node and link topology management), which is realized by the demonstrated PoC: an unauthenticated network attacker can already today read SMF's view of the UP-plane topology, inject attacker-controlled UPF nodes and link entries, and target deletions of named entries.\n\nAny party that can reach SMF on the SBI can:\n- Read SMF's current UP-node and link topology view anonymously.\n- Inject attacker-controlled UPF entries (with attacker-chosen nodeID / addr / S-NSSAI / DNN), poisoning SMF's view of which UPFs serve which slices/DNNs and biasing subsequent UPF selection / PFCP path establishment for legitimate PDU sessions.\n- Issue topology delete operations against named UPF entries, denying or disrupting legitimate UPF participation in SMF's selection logic.\n\nThe defect is route-group-scoped: there is no auth middleware on the UPI group at all, so every UPI endpoint inside this group inherits the missing inbound auth boundary, and the same-instance OAM control proves this is the UPI mount specifically (not a global SMF config issue).\n\nAffected: free5gc v4.2.1.\n\nUpstream issue: https://github.com/free5gc/free5gc/issues/887\nUpstream fix: https://github.com/free5gc/smf/pull/197",
  "severity" : [ {
    "type" : "CVSS_V3",
    "score" : "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:H/A:H"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/free5gc/smf"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "1.4.3"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/free5gc/free5gc/security/advisories/GHSA-3258-qmv8-frp3"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-44329"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/free5gc/free5gc/issues/887"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/free5gc/smf/pull/197"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/free5gc/smf/commit/e23ce97565f285eb99eed153743c62bf4c767c6e"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/free5gc/free5gc"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-306", "CWE-862" ],
    "severity" : "CRITICAL",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-05-08T23:02:23Z",
    "nvd_published_at" : "2026-05-27T17:16:38Z"
  }
}