Go · github.com/fission/fission
Fission: HTTPTrigger admission omits RelativeURL / Prefix validation; kubectl apply bypasses CLI checks
HTTPTriggerSpec.Validate() validated Methods, FunctionReference, Host, IngressConfig, and CorsConfig, but silently skipped RelativeURL and Prefix. Those two fields were validated at the CLI level only
(pkg/fission-cli/cmd/httptrigger/create.go:83). The post-CRD-modernization webhook for HTTPTrigger was retired in favor of API-server CEL — and CEL had no rules on those fields either — so an HTTPTrigger created via kubectl apply or
a direct Kubernetes REST API call bypassed every URL-level check.
A tenant with HTTPTrigger create permission could therefore create triggers whose RelativeURL or Prefix:
/,/ (claiming the entire router root),.. traversal segments (e.g. /api/../admin),/router-healthz, /readyz, /_version, /auth/login,/fission-function/<ns>/<name>.github.com/fission/fission647c141pkg/apis/core/v1/validation.go:HTTPTriggerSpec.Validate (and the missing CEL on HTTPTriggerSpec)Fix section (paste into the Fix / Patches field)
Fixed in v1.25.0 by:
0deed6bf) — enforce the path-safety invariants at both admission layers so the API
server's CEL evaluation and the Go-side HTTPTriggerSpec.Validate() agree:+kubebuilder:validation:XValidation rules on HTTPTriggerSpec (the API server's CEL admission gate, regenerated into crds/v1/fission.io_httptriggers.yaml):relativeurl or prefix must be non-empty;relativeurl, when set, must start with /, must not be /, must contain no .. segment, must not be in the reserved exact-path set, and must not start with /fission-function/;prefix, when set, the same rules guarded by has(self.prefix).validateTriggerPath helper in pkg/apis/core/v1/validation.go, invoked from HTTPTriggerSpec.Validate(), mirrors the CEL rules so the CLI's early rejection and the router reconciler's status-Condition path match what the API
server admits.Regression coverage: a new TestHTTPTriggerSpecValidate_Path table in pkg/apis/core/v1/validation_validators_test.go exercises every PoC case from the advisory plus literal ..-prefixed-segment positives that must remain allowed.
Is your project exposed to this? Stateward checks every dependency on every pull request and flags it only if your code actually reaches it.
Check my repoSources: CISA KEV (public domain), OSV.dev & GitHub Advisory Database (CC-BY-4.0), FIRST EPSS, NVD/CWE (public domain). Served live from the Stateward advisory database.