Skip to content

Commit ceac7dd

Browse files
1 parent e027809 commit ceac7dd

3 files changed

Lines changed: 231 additions & 0 deletions

File tree

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
{
2+
"schema_version": "1.4.0",
3+
"id": "GHSA-3r8v-2xmj-5c39",
4+
"modified": "2026-06-30T18:16:33Z",
5+
"published": "2026-06-30T18:16:33Z",
6+
"aliases": [
7+
"CVE-2026-49823"
8+
],
9+
"summary": "Fission: Cross-namespace Package read via unvalidated PackageRef in Function admission webhook",
10+
"details": "### Summary\n\nA Fission Function spec carries three reference types — Secret, ConfigMap, and Package. The first two were namespace-validated by the admission webhook; `PackageRef.Namespace` was not.\n\n### Details\n\nA tenant with `functions.fission.io/create` in their own namespace could set `spec.package.packageref.namespace` to any other namespace. When the function is invoked, the fetcher sidecar reads the victim Package using the\n`fission-fetcher` service account's namespace-wide `get packages` permission and writes its contents to `/userfunc/deployarchive` inside the attacker's pool pod, exposing the victim's source code and any embedded credentials.\n\nThe `fission-fetcher` SA holds `get packages` in every configured function namespace (granted by `charts/fission-all/templates/_function-access-role.tpl`), so the namespace check was the only barrier between the attacker and any\nin-cluster Fission Package.\n\n### Impact\n\nA function author in one namespace could read the deployment archive — and therefore the source code and embedded secrets — of any Package in any other namespace.\n\n### Fix\n\nFixed in [#3389](https://github.com/fission/fission/pull/3389) and released in [v1.24.0](https://github.com/fission/fission/releases/tag/v1.24.0).\n\nThe admission webhook (`pkg/webhook/function.go::Validate`) rejects `Function.spec.package.packageref.namespace != metadata.namespace`. An empty namespace remains accepted (controllers default it to the function's namespace). This\nshipped together with the EnvironmentRef cross-namespace check (GHSA-cvw6-gfvv-953q).\n\n### Behavioural change\n\nFunctions that explicitly set `spec.package.packageref.namespace` to a different namespace are now rejected at admission.",
11+
"severity": [
12+
{
13+
"type": "CVSS_V3",
14+
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N"
15+
}
16+
],
17+
"affected": [
18+
{
19+
"package": {
20+
"ecosystem": "Go",
21+
"name": "github.com/fission/fission"
22+
},
23+
"ranges": [
24+
{
25+
"type": "ECOSYSTEM",
26+
"events": [
27+
{
28+
"introduced": "0"
29+
},
30+
{
31+
"fixed": "1.24.0"
32+
}
33+
]
34+
}
35+
],
36+
"database_specific": {
37+
"last_known_affected_version_range": "<= 1.23.0"
38+
}
39+
}
40+
],
41+
"references": [
42+
{
43+
"type": "WEB",
44+
"url": "https://github.com/fission/fission/security/advisories/GHSA-3r8v-2xmj-5c39"
45+
},
46+
{
47+
"type": "ADVISORY",
48+
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-49823"
49+
},
50+
{
51+
"type": "WEB",
52+
"url": "https://github.com/fission/fission/pull/3389"
53+
},
54+
{
55+
"type": "WEB",
56+
"url": "https://github.com/fission/fission/commit/80e7ba55228e1ef426f51353e25d2682ec61de34"
57+
},
58+
{
59+
"type": "PACKAGE",
60+
"url": "https://github.com/fission/fission"
61+
},
62+
{
63+
"type": "WEB",
64+
"url": "https://github.com/fission/fission/releases/tag/v1.24.0"
65+
}
66+
],
67+
"database_specific": {
68+
"cwe_ids": [
69+
"CWE-284",
70+
"CWE-863"
71+
],
72+
"severity": "HIGH",
73+
"github_reviewed": true,
74+
"github_reviewed_at": "2026-06-30T18:16:33Z",
75+
"nvd_published_at": "2026-06-10T18:17:10Z"
76+
}
77+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
{
2+
"schema_version": "1.4.0",
3+
"id": "GHSA-gc3j-79f2-7vvw",
4+
"modified": "2026-06-30T18:16:03Z",
5+
"published": "2026-06-30T18:16:03Z",
6+
"aliases": [
7+
"CVE-2026-49822"
8+
],
9+
"summary": "Fission: Cross-namespace event leakage via KubernetesWatchTrigger allows persistent tenant surveillance",
10+
"details": "### Summary\n\nA low-privilege developer who could create a `KubernetesWatchTrigger` (KWT) in their own namespace was able to establish a persistent surveillance channel over any other namespace.\n\n### Details\n\nTwo independent flaws compounded:\n\n1. `pkg/kubewatcher/kubewatcher.go::createKubernetesWatch` used `w.Spec.Namespace` (user-controlled) directly as the Watch target without checking it against `w.Namespace` (the KWT's own namespace). `kubewatcher` established the Watch\nusing its cluster-scoped service account and serialized every Pod/Service/Job change event as full JSON over HTTP POST to the attacker's function.\n2. The validating webhook (`pkg/webhook/kuberneteswatchtrigger.go`) registered `verbs=create` only, so `update`/`patch` requests bypassed validation entirely.\n\nA separate leak: an empty `spec.namespace` resolved to **all namespaces** via the controller's default, letting an attacker omit the field to surveil the entire cluster.\n\n### Impact\n\nA tenant with `kuberneteswatchtriggers.fission.io/create` could continuously receive full event payloads for Pods, Services, and Jobs in any namespace — a persistent cross-tenant surveillance channel requiring no additional privileges.\n\n### Fix\n\nFixed in [#3379](https://github.com/fission/fission/pull/3379) and released in [v1.24.0](https://github.com/fission/fission/releases/tag/v1.24.0).\n\n- The validating webhook marker is extended to `verbs=create;update`.\n- `Validate` rejects `KubernetesWatchTrigger.spec.namespace != metadata.namespace`.\n- A controller guard in `createKubernetesWatch` rejects cross-namespace targets that bypass admission and coerces an empty `Spec.Namespace` to the trigger's own namespace.\n\n### Behavioural change\n\nKubernetesWatchTriggers with an unset `spec.namespace` now watch only their own namespace instead of all namespaces. Anyone relying on the previous all-namespaces behaviour must create a separate KWT per namespace.",
11+
"severity": [
12+
{
13+
"type": "CVSS_V3",
14+
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N"
15+
}
16+
],
17+
"affected": [
18+
{
19+
"package": {
20+
"ecosystem": "Go",
21+
"name": "github.com/fission/fission"
22+
},
23+
"ranges": [
24+
{
25+
"type": "ECOSYSTEM",
26+
"events": [
27+
{
28+
"introduced": "0"
29+
},
30+
{
31+
"fixed": "1.24.0"
32+
}
33+
]
34+
}
35+
],
36+
"database_specific": {
37+
"last_known_affected_version_range": "<= 1.23.0"
38+
}
39+
}
40+
],
41+
"references": [
42+
{
43+
"type": "WEB",
44+
"url": "https://github.com/fission/fission/security/advisories/GHSA-gc3j-79f2-7vvw"
45+
},
46+
{
47+
"type": "ADVISORY",
48+
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-49822"
49+
},
50+
{
51+
"type": "WEB",
52+
"url": "https://github.com/fission/fission/pull/3379"
53+
},
54+
{
55+
"type": "WEB",
56+
"url": "https://github.com/fission/fission/commit/e2b92663499f4dc3a1e2d38178f39c3c65e0134a"
57+
},
58+
{
59+
"type": "PACKAGE",
60+
"url": "https://github.com/fission/fission"
61+
},
62+
{
63+
"type": "WEB",
64+
"url": "https://github.com/fission/fission/releases/tag/v1.24.0"
65+
}
66+
],
67+
"database_specific": {
68+
"cwe_ids": [
69+
"CWE-284",
70+
"CWE-862"
71+
],
72+
"severity": "HIGH",
73+
"github_reviewed": true,
74+
"github_reviewed_at": "2026-06-30T18:16:03Z",
75+
"nvd_published_at": "2026-06-10T18:17:10Z"
76+
}
77+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
{
2+
"schema_version": "1.4.0",
3+
"id": "GHSA-vjhc-cf4p-72q4",
4+
"modified": "2026-06-30T18:15:27Z",
5+
"published": "2026-06-30T18:15:27Z",
6+
"aliases": [
7+
"CVE-2026-49821"
8+
],
9+
"summary": "Fission: Cross-namespace Environment reference in Package allows build-time command execution and SA token exfiltration",
10+
"details": "### Summary\n\nFission's `buildermgr` controller processed `Package` CRDs without verifying that `Package.spec.environment.namespace` matched `Package.metadata.namespace`.\n\n### Details\n\nAn attacker with `packages.fission.io/create` in their own namespace could set `spec.environment.namespace` to any other tenant's namespace. The controller then used its high-privilege service account to fetch the Environment\ncross-namespace and dispatch the build command into the **victim namespace's** builder pod.\n\nThe build command's stdout is written verbatim into `Package.status.buildlog`. By running malicious code through an npm `preinstall` lifecycle hook (or any equivalent build step), the attacker could read the victim namespace's\n`fission-builder` Bearer token from inside that builder pod and surface it through the build log — then use the leaked token to read every Secret and ConfigMap in the victim namespace.\n\n### Impact\n\nCross-tenant compromise: a package author in one namespace could execute code inside another tenant's builder pod and exfiltrate that namespace's `fission-builder` service-account token, giving namespace-wide secret and configmap read in\n the victim namespace.\n\n### Fix\n\nFixed in [#3379](https://github.com/fission/fission/pull/3379) and released in [v1.24.0](https://github.com/fission/fission/releases/tag/v1.24.0). Two checks in series:\n\n- **Admission webhook** (`pkg/webhook/package.go::Validate`) rejects `Package.spec.environment.namespace != Package.metadata.namespace`. An empty namespace is still accepted; the controllers default it to the package's own namespace.\n- **Controller belt-and-braces:** the same check is repeated in `pkg/buildermgr/pkgwatcher.go::build` and `pkg/buildermgr/common.go::buildPackage` before the cross-namespace `Environments(...).Get` call, so a stale Package CR or a\nwebhook-bypass cluster (`failurePolicy=Ignore`) cannot exploit the primitive either.\n\n### Behavioural change\n\nPackages that explicitly set `spec.environment.namespace` to a different namespace are now rejected at admission. Empty-string remains accepted (resolves to the package's own namespace, the same as the prior implicit behaviour).",
11+
"severity": [
12+
{
13+
"type": "CVSS_V3",
14+
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N"
15+
}
16+
],
17+
"affected": [
18+
{
19+
"package": {
20+
"ecosystem": "Go",
21+
"name": "github.com/fission/fission"
22+
},
23+
"ranges": [
24+
{
25+
"type": "ECOSYSTEM",
26+
"events": [
27+
{
28+
"introduced": "0"
29+
},
30+
{
31+
"fixed": "1.24.0"
32+
}
33+
]
34+
}
35+
],
36+
"database_specific": {
37+
"last_known_affected_version_range": "<= 1.23.0"
38+
}
39+
}
40+
],
41+
"references": [
42+
{
43+
"type": "WEB",
44+
"url": "https://github.com/fission/fission/security/advisories/GHSA-vjhc-cf4p-72q4"
45+
},
46+
{
47+
"type": "ADVISORY",
48+
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-49821"
49+
},
50+
{
51+
"type": "WEB",
52+
"url": "https://github.com/fission/fission/pull/3379"
53+
},
54+
{
55+
"type": "WEB",
56+
"url": "https://github.com/fission/fission/commit/e2b92663499f4dc3a1e2d38178f39c3c65e0134a"
57+
},
58+
{
59+
"type": "PACKAGE",
60+
"url": "https://github.com/fission/fission"
61+
},
62+
{
63+
"type": "WEB",
64+
"url": "https://github.com/fission/fission/releases/tag/v1.24.0"
65+
}
66+
],
67+
"database_specific": {
68+
"cwe_ids": [
69+
"CWE-441",
70+
"CWE-862"
71+
],
72+
"severity": "HIGH",
73+
"github_reviewed": true,
74+
"github_reviewed_at": "2026-06-30T18:15:27Z",
75+
"nvd_published_at": "2026-06-10T18:17:10Z"
76+
}
77+
}

0 commit comments

Comments
 (0)