{"id":"GHSA-7m8x-qg2j-4m3v","title":"Fission: MessageQueueTrigger scaler manager materializes Secret values into Deployment envvars and accepts arbitrary user PodSpec","summary":"Fission: MessageQueueTrigger scaler manager materializes Secret values into Deployment envvars and accepts arbitrary user PodSpec","severity":"high","cvss":8.1,"cwe":["CWE-200","CWE-269","CWE-284"],"vendor":"fission","product":"github.com/fission/fission","ecosystem":"go","affected":["github.com/fission/fission <= 1.23.0"],"patched":["github.com/fission/fission 1.24.0"],"published":"2026-06-30","updated":"2026-06-30","source":"GHSA","sourceUrl":"https://github.com/advisories/GHSA-7m8x-qg2j-4m3v","references":[{"url":"https://github.com/fission/fission/security/advisories/GHSA-7m8x-qg2j-4m3v"},{"url":"https://github.com/fission/fission/pull/3367"},{"url":"https://github.com/fission/fission/commit/94bf5792396989fdd71961e8701833c8110da889"},{"url":"https://github.com/fission/fission/releases/tag/v1.24.0"},{"url":"https://github.com/advisories/GHSA-7m8x-qg2j-4m3v"}],"tags":["ghsa","go"],"ingestedAt":"2026-06-30T21:24:14.417Z","slug":"GHSA-7m8x-qg2j-4m3v","body":"## Overview\n\n### Summary\n\nThe Fission MessageQueueTrigger (MQT) scaler controller exposed two privilege-escalation primitives to any subject able to create MQTs in a namespace.\n\n### Details\n\n**1. Secret materialization.** `getEnvVarlist` in `pkg/mqtrigger/scalermanager.go` read the Secret named in `Spec.Secret` using the controller's cluster-wide `secrets/get` RBAC and emitted each key as a literal `EnvVar.Value`, copying\nthe plaintext secret content into the connector Deployment's pod template. A subject holding `messagequeuetriggers/create` but **not** `secrets/get` could exfiltrate any Secret in the namespace by pointing an MQT at it.\n\n**2. PodSpec injection.** `Spec.PodSpec` was merged into the controller-built connector PodSpec via `util.MergePodSpec` with no allowlist on which fields could come from the user. An MQT could substitute `Containers[].Image` (run any\nimage), override `Command`/`Args`, inject `Env`, add `VolumeMounts` + `Volumes`, override `ServiceAccountName`, and set `HostNetwork`/`HostPID`/`HostIPC` — turning `messagequeuetriggers/create` into effective `deployments/create` with an\n arbitrary image and service account.\n\n### Impact\n\nA tenant with only `messagequeuetriggers.fission.io/create` in a namespace could read any Secret in that namespace and run an arbitrary container image under an arbitrary service account, escalating well beyond their intended RBAC.\n\n### Fix\n\nFixed in [#3367](https://github.com/fission/fission/pull/3367) and released in [v1.24.0](https://github.com/fission/fission/releases/tag/v1.24.0).\n\n- `getEnvVarlist` now emits `EnvVar.ValueFrom.SecretKeyRef` so the connector pod resolves values at start time under its own service account. The secret values are never written into the Deployment object and never logged.\n- A new allowlist, `MergeAllowedPodSpecFields` (`pkg/executor/util/merge_allowlist.go`), accepts only `NodeSelector`, `Tolerations`, `Affinity`, `RuntimeClassName`, and per-container `Resources`. All other user-supplied fields are\ndropped at the controller layer, and the validating webhook rejects every populated non-allowlisted field with a clear error. The webhook and the merge helper share a single canonical `DisallowedPodSpecFields` enumeration so they cannot\ndrift.\n\n### Behavioural change\n\nMQT authors that previously overrode the connector image, command, args, env, volumes, service account, or host namespaces via `Spec.PodSpec` will see those fields rejected at admission (or silently dropped if the webhook is disabled).\nAllowlisted fields flow through unchanged.\n\n## Affected packages\n\n- `github.com/fission/fission <= 1.23.0`\n\n## Remediation\n\nUpgrade to a patched release:\n\n- `github.com/fission/fission 1.24.0`","depth":"twilight","depthScore":45,"depthScoreParts":{"impact":44.6,"likelihood":0,"exploitation":0,"ransomware":0},"changes":[]}