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.0or 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/routerdirectly 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
8888and ensure internal sources use the new internal servicesvc/router-internalon8889.
Affected Versions
github.com/fission/fissionversions 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.