{"id":"CVE-2026-88986","kind":"vulnerability","aliases":["CVE-2026-88986"],"related":[],"title":"Kubeflow Pipelines: crafted link runs JavaScript in frontend origin","description":"Kubeflow Pipelines enables users to build and deploy portable, scalable machine learning workflows. Prior to 2.15.0, the frontend routes /pipeline/k8s/pod and /pipeline/k8s/pod/events use frontend/server/k8s-helper.ts to include untrusted podname and podnamespace query values and backend error details in HTML-capable error responses. An unauthenticated attacker can craft a link that executes JavaScript in the frontend origin when a user who satisfies the deployment's authentication and route-access requirements follows it and reaches an affected response. Cookie disclosure depends on cookie attributes, and server-side code execution or availability impact is not established. This issue is fixed in version 2.15.0.","summary":"Kubeflow Pipelines frontend routes /pipeline/k8s/pod and /pipeline/k8s/pod/events reflect untrusted podname and podnamespace query values into HTML-capable error responses. An attacker who tricks a logged-in user into opening a crafted link can run JavaScript in the frontend origin.","severity":"medium","cvss":6.1,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["infrastructure","kubeflow-pipelines","kubernetes","machine-learning","self-hosted"],"not_affected_if":["auth-required","fixed-version"],"how_to_check":"- Check the Kubeflow Pipelines version in use; affected versions are those prior to `2.15.0`.\n- Look for the frontend routes `/pipeline/k8s/pod` and `/pipeline/k8s/pod/events` on the deployment.","fix":"- Kubeflow Pipelines: move to `2.15.0`.","status":"open","published_at":"2026-11-05T22:18:54+00:00","first_seen_at":"2026-11-05T22:46:07+00:00","triaged_at":"2026-11-05T22:46:41+00:00","updated_at":"2026-11-05T22:46:41+00:00","category":"infrastructure","confidence":0.7,"triage":{"at":"2026-11-05T22:46:41Z","model":"claude-haiku-5-5","output":{"fix":"- Kubeflow Pipelines: move to `2.15.0`.","reach":"internet","title":"Kubeflow Pipelines: crafted link runs JavaScript in frontend origin","impact":"medium","summary":"Kubeflow Pipelines frontend routes /pipeline/k8s/pod and /pipeline/k8s/pod/events reflect untrusted podname and podnamespace query values into HTML-capable error responses. An attacker who tricks a logged-in user into opening a crafted link can run JavaScript in the frontend origin.","audience":"businesses","category":"infrastructure","nicknames":[],"who_cares":["kubeflow-pipelines","kubernetes","machine-learning","self-hosted"],"confidence":0.7,"fix_status":"available","needs_auth":"unknown","worst_case":"JavaScript runs in frontend origin; session cookies possibly readable","analyst_note":"","how_to_check":"- Check the Kubeflow Pipelines version in use; affected versions are those prior to `2.15.0`.\n- Look for the frontend routes `/pipeline/k8s/pod` and `/pipeline/k8s/pod/events` on the deployment.","plain_action":"","needs_analyst":false,"not_affected_if":["fixed-version","auth-required"],"who_is_affected":"Deployments of Kubeflow Pipelines before 2.15.0 whose frontend exposes the /pipeline/k8s/pod routes to users who have authenticated access. Exploitation needs a user to follow a crafted link, and cookie disclosure depends on cookie attributes. Server-side code execution or availability impact is not established by the sources.","user_interaction":"yes","needs_special_setup":"unknown","severity_if_unknown":"medium"},"cost_usd":0.000745,"input_tokens":4404,"output_tokens":609,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-2026':11A,14A '-88986':12A,15A '/pipeline/k8s/pod':31B,87C '/pipeline/k8s/pod/events':33B,89C '2.15.0':83C,169C 'access':136C 'affect':143C 'attack':48B,112C 'attribut':150C 'authent':132C 'avail':158C 'backend':101C 'build':73C 'capabl':44B,107C 'code':155C 'cooki':145C,149C 'craft':3A,59B,114C 'cve':10A,13A 'depend':147C 'deploy':75C,130C 'detail':103C 'disclosur':146C 'enabl':70C 'error':45B,102C,108C 'establish':162C 'execut':118C,156C 'fix':166C 'follow':138C 'frontend':8A,29B,66B,85C,122C 'frontend/server/k8s-helper.ts':91C 'host':26B 'html':43B,106C 'html-capabl':42B,105C 'impact':159C 'includ':93C 'infrastructur':16B 'issu':164C 'javascript':6A,63B,119C 'kubeflow':1A,18B,27B,68C 'kubeflow-pipelin':17B 'kubernet':20B 'learn':23B,79C 'link':4A,60B,116C 'log':53B 'logged-in':52B 'machin':22B,78C 'machine-learn':21B 'open':57B 'origin':9A,67B,123C 'pipelin':2A,19B,28B,69C 'podnam':36B,95C 'podnamespac':38B,97C 'portabl':76C 'prior':81C 'queri':39B,98C 'reach':141C 'reflect':34B 'requir':137C 'respons':46B,109C,144C 'rout':30B,86C,135C 'route-access':134C 'run':5A,62B 'satisfi':128C 'scalabl':77C 'self':25B 'self-host':24B 'server':153C 'server-sid':152C 'side':154C 'trick':50B 'unauthent':111C 'untrust':35B,94C 'use':90C 'user':55B,71C,126C 'valu':40B,99C 'version':168C 'workflow':80C","nicknames":[],"mitigations":[],"who_affected":"Deployments of Kubeflow Pipelines before 2.15.0 whose frontend exposes the /pipeline/k8s/pod routes to users who have authenticated access. Exploitation needs a user to follow a crafted link, and cookie disclosure depends on cookie attributes. Server-side code execution or availability impact is not established by the sources.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["infrastructure","kubeflowpipelines","kubernetes","machinelearning","medium","selfhosted"],"campaign_type":null,"first_public_at":"2026-09-14T23:30:38+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-88986","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-88986","severity":null,"published_at":"2026-11-05T22:18:54+00:00","modified_at":"2026-11-05T22:18:54+00:00","first_seen_at":"2026-11-05T22:46:07+00:00","fetched_at":"2026-11-05T22:46:07+00:00","note":null}],"documents":[{"id":81032,"url":"https://github.com/kubeflow/pipelines/commit/fedc25e3f7251933d4a37b964bc3e8176beea28e","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":81033,"url":"https://github.com/kubeflow/pipelines/releases/tag/2.15.0","title":"Release notes: github.com","kind":"release","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Release notes: github.com"},{"id":81034,"url":"https://github.com/kubeflow/pipelines/security/advisories/GHSA-g3qx-frcg-j979","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-09-14T23:30:38+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"}],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}