Skip to content

Latest commit

 

History

History
71 lines (55 loc) · 4.75 KB

File metadata and controls

71 lines (55 loc) · 4.75 KB

Security policy

Supported versions

Security fixes are provided for the latest released minor version. During the 0.x series, upgrade to the newest release before reporting a bug that may already be fixed.

Report a vulnerability

Do not open a public issue. Use a private GitHub security advisory with:

  • affected version and component;
  • deployment topology and Kubernetes version;
  • reproduction steps or proof of concept;
  • expected and observed impact;
  • any suggested mitigation.

You should receive an acknowledgement within seven days. Please allow maintainers time to investigate, prepare a fix, and coordinate disclosure. No bug-bounty program is currently offered.

Security model

Devboxes defaults to a trusted single operator or operator group. Opt-in multi-tenancy adds principal roles and a dedicated Kubernetes namespace, credentials, storage, quota, and telemetry scope per tenant. The master access token remains an installation-wide operator credential that can control and permanently purge every tenant.

Workspaces are development machines with passwordless sudo; they are not sandboxes for hostile code. Namespace isolation, application authorization, RBAC, ResourceQuota, and NetworkPolicy provide administrative tenant separation and defense in depth, not a hardened kernel or node boundary. Use separate clusters or appropriately sandboxed runtimes when tenants must run mutually hostile workloads.

Recommended deployment controls:

  • expose the controller only through HTTPS or local port-forwarding;
  • restrict controller ingress and SSH Services to trusted client networks;
  • use a 256-bit or stronger controller token and rotate it after suspected exposure;
  • give tenant users unique principal tokens and least-privilege viewer, member, or admin memberships instead of the master token;
  • use one namespace per person when independent ownership or quota is required, and keep tenant workspace Secrets separate;
  • use fine-grained, least-privilege provider tokens;
  • enable Kubernetes Secret encryption at rest and an auditable secret manager;
  • enforce the chart's namespace-scoped RBAC and tokenless workspace service account;
  • use a NetworkPolicy-capable CNI, review the chart's SSH-only ingress policy, and add environment-specific source and egress restrictions where required;
  • expose GPU devices only through reviewed operator-owned profiles and trusted derived images;
  • back up important PVCs and test restore procedures;
  • keep Kubernetes, ingress, CSI, images, chart, and CLI releases current;
  • verify release checksums and image provenance attestations.

The CLI refuses plaintext controller URLs except exact loopback hosts. Browser login uses an external browser, a 127.0.0.1 ephemeral callback, state validation, PKCE S256, one-time authorization codes, and expiring scoped tokens. It has no skip-TLS-verification option. Workspace SSH disables password, keyboard-interactive, and root login and uses persistent Ed25519 host keys. Incoming terminal names are validated against installed terminfo before tmux starts.

GPU profiles preserve this trust model. Clients can select only a configured name; they cannot inject an image, extended resource, RuntimeClass, supplemental group, selector, toleration, privileged mode, host path, or device path. The assigned device is fully available to the trusted workspace user, including through passwordless sudo, so GPU profiles do not make Devboxes suitable for untrusted workloads. Vendor drivers, device plugins, runtimes, and derived GPU images are part of the operator's trusted supply chain.

Multi-tenant clients select only a configured tenant ID and an operator-approved policy catalog. Unknown and unauthorized IDs use the same forbidden response. The controller has one namespaced RoleBinding per configured tenant and no ClusterRole; workspaces use ServiceAccounts without API tokens or RBAC bindings. Tenant Insights exports, including SQLite backups, are sanitized to the active tenant before leaving the controller. Application roles do not replace SSH authorization: shell access is controlled by the public keys in each tenant workspace Secret. A viewer with an authorized key can modify workspace files but cannot change the workspace lifecycle through the Devboxes API.

Dependency and supply-chain policy

Dependabot monitors npm, Cargo, Python, Docker, and GitHub Actions dependencies. Pull requests receive dependency review, and CI audits npm, Python, and Cargo dependencies, builds both images, performs strict JavaScript, documentation, controller, and CLI checks, validates Helm output, and installs into a clean Kind cluster. Release images are published for amd64 and arm64 with GitHub artifact attestations; CLI archives include SHA-256 checksums.