{"id":"GHSA-ghgh-57qv-h687","revision":null,"records":[{"revision":"69266f0ca83e46a9804d94d7b42e047f","observedAt":"2026-11-09T20:02:10.904+00:00","statement":{"source":"cve-program","id":"CVE-2026-88984","aliases":[],"title":"Kubeflow Pipelines: RBAC bypass on shared pipelines allows any authenticated user to delete or modify global pipelines","description":"Kubeflow Pipelines enables users to build and deploy portable, scalable machine learning workflows. Prior to 2.16.1, the multi-user API server treats the empty namespace used by shared or global pipelines as an authorization exception for modification and deletion operations. An authenticated user can modify or delete shared pipeline definitions and versions without the required Kubernetes RBAC permissions, compromising their integrity and availability. Read-only access to shared pipelines remains intentional, single-user deployments intentionally bypass multi-user checks, and execution of a modified pipeline is a conditional downstream consequence. The separate shared-pipeline multipart upload authorization path is outside this advisory and is not remediated by version 2.16.1. This issue is fixed in version 2.16.1.","state":0,"publishedAt":"2026-11-05T22:13:12.954+00:00","modifiedAt":"2026-11-09T17:41:17.366+00:00","affected":[{"ecosystem":"Vendor product","name":"pipelines","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"vendor\": \"kubeflow\",\n                    \"product\": \"pipelines\",\n                    \"versions\": [\n                        {\n                            \"version\": \"< 2.16.1\",\n                            \"status\": \"affected\"\n                        }\n                    ]\n                }"}],"metrics":[{"system":"CVSS 4.0","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N","score":7.2,"severity":"HIGH"}],"references":["https://github.com/kubeflow/pipelines/security/advisories/GHSA-ghgh-57qv-h687","https://github.com/kubeflow/pipelines/pull/13288","https://github.com/kubeflow/pipelines/commit/186dd1f3b0403af841c9b4ea7ab94f405339ef6c","https://github.com/kubeflow/pipelines/releases/tag/2.16.1"],"sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-88984","license":"CVE Program Terms of Use","key":"cve-program:CVE-2026-88984","identifiers":["CVE-2026-88984"]},"retained":false,"historicalAffected":[]},{"revision":"cbed889b1bf64796b155fd95caae3fe2","observedAt":"2026-11-14T07:03:29.817+00:00","statement":{"source":"euvd","id":"EUVD-2026-117826","aliases":["CVE-2026-88984","GHSA-ghgh-57qv-h687"],"title":"Kubeflow Pipelines enables users to build and deploy portable, scalable machine learning workflows. Prior to 2.16.1, the multi-user API server treats the empty namespace used by shared or global pipelines as an authorization exception for m…","description":"Kubeflow Pipelines enables users to build and deploy portable, scalable machine learning workflows. Prior to 2.16.1, the multi-user API server treats the empty namespace used by shared or global pipelines as an authorization exception for modification and deletion operations. An authenticated user can modify or delete shared pipeline definitions and versions without the required Kubernetes RBAC permissions, compromising their integrity and availability. Read-only access to shared pipelines remains intentional, single-user deployments intentionally bypass multi-user checks, and execution of a modified pipeline is a conditional downstream consequence. The separate shared-pipeline multipart upload authorization path is outside this advisory and is not remediated by version 2.16.1. This issue is fixed in version 2.16.1.","state":0,"publishedAt":null,"modifiedAt":null,"affected":[],"metrics":[{"system":"EUVD CVSS 4.0","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N","score":7.2,"severity":null}],"references":["https://github.com/kubeflow/pipelines/security/advisories/GHSA-ghgh-57qv-h687","https://github.com/kubeflow/pipelines/pull/13288","https://github.com/kubeflow/pipelines/commit/186dd1f3b0403af841c9b4ea7ab94f405339ef6c","https://github.com/kubeflow/pipelines/releases/tag/2.16.1"],"sourceUrl":"https://euvd.enisa.europa.eu/vulnerability/EUVD-2026-117826","license":"ENISA EUVD · source terms and attribution apply","enrichment":{"sourceStatus":null,"weaknesses":[],"productCriteria":[],"sourceDates":{"datePublished":"Nov 5, 2026, 10:13:12 PM","dateUpdated":"Nov 9, 2026, 5:41:17 PM"},"relatedAdvisories":[],"note":"EUVD source date text has no stated timezone and is retained without inventing a UTC instant. Related bulletin membership is not an alias, common cause or applicability claim. A missing vector with a zero score is treated as unrated. Complete vendor/product and underlying source evidence remains in the original JSON."},"key":"euvd:EUVD-2026-117826","identifiers":["EUVD-2026-117826","CVE-2026-88984","GHSA-ghgh-57qv-h687"]},"retained":false,"historicalAffected":[]},{"revision":"4430ee7941974066b81c7908060fc49d","observedAt":"2026-11-09T23:04:37.09+00:00","statement":{"source":"nvd","id":"CVE-2026-88984","aliases":[],"title":"Kubeflow Pipelines enables users to build and deploy portable, scalable machine learning workflows. Prior to 2.16.1, the multi-user API server treats the empty namespace used by shared or global pipelines as an authorization exception for m…","description":"Kubeflow Pipelines enables users to build and deploy portable, scalable machine learning workflows. Prior to 2.16.1, the multi-user API server treats the empty namespace used by shared or global pipelines as an authorization exception for modification and deletion operations. An authenticated user can modify or delete shared pipeline definitions and versions without the required Kubernetes RBAC permissions, compromising their integrity and availability. Read-only access to shared pipelines remains intentional, single-user deployments intentionally bypass multi-user checks, and execution of a modified pipeline is a conditional downstream consequence. The separate shared-pipeline multipart upload authorization path is outside this advisory and is not remediated by version 2.16.1. This issue is fixed in version 2.16.1.","state":0,"publishedAt":"2026-11-05T23:17:01.76+00:00","modifiedAt":"2026-11-09T18:17:34.857+00:00","affected":[],"metrics":[{"system":"CVSS 4.0 · security-advisories@github.com · Secondary","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","score":7.2,"severity":"HIGH"}],"references":["https://github.com/kubeflow/pipelines/commit/186dd1f3b0403af841c9b4ea7ab94f405339ef6c","https://github.com/kubeflow/pipelines/pull/13288","https://github.com/kubeflow/pipelines/releases/tag/2.16.1","https://github.com/kubeflow/pipelines/security/advisories/GHSA-ghgh-57qv-h687"],"sourceUrl":"https://nvd.nist.gov/vuln/detail/CVE-2026-88984","license":"NIST NVD usage terms; underlying source attribution retained","enrichment":{"sourceStatus":"Awaiting Analysis","weaknesses":["CWE-285","CWE-863"],"productCriteria":[],"sourceDates":{"published":"2026-11-05T23:17:01.760","lastModified":"2026-11-09T18:17:34.857"},"relatedAdvisories":[],"note":"NVD analysis and CPE criteria are source context, not proof that a package or your environment is affected. Complete affected data, logical configurations and SSVC are retained in the original JSON."},"key":"nvd:CVE-2026-88984","identifiers":["CVE-2026-88984"]},"retained":false,"historicalAffected":[]},{"revision":"724ff01b418b485788c49113e0a507bc","observedAt":"2026-11-09T23:04:27.387+00:00","statement":{"source":"osv","id":"GHSA-ghgh-57qv-h687","aliases":["CVE-2026-88984"],"title":"Kubeflow Pipelines: RBAC bypass on shared pipelines allows any authenticated user to delete or modify global pipelines","description":"## Summary\n\nIn multi-user mode, the Kubeflow Pipelines API server skipped authorization checks for shared/global pipelines with an empty namespace. This exception applied to write and delete operations as well as reads, allowing an authenticated user to modify or delete shared pipelines without the required Kubernetes RBAC permissions.\n\n## Impact\n\nUnauthorized modification compromises the integrity of shared pipeline definitions and versions. Unauthorized deletion can make shared pipelines unavailable.\n\nExecution of a modified pipeline can cause attacker-controlled workload behavior, but this is a conditional downstream consequence requiring the modified pipeline to be executed. Modification alone does not demonstrate immediate worker code execution.\n\nReading shared pipelines is intentionally permitted and remains permitted after the fix. Consequently, access to shared pipeline configuration does not establish an additional confidentiality impact from this write-authorization defect. The confidentiality metric is None; the integrity and availability metrics reflect unauthorized modification and deletion of shared pipelines.\n\nThe affected authorization boundary is shared pipelines in multi-user deployments. Single-user deployments intentionally bypass these multi-user authorization checks.\n\n## Patches\n\nFixed by [kubeflow/pipelines#13288](https://github.com/kubeflow/pipelines/pull/13288), with the fix included in 2.16.1.\n\nRead-only operations on shared pipelines remain allowed. For write and delete operations, the API server checks Kubernetes RBAC permissions against the KFP system namespace, because shared pipelines have no namespace of their own.\n\n## Scope of this fix\n\nThe 2.16.1 fix addresses the shared-pipeline authorization paths described above. It does not fix every shared-pipeline write path: the separate shared-pipeline upload authorization defect is tracked in [GHSA-rjr3-43j3-4q8g / CVE-2026-77596](https://github.com/kubeflow/pipelines/security/advisories/GHSA-rjr3-43j3-4q8g). Consult that advisory for its affected versions and remediation; 2.16.1 must not be interpreted as fixing that separate upload defect.\n\n## Workarounds\n\nUntil upgrading, restrict access to the Pipelines API to trusted users through deployment-level access controls. Namespace RBAC alone does not correct the affected shared-pipeline authorization path.","state":0,"publishedAt":"2026-11-09T22:48:03+00:00","modifiedAt":"2026-11-09T23:00:03.861008+00:00","affected":[{"ecosystem":"Go","name":"github.com/kubeflow/pipelines","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"0.0.0-20260420170029-186dd1f3b040"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[{"system":"CVSS_V4","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N","score":null,"severity":null},{"system":"Publisher rating","vector":null,"score":null,"severity":"HIGH"}],"references":["https://github.com/kubeflow/pipelines/security/advisories/GHSA-ghgh-57qv-h687","https://nvd.nist.gov/vuln/detail/CVE-2026-88984","https://github.com/kubeflow/pipelines/pull/13288","https://github.com/kubeflow/pipelines/commit/186dd1f3b0403af841c9b4ea7ab94f405339ef6c","https://github.com/kubeflow/pipelines","https://github.com/kubeflow/pipelines/releases/tag/2.16.1"],"sourceUrl":"https://github.com/advisories/GHSA-ghgh-57qv-h687","license":"GitHub Advisory Database · CC-BY-4.0","key":"osv:GHSA-ghgh-57qv-h687","identifiers":["GHSA-ghgh-57qv-h687","CVE-2026-88984"]},"retained":false,"historicalAffected":[]}],"coverage":[{"source":"cisa-kev:global","scope":"Complete CISA KEV catalog; all vendors. Missing entries do not establish absence of exploitation.","generation":"2026-11-15T19:44:19.9938399+00:00","complete":true,"records":1781,"lastAttemptAt":"2026-11-15T19:44:19.9938399+00:00","lastSuccessAt":"2026-11-15T19:44:20.2016227+00:00","error":null,"lastVerifiedAt":"2026-11-15T19:44:20.2016237+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"cve-program","scope":"Official CVE Program baseline and cumulative hourly delta; all vendors, published and rejected records","generation":"cve-7de4d7559a5263003f03d9f70577ab06f92ba4178309f26fce53e22a4a959294-6fc3c2ba902d8763be7b1141e9be97dc9202b7023001a80bc4ce5ca58164e97c","complete":true,"records":425849,"lastAttemptAt":"2026-11-15T19:44:16.7564889+00:00","lastSuccessAt":"2026-11-15T19:44:16.7314012+00:00","error":null,"lastVerifiedAt":"2026-11-15T19:44:16.7564889+00:00","snapshotPublishedAt":"2026-11-15T19:27:02+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"euvd","scope":"Rolling EUVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global EUVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-e20648f5e49d4ef2b794bd9578c389bd","complete":false,"records":13821,"lastAttemptAt":"2026-11-15T19:55:07.4704496+00:00","lastSuccessAt":"2026-11-15T19:55:06.45+00:00","error":"52 identifier lookups failed; latest failures include AccessDenied (HTTP 403). Other identifiers were checked independently.","lastVerifiedAt":"2026-11-15T19:55:06.45+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13822,"expectedIdentifiers":13874,"failedIdentifiers":52},{"source":"first-epss:nuget","scope":"FIRST EPSS for explicit CVE aliases in the collected public NuGet archive. Not a global EPSS backfill.","generation":"2026-11-15T19:44:19.9938399+00:00","complete":true,"records":1125,"lastAttemptAt":"2026-11-15T19:44:19.9938399+00:00","lastSuccessAt":"2026-11-15T19:44:20.2027927+00:00","error":null,"lastVerifiedAt":"2026-11-15T19:44:20.2027932+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"nvd","scope":"Rolling NVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global NVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-9caea03f945849429dd63b61fcc163ed","complete":true,"records":13833,"lastAttemptAt":"2026-11-15T19:46:14.9136905+00:00","lastSuccessAt":"2026-11-15T19:46:14.909+00:00","error":null,"lastVerifiedAt":"2026-11-15T19:46:14.909+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13874,"expectedIdentifiers":13874,"failedIdentifiers":0},{"source":"osv:Go","scope":"Complete OSV Go ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"go-64eea06dbd27de8464d5dbce1b78cc794cc59e2d901516ae0d3ea76e624cdae0","complete":true,"records":9955,"lastAttemptAt":"2026-11-15T19:44:19.5897026+00:00","lastSuccessAt":"2026-11-14T13:57:23.1208135+00:00","error":null,"lastVerifiedAt":"2026-11-15T19:44:19.5897026+00:00","snapshotPublishedAt":"2026-11-14T13:17:57+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:NuGet","scope":"Complete OSV NuGet ecosystem archive, including GitHub Advisory Database records; NuGet version matching only","generation":"nuget-f4424d7d4861b1af1404bd15abcb83f295dcd003412a9340ca99dc8200aa148a","complete":true,"records":2014,"lastAttemptAt":"2026-11-15T19:44:18.729666+00:00","lastSuccessAt":"2026-11-13T19:57:08.2864435+00:00","error":null,"lastVerifiedAt":"2026-11-15T19:44:18.729666+00:00","snapshotPublishedAt":"2026-11-13T19:33:10+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:crates.io","scope":"Complete OSV crates.io ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"crates.io-6086d649bcb454cdf302d7d9275177bda73550e1b6e446b3520e9b6266d3582c","complete":true,"records":3148,"lastAttemptAt":"2026-11-15T19:44:19.9211863+00:00","lastSuccessAt":"2026-11-15T11:05:17.1034234+00:00","error":null,"lastVerifiedAt":"2026-11-15T19:44:19.9211863+00:00","snapshotPublishedAt":"2026-11-15T10:03:04+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:npm","scope":"Complete OSV npm ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"npm-ff18f36f13fcca3a20a3fb9274b59b8872d18869a99071730e1e79b625c8f612","complete":true,"records":232475,"lastAttemptAt":"2026-11-15T19:44:18.8782423+00:00","lastSuccessAt":"2026-11-15T11:05:10.4195883+00:00","error":null,"lastVerifiedAt":"2026-11-15T19:44:18.8782423+00:00","snapshotPublishedAt":"2026-11-15T10:33:06+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null}]}