Skip to content

Security: bootstrap service accepts any shared-CA client, enabling bootstrap denial of service #5

Description

@iasds

Security impact

An unbootstrapped agent accepts any client certificate chaining to the shared CA. BeginBootstrap does not distinguish a Console client from another agent. Each call consumes one of four pending bootstrap slots until its TTL expires, so a compromised agent can repeatedly prevent the Console from bootstrapping a new agent. The response also unnecessarily discloses the target bootstrap token to that peer.

  • CWE: CWE-863, CWE-400
  • CVSS v3.1: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L (4.3)
  • Audited revision: 85b1652

Scope clarification

This report does not claim certificate impersonation. The certificate issuer is invoked only by the Console's internal bootstrap flow, and the target agent keeps the CSR private key locally.

Affected code

  • console/backend/internal/agent/identity.go: shared-CA client verification only
  • console/backend/internal/agent/bootstrap.go: unrestricted BeginBootstrap, four pending slots

Suggested remediation

Use a Console-specific client identity (separate CA, EKU, or fingerprint check) and enforce it in TLS verification. Rate-limit Begin requests and do not return bootstrap tokens to generic shared-CA peers.

Regression coverage

Prove a normal agent certificate cannot call BeginBootstrap, while the Console bootstrap identity can.

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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions