CVE-2026-46614: Github.com/fission/fission Fission Router Exposes /fission-function/<ns>/<name> On Vulnerability

CRITICAL
Advisory Identifier: GHSA-3g33-6vg6-27m8
CVSS 9.8
CWE-284 CWE-862
Published
Advisory Summary

CVE-2026-46614 is a CRITICAL (CVSS 9.8) fission router exposes /fission-function/<ns>/<name> on vulnerability (CWE-284: Improper Access Control) affecting Github.com/fission/fission libraries in the Go ecosystem. The issue involves fission router exposes /fission-function/<ns>/<name> on its public listener, allowing invocation of any function without an httptrigger. Remediation is available by upgrading affected packages to version 1.23.0.

CVE-2026-46614 at a Glance

CVE Identifier CVE-2026-46614
GHSA Identifier GHSA-3g33-6vg6-27m8
Severity CRITICAL
CVSS v3.1 Base Score 9.8
CWE Classification CWE-284: Improper Access Control
Affected Product Github.com/fission/fission
Package Ecosystem Go
Published Date
Last Updated

Security Impact

CVSS: 9.8

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:U/C:H/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 Unchanged (S:U)
Confidentiality High (C:H)
Integrity High (I:H)
Availability High (A:H)

How to Fix CVE-2026-46614

To remediate this vulnerability, upgrade all affected Github.com/fission/fission 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/fission/fission fixed: 1.23.0
Upgrade github.com/fission/fission to 1.23.0
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/fission/fission

How to Check if You Are Affected

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

inspect dependencies for github.com/fission/fission

Analyze the terminal output to locate any version of Github.com/fission/fission in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 1.23.0), 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-284: Improper Access Control, where the product does not restrict or incorrectly restricts access to a resource from an unauthorized actor. In Github.com/fission/fission, 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 The Fission router registers an internal-style route — `/fission-function/<name>` and `/fission-function/<ns>/<name>` — for every `Function` object, independent of whether any `HTTPTrigger` exists for that function. The route was mounted on the same listener as user-defined `HTTPTrigger`s (`svc/router`, port 8888), so any caller who could reach the router could invoke any function by guessing its `metadata.name` (and namespace), bypassing the host / path / method / method-allow-list restrictions encoded in `HTTPTrigger` objects. ### Affected component - `pkg/router/httpTriggers.go:280-284` — `internalRoute` registration via `utils.UrlForFunction(fn.Name, fn.Namespace)`, bound to the function handler. ### Impact An external caller who reaches the public router could: 1. Invoke functions that the operator intentionally did not publish through an `HTTPTrigger` (e.g. functions used only as Kubewatcher / Timer / MessageQueue trigger targets, internal helpers, or sample functions). 2. Bypass `HTTPTrigger`-level restrictions: a function published only on `POST /api/v2/foo` could still be invoked as `GET /fission-function/<ns>/<name>` with arbitrary headers and body. 3. Enumerate function names by probing the response semantics (404 vs 200 vs 502 from cold start). In multi-tenant deployments this also crosses tenant boundaries when functions in tenant namespace B are reachable from tenant A's pods (or from anywhere on the internet if the router is ingress-exposed). ### Root cause `/fission-function/...` was historically used by internal trigger sources (timer, kubewatcher, mqtrigger) that share the cluster network with the router, but the route was registered on the public listener that also serves user `HTTPTrigger`s. The two audiences were never separated. ### Fix Released in [v1.23.0](https://github.com/fission/fission/releases/tag/v1.23.0): - **PR #3369** (commit `814d232c`): the router now runs **two** listeners — a public listener (port 8888, `svc/router`) that serves only user-defined `HTTPTrigger`s, `/router-healthz`, and `/_version`, and an internal listener (port 8889, `svc/router-internal`, ClusterIP-only) that exclusively serves `/fission-function/<ns>/<name>`. The internal listener is wrapped with the `pkg/auth/hmac.ServiceVerifier` using the `ServiceRouterInternal` derived key — internal trigger sources sign their requests with a per-service HKDF-derived key from a cluster master secret. Empty master secret falls back to pass-through (preserves compatibility for clusters not yet rotating in a secret). - **PR #3365** (commit `0aa24788`): added per-service `NetworkPolicy` resources to `charts/fission-all`, ensuring `svc/router-internal` is only reachable from `kubewatcher`, `timer`, `mqtrigger`, and `mqt-keda` pods inside the release namespace. - The internal-listener path itself is still **`/fission-function/<ns>/<name>`** — only its location moved. ### Mitigation (until upgrade) 1. Apply a `NetworkPolicy` to the Fission namespace that allows ingress to `svc/router` (port 8888) only from the consuming project's ingress controller, and blocks `/fission-function/...` at the ingress layer (path-based filter on the ingress). 2. Avoid exposing the router directly via LoadBalancer/NodePort; front it with an ingress that path-filters `/fission-function/`. 3. Treat function `metadata.name` as **not** a secret — names should not be the access control boundary.

CVE-2026-46614 Affected Github.com/fission/fission Versions

1 component(s)
Fixed Versions:
1.23.0
Product / Package Ecosystem Affected Versions Fixed Version
github.com/fission/fission
Go
< 1.23.0
1.23.0

References

Frequently Asked Questions

