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.
Security impact
An unbootstrapped agent accepts any client certificate chaining to the shared CA.
BeginBootstrapdoes 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.CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L(4.3)85b1652Scope 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 onlyconsole/backend/internal/agent/bootstrap.go: unrestrictedBeginBootstrap, four pending slotsSuggested 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.