CVE-2026-46614 Security Alert: CRITICAL Vulnerability

Urgent: CVE-2026-46614 requires immediate attention.

· 8 min read

Executive Summary

CVE-2026-46614 is a critical authorization bypass in github.com/fission/fission (CVSS 9.8). The Fission router exposed an internal-style endpoint, /fission-function/<ns>/<name>, on the same public listener used for normal HTTP triggers. That means an attacker who can reach the router may be able to invoke functions directly by guessing function names, bypassing the host/path/method restrictions you configured in HTTPTrigger objects.

This is especially dangerous for solo developers and small teams because the router is often exposed through a single ingress or load balancer. If you run Fission in a shared cluster, this can also become a cross-namespace or cross-tenant issue. No active exploitation is known at this time, but the exposure is severe enough to treat as urgent.

Immediate Action

  • Upgrade immediately to fission/fission v1.23.0 or later, which separates public and internal router listeners. See the vendor release notes: Fission v1.23.0 advisory.
  • If you cannot patch today, remove public access to the router and place it behind an ingress that blocks /fission-function/ paths from external clients.
  • Do not expose svc/router directly via LoadBalancer or NodePort unless you can strictly path-filter requests at the edge.
  • Assume function names are not secrets; rotate or rename any sensitive functions that may have been guessable.
  • Review logs for requests to /fission-function/ and unexpected 200/502 responses from the router.
  • Rollback guidance: if the upgrade breaks internal triggers, keep the public router on 8888 and ensure internal sources use the new internal service svc/router-internal on 8889.

Affected Versions

  • github.com/fission/fission versions before v1.23.0 are vulnerable.
  • v1.23.0+ is the fixed line for this issue.
  • TODO: If your deployment uses a packaged chart or image tag, confirm the exact safe tag from your vendor or release manifest.

Resolution Guide

Recommended fix: upgrade Fission components to the patched release. Use the package manager or deployment method you already use for your cluster.

# Kubernetes / Helm (example)
helm repo update
helm upgrade fission fission/fission --namespace fission --version 1.23.0

# If you deploy manifests directly
kubectl -n fission set image deployment/router router=fission/router:1.23.0
kubectl -n fission set image deployment/router-internal router-internal=fission/router:1.23.0

# Docker image pinning (example)
docker pull fission/router:1.23.0

JavaScript ecosystems are not directly affected unless you vendor Fission-related tooling, but if you do:

# npm / yarn / pnpm (only if you consume a wrapper package)
npm i <package>@<fixed-version>
yarn add <package>@<fixed-version>
pnpm add <package>@<fixed-version>

Python ecosystems:

# pip / pipx (only if you use a Fission-related helper package)
pip install --upgrade <package>==<fixed-version>
pipx upgrade <package>

Java ecosystems:

// Maven
<dependency>
  <groupId>TODO

Linux package managers:

# apt / yum examples if your platform vendor repackages Fission
sudo apt-get update
sudo apt-get install --only-upgrade <package>

sudo yum update <package>

Hardening until you can upgrade:

# Example ingress rule idea: block internal function path from the public edge
# Pseudocode — adapt to your ingress controller
if request.path startsWith "/fission-function/" then deny;
# NetworkPolicy example idea: only allow router access from your ingress controller namespace
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: restrict-fission-router
spec:
  podSelector:
    matchLabels:
      app: router
  policyTypes: ["Ingress"]
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: ingress-nginx
    ports:
    - protocol: TCP
      port: 8888

Minimal code/config fix concept: ensure public routing only serves user-defined HTTP triggers, while internal function invocation is isolated to the internal listener.

// Conceptual patch: do not register /fission-function on the public router
if isPublicListener {
    registerHTTPTriggerRoutes()
    registerHealthRoutes()
} else {
    registerInternalFunctionRoutes()
}

Detection & Verification

Check your version:

kubectl -n fission get deploy router -o jsonpath='{.spec.template.spec.containers[0].image}{"\n"}'
helm list -n fission

Look for the vulnerable route exposure:

kubectl -n fission get svc
kubectl -n fission get ingress
kubectl -n fission logs deploy/router | grep -E '/fission-function/|router-internal|8889'

Verify the fix:

# Public router should answer on 8888, internal router on 8889
kubectl -n fission get svc router router-internal

# Confirm /fission-function is not reachable from the public path
curl -i https://YOUR_PUBLIC_ROUTER/fission-function/test/ns

Expected result after the fix: public requests to /fission-function/... should be blocked or fail, while internal trigger sources should use svc/router-internal and be authenticated with the service verifier.

Risk and Impact

An attacker who can reach the router may be able to invoke functions that were never meant to be public, including internal helpers, timer targets, message-queue handlers, and sample functions. They can also bypass method and path restrictions you set in HTTPTrigger objects, turning a carefully limited API into a direct function execution surface.

In small deployments, the blast radius can include every function exposed through the same router. In shared clusters, the impact can extend across namespaces or tenants if the router is reachable from other pods or from the internet.

Keep reading