What is CVE-2026-46614?
CVE-2026-46614 is a security vulnerability in Github.com/fission/fission involving Fission router exposes /fission-function/<ns>/<name> on its public listener, allowing invocation of any function without an HTTPTrigger under CWE-284: Improper Access Control.
Which Github.com/fission/fission versions are affected?
Affected versions include releases prior to 1.23.0 across affected packages: github.com/fission/fission.
What version fixes CVE-2026-46614?
Upgrading to 1.23.0 (or the latest patched release for your respective branch) resolves the vulnerability.
Is github.com/fission/fission affected?
Yes, github.com/fission/fission is affected in releases prior to 1.23.0. Upgrade your dependency to 1.23.0 or later.
What is the CVSS score of CVE-2026-46614?
CVE-2026-46614 has a CVSS v3.1 base score of 9.8 (CRITICAL) with vector string CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H.
What CWE is associated with CVE-2026-46614?
CVE-2026-46614 is classified under CWE-284: Improper Access Control (The product does not restrict or incorrectly restricts access to a resource from an unauthorized actor.).
How can I check Go dependencies for CVE-2026-46614?
Run the dependency tree command: 'inspect dependencies for github.com/fission/fission'. 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-3g33-6vg6-27m8",
  "modified" : "2026-06-10T18:41:37Z",
  "published" : "2026-05-21T20:14:51Z",
  "aliases" : [ "CVE-2026-46614" ],
  "summary" : "Fission router exposes /fission-function/<ns>/<name> on its public listener, allowing invocation of any function without an HTTPTrigger",
  "details" : "### Summary\n\nThe Fission router registers an internal-style route — `/fission-function/<name>` and `/fission-function/<ns>/<name>` — for every `Function` object, independent of whether any `HTTPTrigger` exists for that function. The route was mounted on the same listener as user-defined `HTTPTrigger`s (`svc/router`, port 8888), so any caller who could reach the router could invoke any function by guessing its `metadata.name` (and namespace), bypassing the host / path / method / method-allow-list restrictions encoded in `HTTPTrigger` objects.\n\n### Affected component\n\n- `pkg/router/httpTriggers.go:280-284` — `internalRoute` registration via `utils.UrlForFunction(fn.Name, fn.Namespace)`, bound to the function handler.\n\n### Impact\n\nAn external caller who reaches the public router could:\n\n1. Invoke functions that the operator intentionally did not publish through an `HTTPTrigger` (e.g. functions used only as Kubewatcher / Timer / MessageQueue trigger targets, internal helpers, or sample functions).\n2. Bypass `HTTPTrigger`-level restrictions: a function published only on `POST /api/v2/foo` could still be invoked as `GET /fission-function/<ns>/<name>` with arbitrary headers and body.\n3. Enumerate function names by probing the response semantics (404 vs 200 vs 502 from cold start).\n\nIn multi-tenant deployments this also crosses tenant boundaries when functions in tenant namespace B are reachable from tenant A's pods (or from anywhere on the internet if the router is ingress-exposed).\n\n### Root cause\n\n`/fission-function/...` was historically used by internal trigger sources (timer, kubewatcher, mqtrigger) that share the cluster network with the router, but the route was registered on the public listener that also serves user `HTTPTrigger`s. The two audiences were never separated.\n\n### Fix\n\nReleased in [v1.23.0](https://github.com/fission/fission/releases/tag/v1.23.0):\n\n- **PR #3369** (commit `814d232c`): the router now runs **two** listeners — a public listener (port 8888, `svc/router`) that serves only user-defined `HTTPTrigger`s, `/router-healthz`, and `/_version`, and an internal listener (port 8889, `svc/router-internal`, ClusterIP-only) that exclusively serves `/fission-function/<ns>/<name>`. The internal listener is wrapped with the `pkg/auth/hmac.ServiceVerifier` using the `ServiceRouterInternal` derived key — internal trigger sources sign their requests with a per-service HKDF-derived key from a cluster master secret. Empty master secret falls back to pass-through (preserves compatibility for clusters not yet rotating in a secret).\n- **PR #3365** (commit `0aa24788`): added per-service `NetworkPolicy` resources to `charts/fission-all`, ensuring `svc/router-internal` is only reachable from `kubewatcher`, `timer`, `mqtrigger`, and `mqt-keda` pods inside the release namespace.\n- The internal-listener path itself is still **`/fission-function/<ns>/<name>`** — only its location moved.\n\n### Mitigation (until upgrade)\n\n1. Apply a `NetworkPolicy` to the Fission namespace that allows ingress to `svc/router` (port 8888) only from the consuming project's ingress controller, and blocks `/fission-function/...` at the ingress layer (path-based filter on the ingress).\n2. Avoid exposing the router directly via LoadBalancer/NodePort; front it with an ingress that path-filters `/fission-function/`.\n3. Treat function `metadata.name` as **not** a secret — names should not be the access control boundary.",
  "severity" : [ {
    "type" : "CVSS_V3",
    "score" : "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/fission/fission"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "1.23.0"
      } ]
    } ],
    "database_specific" : {
      "last_known_affected_version_range" : "<= 1.22.0"
    }
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/fission/fission/security/advisories/GHSA-3g33-6vg6-27m8"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-46614"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/fission/fission/pull/3365"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/fission/fission/pull/3369"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/fission/fission"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/fission/fission/releases/tag/v1.23.0"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-284", "CWE-862" ],
    "severity" : "CRITICAL",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-05-21T20:14:51Z",
    "nvd_published_at" : "2026-06-10T18:17:05Z"
  }
}