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
Found while implementing #9040 (the
options.auth.passwordrefusal); 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-mongodbspreadsconfig.optionsinto)Four MongoClient options are honoured client secrets an author can write into the
optionspassthrough:proxyPassword— SOCKS5 proxy password, accepted and honoured (measured:c.options.proxyPasswordcarries 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.credentialsRefresolution). 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-writableencryptionKey(#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_PATHSinpackages/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 insys_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