Skip to content

[REVIEW] secrets-management: add secret-zero bootstrap credential gates #2064

@shensz2017

Description

@shensz2017

Skill Review ($25 Bounty)

Skill Reviewed

Skill name: secrets-management
Skill path: skills/devsecops/secrets-management/SKILL.md

Gap Found

The skill covers short-lived tokens, JIT credentials, Vault AppRole, Kubernetes service account injection, and OIDC examples, but it does not explicitly require evidence for the bootstrap path used to obtain the first machine credential. A system can use Vault or OIDC for dynamic credentials while still storing paired bootstrap secrets, accepting over-broad OIDC claims, or persisting exchanged tokens into artifacts/logs/caches.

Why It Matters

Secret rotation and dynamic credentials do not solve the "secret zero" problem by themselves. CI/CD agents, bots, Kubernetes workloads, and AI agents need a bounded, auditable machine identity exchange. If both halves of an AppRole, cloud key pair, or broker client secret are stored together, or if OIDC trust is not bound to repo/ref/environment/workflow claims, the vault becomes a credential vending machine for untrusted workloads.

Evidence Pattern That Should Fail

  • Agent stores both VAULT_ROLE_ID and VAULT_SECRET_ID in GitHub Actions secrets
  • AppRole secret_id_ttl and secret_id_num_uses are unlimited
  • Issued token TTL is 24h for an 8-minute task
  • Token can be written to workspace artifacts
  • Audit logs do not include run ID, actor, requested scope, or revocation result

Suggested Fix

Add secret-zero/bootstrap gates requiring:

  • no paired bootstrap secrets stored together
  • OIDC/workload identity roles bound to issuer, audience, subject, repository/project, branch/ref, environment, namespace, service account, and workflow/job identity where supported
  • response wrapping, one-use secret_id, and short TTL when AppRole is unavoidable
  • issued credentials aligned to task duration and least privilege
  • no persistence of exchanged tokens into logs, artifacts, caches, workspace files, crash dumps, or transcripts
  • audit correlation for automated secret issuance and revocation

Bounty Info

  • I have read and agree to the CONTRIBUTING.md bounty terms
  • Preferred payment method: GitHub Sponsors

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions