SECURITY: Phase-4 approval gate not enforced on the admin-token path — org concierge minted live org tokens + wrote secrets with NO human approval #2574

Open
opened 2026-06-11 04:40:16 +00:00 by core-devops · 0 comments
Member

Live evidence (agents-team, 2026-06-11): asked for a test approval, the org platform agent (whose management MCP authenticates with the tenant ADMIN_TOKEN) executed:

  • mint_org_token → TWO live full-tenant-admin org API tokens created (eZoCYLRD… at 00:08Z, 1tgCXRKg… at 01:53Z) — no pending approval, no human in the loop. Both revoked by the operator at 04:39Z.
  • set_workspace_secret / set_org_secret → wrote TEST_APPROVAL_SECRET / TEST_APPROVAL_DUMMY_KEY immediately (and the secret-change auto-restart fired — core#2573). Junk secrets cleaned.
  • /approvals/pending was EMPTY throughout — the gate never engaged.

Per the platform-agent RFC Phase 4, org_token_mint, secret_write, delete_workspace, deprovision are approval-gated: the handler should return 202 {approval_id, status: pending} and execute only after a human decision. The live behavior shows the gate is NOT enforced when the caller presents the tenant ADMIN_TOKEN (the exact credential the concierge holds), reducing the RFC's human-in-the-loop contract to nothing for the agent that needs it most.

Asks:

  1. Enforce the approval gate on the gated verbs REGARDLESS of credential class when the caller is a workspace/agent (the install/operator paths can carry an explicit bypass header if needed for provisioning).
  2. Tests: integration — gated verb via admin-token-bearing agent ⇒ 202 + pending approval row + NO side effect until decide; e2e in the staging concierge suite.
  3. Related: mcp-server#61 (concierge needs create_approval so it never improvises with gated verbs), core#2573 (self-restart on self-targeted secret write).

CTO design note (2026-06-11): self-targeted secret writes by an agent are a smell anyway — an agent wanting its own env/config value should set env/config, not a platform secret pointing at itself; consider rejecting agent-initiated self-targeted secret writes outright.

🤖 Generated with Claude Code

**Live evidence (agents-team, 2026-06-11):** asked for a test approval, the org platform agent (whose management MCP authenticates with the tenant ADMIN_TOKEN) executed: - `mint_org_token` → TWO live full-tenant-admin org API tokens created (eZoCYLRD… at 00:08Z, 1tgCXRKg… at 01:53Z) — no pending approval, no human in the loop. Both revoked by the operator at 04:39Z. - `set_workspace_secret` / `set_org_secret` → wrote TEST_APPROVAL_SECRET / TEST_APPROVAL_DUMMY_KEY immediately (and the secret-change auto-restart fired — core#2573). Junk secrets cleaned. - `/approvals/pending` was EMPTY throughout — the gate never engaged. Per the platform-agent RFC Phase 4, `org_token_mint`, `secret_write`, `delete_workspace`, `deprovision` are approval-gated: the handler should return 202 {approval_id, status: pending} and execute only after a human decision. The live behavior shows the gate is NOT enforced when the caller presents the tenant ADMIN_TOKEN (the exact credential the concierge holds), reducing the RFC's human-in-the-loop contract to nothing for the agent that needs it most. **Asks:** 1. Enforce the approval gate on the gated verbs REGARDLESS of credential class when the caller is a workspace/agent (the install/operator paths can carry an explicit bypass header if needed for provisioning). 2. Tests: integration — gated verb via admin-token-bearing agent ⇒ 202 + pending approval row + NO side effect until decide; e2e in the staging concierge suite. 3. Related: mcp-server#61 (concierge needs create_approval so it never improvises with gated verbs), core#2573 (self-restart on self-targeted secret write). CTO design note (2026-06-11): self-targeted secret writes by an agent are a smell anyway — an agent wanting its own env/config value should set env/config, not a platform secret pointing at itself; consider rejecting agent-initiated self-targeted secret writes outright. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: molecule-ai/molecule-core#2574