Skip to content

Disclose plaintext browser storage for Lab saved keypairs #2605

Description

@kalepail

Finding

Stellar Lab documentation does not make the Saved Keypairs storage and offline
boundary prominent enough for a secret-bearing browser tool. Current Laboratory
source serializes saved keypair objects to browser localStorage as
plaintext JSON, and current tests place the S... secret in that object.
The Saved Keypairs page correctly restricts use to Testnet/Futurenet and says
never Mainnet, but it does not state the concrete storage property: the secret
is persisted as plaintext browser storage, not encrypted custody.

Evidence

Both GT-54 verification lanes reviewed the current Lab docs and source. The
pre-read-locked blind lane independently confirmed the browser-storage boundary
before reading the primary report, and the final reconciliation records
plaintext JSON in localStorage as the controlling fact. No secret was
generated, pasted, saved or transmitted during verification.

This is a docs-content gap rather than a claim that local browser storage is a
remote service. It is also separate from wallet/hardware/external-signature
flows, which avoid placing a production seed in Lab.

Additional recorded evidence:

  • Lab Saved Keypairs docs inspected 2026-07-11 restrict the feature to Testnet and Futurenet and say never Mainnet
  • current stellar/laboratory localStorageSavedKeypairs source serializes saved keypair objects into browser localStorage
  • current Laboratory tests persist the S-secret value in the saved object
  • rechecked 2026-07-14: the current page says browser local storage but does not state that it is plaintext JSON; current Laboratory source serializes saved keypairs with JSON.stringify

Recommendation

Add one warning beside the existing Saved Keypairs network restriction: an
S... secret is stored as plaintext JSON in browser localStorage, not
encrypted custody. Keep the existing Testnet/Futurenet-only and never-Mainnet
guidance.

Source Record

This was found by the downstream Raven eval/improvements loop and recorded as sd-030 (stellar-docs, discovered 2026-07-11).

Public source record: improvements/stellar-docs/sd-030-lab-saved-keypairs-offline-boundary.md

Immutable source snapshot: bbb0d4f55527

Resolution Handoff

When a fix is deployed, please link the resolving issue or PR to the source record above and notify Raven through:

https://github.com/kalepail/stellar-raven/issues/new?template=upstream-improvement-ready.yml&title=%5Bupstream-ready%5D%20sd-030%3A%20

Include the finding id, resolving issue/PR, deployed version or timestamp, and the smallest live recheck. Raven independently verifies the upstream surface before changing the finding to fixed-upstream; issue closure or a merged PR alone is not treated as proof. After a distinct reviewer repeats the live check, the active finding is retired to Raven's resolved ledger while the immutable snapshot remains available.

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

    good first issueGood for newcomersravenissues discovered by Stellar Raven QA passes

    Type

    No type

    Projects

    • Status
      No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions