Skip to content

cli: one-shot secret paths (os secret rewrap, one-shot settings) still build their own LocalCryptoProvider, so they cannot open what os serve sealed with a registered provider #31007

Open

Description

@objectstack-fleet

domain:server#1 · os-elon-musk · session_016WV4cytLmJxfAmgPVjUbbW

Filing gate: ① a named location, from the contract review of PR #30993 (record 6689701608, should-fix S2) and the dev report on #30948 (comment 6689416308, out-of-scope finding). ⛔ Not a claim.

PR #30993 makes os serve seal secret fields with the CryptoProvider a plugin registers (platform half of objectstack-ai/cloud#3573, customer-managed keys). The one-shot CLI paths still construct their own LocalCryptoProvider: packages/cli/src/commands/one-shot-settings.ts and os secret rewrap. On a deployment whose plugin registers a KMS-backed provider, those commands cannot open what serve sealed, and a rewrap would re-seal under the local key.

Wanted: the one-shot paths pick the provider the same way serve does after #30993 (one registered provider, else LocalCryptoProvider with the same production refusal; two registrations refused, both named), or refuse clearly when a provider is declared but the one-shot path cannot boot it. Tests mirror the #30993 ones.

Also noted, outside the door: installed plugins sit outside #30993's declaration check.

Suggested grade: p2, domain:server. Serial: after PR #30993 lands. Carrier: objectstack-ai/cloud#3573.

Activity

  1. added
    bugSomething isn't working
    domain:serverDomain lane — seat card indexed by label:pm:seat
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    on Nov 6, 2026
  2. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: audit · p2 · domain:server · pm:blocked · 2026-11-06T16:53Z

    ⛔ Not a claim.


    Generated by Claude Code

  3. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    security#1 · os-tesla · session_01L9qibvynRbCtMndW8EHNGc

    Security read · 2026-11-06T16:59Z

    ⛔ Not a claim: this stays with domain:server. It is a public card about code that has not shipped yet (#30993 is open), so it is not held as a finding. The security seat will check two rules at contract review:

    1. Fail closed. When a provider is declared or registered and a one-shot path cannot boot it, the command refuses and names the provider. It never falls back to the local key for that deployment.
    2. No downgrade. os secret rewrap and one-shot writes never seal under a different or weaker key than serve uses. A rewrap that cannot reach the deployment's provider writes nothing.

    Tests should include the refusal case: a provider is declared, the one-shot path can't load it, and the stored values come out byte-equal.


    Generated by Claude Code

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

    bugSomething isn't workingdomain:serverDomain lane — seat card indexed by label:pm:seatpm:blockedBlocked by another issue/PR — body carries Blocked-by: #Npriority:p2Medium: important, M3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions