{"id":"CVE-2026-118759","aliases":["GHSA-wg5q-x4j9-qm54"],"title":"Kubeflow Pipelines: Run log streaming endpoint bypasses namespace authorization, exposing pod execution logs cross-tenant","titleSource":"GitHub_M","descriptionSource":"OSV","declaredSeverity":"HIGH","description":"## Summary\n\nThe Kubeflow Pipelines API server's `GET /apis/v1alpha1/runs/{run_id}/nodes/{node_id}/log` handler retrieves logs without authorizing the caller against the selected run. A caller who can reach the backend and knows a victim run ID and a suitable pod or node identifier can read live or archived logs using the API server's permissions.\n\nFor live logs, the vulnerable handler also accepts the supplied node ID as a pod name in the run's namespace without verifying that the pod belongs to the run. Depending on the API server's pod-log permissions, a known run ID can therefore permit reading the `main` container logs of an unrelated pod in that namespace. Logs may contain sensitive workload data or credentials.\n\nThe affected handler does not authenticate the request itself. An external authentication gate or network policy can restrict reachability; public ingress exposure and unauthenticated enumeration of run IDs are not assumed.\n\n## Remediation\n\nUpgrade the API server to **[Kubeflow Pipelines 2.18.0](https://github.com/kubeflow/pipelines/releases/tag/2.18.0)**. Versions through 2.17.3 are affected; the first affected release has not been established.\n\n[PR #13684](https://github.com/kubeflow/pipelines/pull/13684) authorizes the caller with the `readLog` verb before retrieving live or archived logs. For live logs, it also verifies that the pod's `pipeline/runid` label matches the requested run. Custom Kubernetes roles must grant `readLog` on `runs` in the `pipelines.kubeflow.org` API group; the bundled viewer and editor roles include it. Shared read access alone does not grant log access.\n\nUntil upgrading, restrict access to the backend log endpoint. Focused regression tests cover authorization denial, HTTP identity propagation, pod/run mismatch, archive retrieval, and cancellation; no new deployed-cluster end-to-end test was performed for this assessment.\n\n## Credit\n\n[bugbunny.ai](https://bugbunny.ai) discovered and reported the issue. Nayyar ([@naruto-lgtm](https://github.com/naruto-lgtm)) authored the fix in #13684.\n\n[@patchmyday](https://github.com/patchmyday), [@thesecguy45](https://github.com/thesecguy45), [@VitoCrl](https://github.com/VitoCrl), [@Grg0rry](https://github.com/Grg0rry), [@arpitjain099](https://github.com/arpitjain099), and [@BrianWillows](https://github.com/BrianWillows) made later submissions concerning the run-log authorization gap. **MUTEDCYBERSECURITY S.L.** separately reported a synthetic two-tenant reproduction, including the unrelated-pod log path.","severity":"high","score":7.5,"published":"2026-10-29T16:30:25.711Z","modified":"2026-10-30T23:30:04.069Z","withdrawn":false,"knownExploited":false,"affected":[{"ecosystem":"Go","name":"github.com/kubeflow/pipelines","sources":[{"name":"OSV · GHSA-wg5q-x4j9-qm54","url":"https://osv.dev/vulnerability/GHSA-wg5q-x4j9-qm54"}],"ranges":[{"events":[{"introduced":"0"},{"fixed":"0.0.0-20260904182349-be4723e33727"}],"type":"SEMVER"}],"versions":[],"fixed":["0.0.0-20260904182349-be4723e33727"]},{"ecosystem":"Go","name":"github.com/kubeflow/pipelines","sources":[{"name":"OSV · GHSA-wg5q-x4j9-qm54","url":"https://osv.dev/vulnerability/GHSA-wg5q-x4j9-qm54"}],"ranges":[],"versions":["1.7.0-alpha.3"],"fixed":[]}],"sourceAffected":[],"references":["https://github.com/kubeflow/pipelines/security/advisories/GHSA-wg5q-x4j9-qm54","https://github.com/kubeflow/pipelines/pull/13684","https://github.com/kubeflow/pipelines/commit/be4723e33727c6dad71a95cba61e8f61562ab20f","https://github.com/kubeflow/pipelines/releases/tag/2.18.0","https://nvd.nist.gov/vuln/detail/CVE-2026-118759","https://github.com/kubeflow/pipelines"],"sources":[{"name":"CVE","id":"CVE-2026-118759","modified":"2026-10-30T17:13:29.148Z","url":"https://www.cve.org/CVERecord?id=CVE-2026-118759"},{"name":"OSV","id":"GHSA-wg5q-x4j9-qm54","modified":"2026-10-30T23:30:04.069885302Z","url":"https://osv.dev/vulnerability/GHSA-wg5q-x4j9-qm54"}],"assessments":[{"source":"GitHub_M","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N","score":7.5},{"source":"OSV","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N","score":7.5}],"cve":{"records":[{"id":"CVE-2026-118759","source":"GitHub_M","state":"PUBLISHED","reasons":[],"replacements":[],"disputed":false,"unsupportedWhenAssigned":false,"reserved":"2026-10-28T19:20:05.016Z","published":"2026-10-29T16:30:25.711Z","modified":"2026-10-30T17:13:29.148Z"}],"publishers":[{"name":"GitHub_M","role":"CNA","organizationId":"a0819718-46f1-4df5-94e2-005712e83aaa","modified":"2026-10-29T16:30:25.711Z"},{"name":"CISA-ADP","role":"ADP","organizationId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","modified":"2026-10-30T17:13:29.148Z"}],"references":[{"url":"https://github.com/kubeflow/pipelines/security/advisories/GHSA-wg5q-x4j9-qm54","tags":["x_refsource_CONFIRM"],"source":"GitHub_M"},{"url":"https://github.com/kubeflow/pipelines/pull/13684","tags":["x_refsource_MISC"],"source":"GitHub_M"},{"url":"https://github.com/kubeflow/pipelines/commit/be4723e33727c6dad71a95cba61e8f61562ab20f","tags":["x_refsource_MISC"],"source":"GitHub_M"},{"url":"https://github.com/kubeflow/pipelines/releases/tag/2.18.0","tags":["x_refsource_MISC"],"source":"GitHub_M"}],"weaknesses":[{"id":"CWE-200","description":"CWE-200: Exposure of Sensitive Information to an Unauthorized Actor","source":"GitHub_M"},{"id":"CWE-862","description":"CWE-862: Missing Authorization","source":"GitHub_M"}],"applicability":[],"prioritization":[{"source":"CISA-ADP","type":"SSVC","role":"CISA Coordinator","timestamp":"2026-10-30T15:47:06.206005Z","decisions":[{"name":"Exploitation","value":"none"},{"name":"Automatable","value":"yes"},{"name":"Technical Impact","value":"partial"}]}]},"products":[{"vendor":"kubeflow","name":"pipelines","platforms":[],"versions":[{"version":"< 2.18.0","status":"affected"}],"cpes":[],"source":"GitHub_M","url":"https://www.cve.org/CVERecord?id=CVE-2026-118759"}],"remediation":[],"observedAt":"2026-10-31T00:42:09.773Z","kev":{"status":"not-listed","checkedAt":"2026-10-31T09:15:31.262Z"},"coverage":[{"source":"NVD","status":"available","checkedAt":"2026-10-30T10:40:33.316Z","attemptedAt":"2026-10-30T10:40:33.316Z"},{"source":"GHSA","status":"no-result","checkedAt":"2026-10-30T10:40:33.278Z","attemptedAt":"2026-10-30T10:40:33.278Z"},{"source":"EUVD","status":"available","checkedAt":"2026-10-30T10:40:32.878Z","attemptedAt":"2026-10-30T10:40:32.878Z"},{"source":"EPSS","status":"no-result","checkedAt":"2026-10-30T10:40:32.489Z","attemptedAt":"2026-10-30T10:40:32.489Z"}],"evidence":[{"source":"ENISA EUVD","id":"EUVD-2026-113216","url":"https://euvd.enisa.europa.eu/vulnerability/EUVD-2026-113216","modified":"Oct 29, 2026, 4:30:25 PM","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N","checkedAt":"2026-10-30T10:40:32.878Z"},{"source":"NVD","id":"CVE-2026-118759","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-118759","modified":"2026-10-29T17:18:06.630","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N","checkedAt":"2026-10-30T10:40:33.316Z"}],"aiSummary":{"text":"Kubeflow Pipelines versions before 2.18.0 have a vulnerability where the run log streaming endpoint bypasses namespace authorization, potentially exposing pod execution logs. A caller with access to the backend and knowledge of a victim run ID and node identifier can read logs. The impact may include exposure of sensitive workload data or credentials.","model":"@cf/meta/llama-3.3-70b-instruct-fp8-fast","generatedAt":"2026-10-31T00:46:07.404Z","sources":[{"name":"CVE","url":"https://www.cve.org/CVERecord?id=CVE-2026-118759"},{"name":"OSV","url":"https://osv.dev/vulnerability/GHSA-wg5q-x4j9-qm54"}]}}