{"id":"CVE-2026-88979","kind":"vulnerability","aliases":["CVE-2026-88979"],"related":[],"title":"Kubeflow Pipelines: forgeable TensorBoard proxy token exposes viewer responses","description":"Kubeflow Pipelines enables users to build and deploy portable, scalable machine learning workflows. From 2.17.0 until 2.18.0, the TensorBoard proxy token introduced by the incomplete remediation for CVE-2026-54745 uses MINIO_SECRET_KEY as its HMAC secret, whose bundled default is publicly known. In an authorization-disabled deployment using that default, an unauthenticated attacker can forge a token containing a chosen viewerName and namespace; the proxy constructs the destination from the viewerName plus the -service suffix, the namespace, and the configured cluster domain, then reads responses on port 80 under the /tensorboard/<viewer>/ path. Resource-name validation and path-traversal rejection remain enforced, authorization-enabled deployments still check access to the selected namespace, and unrestricted metadata access, writes, or service disruption are not established. This issue is fixed in version 2.18.0.","summary":"Kubeflow Pipelines versions 2.17.0 through 2.18.0 sign the TensorBoard proxy token with the publicly known default MINIO_SECRET_KEY. An unauthenticated attacker in a deployment with authorization disabled can forge a token and read TensorBoard responses from chosen viewers in chosen namespaces.","severity":"medium","cvss":5.8,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["kubeflow-pipelines","kubernetes","machine-learning","package"],"not_affected_if":["authorization-enabled","custom-minio-secret-key","version-below-2.17.0"],"how_to_check":"- Check the Kubeflow Pipelines version deployed, expecting `2.17.0` to `2.18.0` to be affected.\n- Check whether authorization is disabled in the deployment and whether MINIO_SECRET_KEY is still the bundled default.","fix":"- Kubeflow Pipelines: move to `2.18.0`.","status":"open","published_at":"2026-11-05T23:17:01+00:00","first_seen_at":"2026-11-05T23:48:40+00:00","triaged_at":"2026-11-05T23:49:47+00:00","updated_at":"2026-11-05T23:49:47+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-11-05T23:49:47Z","model":"claude-haiku-5-5","output":{"fix":"- Kubeflow Pipelines: move to `2.18.0`.","reach":"network","title":"Kubeflow Pipelines: forgeable TensorBoard proxy token exposes viewer responses","impact":"medium","summary":"Kubeflow Pipelines versions 2.17.0 through 2.18.0 sign the TensorBoard proxy token with the publicly known default MINIO_SECRET_KEY. An unauthenticated attacker in a deployment with authorization disabled can forge a token and read TensorBoard responses from chosen viewers in chosen namespaces.","audience":"businesses","category":"package","nicknames":[],"who_cares":["kubeflow-pipelines","kubernetes","machine-learning"],"confidence":0.7,"fix_status":"available","needs_auth":"no","worst_case":"Unauthenticated attacker reads TensorBoard responses from chosen namespaces","analyst_note":"","how_to_check":"- Check the Kubeflow Pipelines version deployed, expecting `2.17.0` to `2.18.0` to be affected.\n- Check whether authorization is disabled in the deployment and whether MINIO_SECRET_KEY is still the bundled default.","plain_action":"","needs_analyst":false,"not_affected_if":["authorization-enabled","custom-minio-secret-key","version-below-2.17.0"],"who_is_affected":"Deployments of Kubeflow Pipelines from 2.17.0 up to 2.18.0 that run with authorization disabled and the default MINIO_SECRET_KEY are exposed, since the forged token relies on that known secret. Authorization-enabled deployments still check namespace access, and deployments that have changed the secret or enabled authorization are not affected by this path.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"medium"},"cost_usd":0.000766,"input_tokens":4477,"output_tokens":637,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-2026':11A,14A,94C '-54745':95C '-88979':12A,15A '/tensorboard':159C '2.17.0':27B,80C '2.18.0':29B,82C,200C '80':156C 'access':178C,186C 'attack':45B,121C 'author':50B,113C,173C 'authorization-dis':112C 'authorization-en':172C 'build':71C 'bundl':105C 'check':177C 'chosen':61B,64B,128C 'cluster':149C 'configur':148C 'construct':134C 'contain':126C 'cve':10A,13A,93C 'default':39B,106C,118C 'deploy':48B,73C,115C,175C 'destin':136C 'disabl':51B,114C 'disrupt':190C 'domain':150C 'enabl':68C,174C 'enforc':171C 'establish':193C 'expos':7A 'fix':197C 'forg':53B,123C 'forgeabl':3A 'hmac':102C 'incomplet':90C 'introduc':87C 'issu':195C 'key':42B,99C 'known':38B,109C 'kubeflow':1A,17B,24B,66C 'kubeflow-pipelin':16B 'kubernet':19B 'learn':22B,77C 'machin':21B,76C 'machine-learn':20B 'metadata':185C 'minio':40B,97C 'name':163C 'namespac':65B,131C,145C,182C 'packag':23B 'path':160C,167C 'path-travers':166C 'pipelin':2A,18B,25B,67C 'plus':140C 'port':155C 'portabl':74C 'proxi':5A,33B,85C,133C 'public':37B,108C 'read':57B,152C 'reject':169C 'remain':170C 'remedi':91C 'resourc':162C 'resource-nam':161C 'respons':9A,59B,153C 'scalabl':75C 'secret':41B,98C,103C 'select':181C 'servic':142C,189C 'sign':30B 'still':176C 'suffix':143C 'tensorboard':4A,32B,58B,84C 'token':6A,34B,55B,86C,125C 'travers':168C 'unauthent':44B,120C 'unrestrict':184C 'use':96C,116C 'user':69C 'valid':164C 'version':26B,199C 'viewer':8A,62B 'viewernam':129C,139C 'whose':104C 'workflow':78C 'write':187C","nicknames":[],"mitigations":[],"who_affected":"Deployments of Kubeflow Pipelines from 2.17.0 up to 2.18.0 that run with authorization disabled and the default MINIO_SECRET_KEY are exposed, since the forged token relies on that known secret. Authorization-enabled deployments still check namespace access, and deployments that have changed the secret or enabled authorization are not affected by this path.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["kubeflowpipelines","kubernetes","machinelearning","medium","package"],"campaign_type":null,"first_public_at":"2026-10-28T03:50:27+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-88979","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-88979","severity":null,"published_at":"2026-11-05T23:17:01+00:00","modified_at":"2026-11-05T23:17:01+00:00","first_seen_at":"2026-11-05T23:48:40+00:00","fetched_at":"2026-11-05T23:48:40+00:00","note":null}],"documents":[{"id":81488,"url":"https://github.com/kubeflow/pipelines/commit/c8effaed62476a8d8c99d3a6cfdd404a04ef99d8","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":26806,"url":"https://github.com/kubeflow/pipelines/releases/tag/2.18.0","title":"Release: github.com","kind":"release","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Release notes: github.com"},{"id":81490,"url":"https://github.com/kubeflow/pipelines/security/advisories/GHSA-j429-j7xw-8j9h","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-10-28T03:50:27+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"}