Skip to content

mongo passthrough secrets with no binder slot (proxyPassword, TLS key material, passphrases) stay writable as at-rest cleartext — redacted on read since #9040, but the store-side half has no door #9124

Description

@os-zhuang

Found while implementing #9040 (the options.auth.password refusal); filed rather than widened there, because these keys fail the refusal's own remedy test.

What was measured (mongodb@7.5.0, the client @objectstack/driver-mongodb spreads config.options into)

Four MongoClient options are honoured client secrets an author can write into the options passthrough:

  • proxyPassword — SOCKS5 proxy password, accepted and honoured (measured: c.options.proxyPassword carries it).
  • tlsCertificateKeyFilePassword — key-file passphrase, declared in the client's OPTIONS table.
  • key — TLS private key material (PEM), declared in the client's OPTIONS table.
  • passphrase — TLS key passphrase, declared in the client's OPTIONS table.

Why #9040 did NOT refuse them

The datasource secret binder injects exactly ONE secret per datasource, and that slot is the login password (external.credentialsRef resolution). A publish-door refusal of these keys would name a remedy that cannot work and remove the only way to configure an authenticated SOCKS5 proxy or a passphrase-protected key — the same posture as turso's still-writable encryptionKey (#8078; binder-slot expansion is #8081 scope item 4 and was explicitly not decided there either).

What #9040 did do

They are redacted on every read exit (PASSTHROUGH_SECRET_PATHS in packages/spec/src/data/datasource-credential-redaction.ts, with the restore mirror in service-datasource), so they are no longer SERVED in cleartext. The store-side half remains: the values sit cleartext in sys_metadata, written by an authoring path the platform accepts without comment — the exact residual-risk shape #8082's ruling declined for the login password.

The decision this needs (not taken in #9040)

Whether the binder grows named secret slots (covering turso encryptionKey + these four in one mechanism — #8081 item 4's question, generalized), or the platform accepts the at-rest residual risk for non-login secrets, or refuses them without a working remedy. Each option trades differently on capability vs. at-rest exposure; the #9040 PR body carries the per-key measurements.

Backlink: #9040, #8081.


Generated by Claude Code

Metadata

Metadata

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions