Skip to content

Global GET /k8s/clusters exposes cross-project BNK membership to any viewer (S2) #116

Description

@jgruberf5

Cold-audit finding on PR #500 (ADR-424 Phase 1). Not a new bug — a widening of a pre-existing global-by-design endpoint.

GET /api/k8s/clusters (routes/k8s/clusters.py, dependencies=[Depends(require_viewer)], no project scope) calls list_all_clusters() and returns every cluster across all projects to any authenticated viewer. That was already true for cluster metadata. ADR-424 adds bnk_config to the serialized shape, so the global list now also exposes each cluster's host_ids, dpu_ids, control_plane_host_id, and tmfifo_pool_cidr cross-project.

If require_viewer is meant to be per-project rather than instance-global, this is cross-tenant info disclosure. Decide the intended tenancy model for the global list and, if needed, project-scope it (relates to the pre-existing KubernetesCluster scope sweep, #508).

Source: ADR-424 round-3 cold audit (rated SUGGESTION — pre-existing design).


Migrated from sp-prod-field/bnk-forge #511 (opened 2026-07-29; original labels: none). That repository is archived and read-only.
Bare #NNN references in the text above refer to issues and PRs in the original repository, not to numbering here.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    backendFastAPI backend: routes, services, tasksbugSomething is broken or behaves incorrectlykubernetesK8s engine, Helm, CRDs, cluster operationssecuritySecurity hardening, CVE tracking, or an authz/authn gapseverity:mediumCorrectness or diagnosability degraded; workaround exists

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions