instar 1.3.276 → 1.3.277
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +11 -0
- package/dist/commands/server.js.map +1 -1
- package/dist/core/SecretStore.d.ts +61 -10
- package/dist/core/SecretStore.d.ts.map +1 -1
- package/dist/core/SecretStore.js +248 -115
- package/dist/core/SecretStore.js.map +1 -1
- package/dist/core/SecretSync.d.ts +7 -0
- package/dist/core/SecretSync.d.ts.map +1 -1
- package/dist/core/SecretSync.js.map +1 -1
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +3 -0
- package/dist/server/routes.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +46 -46
- package/upgrades/1.3.277.md +50 -0
- package/upgrades/side-effects/vault-key-coherence.md +113 -0
|
@@ -15,11 +15,29 @@
|
|
|
15
15
|
* Part of Phase 4 (secret sync via tunnel).
|
|
16
16
|
*/
|
|
17
17
|
import crypto from 'node:crypto';
|
|
18
|
+
/** Per-agent keychain account: scoped by the absolute stateDir so two agents
|
|
19
|
+
* on one machine can never clobber each other's master key. Readable in
|
|
20
|
+
* Keychain Access (the path IS the identity — debuggable, collision-free). */
|
|
21
|
+
export declare function perAgentKeychainAccount(stateDir: string): string;
|
|
22
|
+
/** The 8-byte key fingerprint stored in the v2 header. */
|
|
23
|
+
export declare function keyIdOf(key: Buffer): Buffer;
|
|
24
|
+
/** Injectable keychain operations (per service+account). Production uses the
|
|
25
|
+
* real OS keychain (macOS `security` / Linux `secret-tool`); tests inject a
|
|
26
|
+
* fake so the per-agent/adoption logic is unit-testable WITHOUT touching a
|
|
27
|
+
* real keychain (the VITEST file-key guard stays in force when this is not
|
|
28
|
+
* injected — an injected fake is, by definition, not the real keychain). */
|
|
29
|
+
export interface KeychainOps {
|
|
30
|
+
read: (service: string, account: string) => Buffer | null;
|
|
31
|
+
/** Returns true on success. */
|
|
32
|
+
write: (service: string, account: string, key: Buffer) => boolean;
|
|
33
|
+
}
|
|
18
34
|
export interface SecretStoreConfig {
|
|
19
35
|
/** State directory (.instar) */
|
|
20
36
|
stateDir: string;
|
|
21
37
|
/** Force file-based key storage (skip keychain) */
|
|
22
38
|
forceFileKey?: boolean;
|
|
39
|
+
/** Test seam — see KeychainOps. Absent in production (real keychain used). */
|
|
40
|
+
keychainOps?: KeychainOps;
|
|
23
41
|
}
|
|
24
42
|
/** The decrypted secrets object (flat key-value or nested) */
|
|
25
43
|
export type Secrets = Record<string, unknown>;
|
|
@@ -42,27 +60,60 @@ export declare class MasterKeyManager {
|
|
|
42
60
|
private stateDir;
|
|
43
61
|
private forceFile;
|
|
44
62
|
private keyFilePath;
|
|
45
|
-
|
|
46
|
-
|
|
63
|
+
private kc;
|
|
64
|
+
constructor(stateDir: string, forceFile?: boolean, keychainOps?: KeychainOps);
|
|
65
|
+
/**
|
|
66
|
+
* Retrieve or generate the master key. Resolution order (vault-key-coherence,
|
|
67
|
+
* CMT-1038 — the per-agent fix for the machine-global-slot bifurcation):
|
|
68
|
+
* 1. the PER-AGENT keychain entry (`master-key:<stateDir>`);
|
|
69
|
+
* 2. the LEGACY global entry (`master-key`) — ADOPTED on sight: copied into
|
|
70
|
+
* the per-agent account (the global entry is left in place for other
|
|
71
|
+
* not-yet-migrated agents; this code never writes it again);
|
|
72
|
+
* 3. the per-agent file key (generating one — and writing the PER-AGENT
|
|
73
|
+
* keychain entry, never the global one — when none exists anywhere).
|
|
74
|
+
*/
|
|
47
75
|
getMasterKey(): Buffer;
|
|
76
|
+
/**
|
|
77
|
+
* Every key this agent could plausibly have encrypted its store with, primary
|
|
78
|
+
* first: [resolved primary, the OTHER source's key if it exists and differs].
|
|
79
|
+
* Read-only — alternates NEVER generate. Backs the dual-key read fallback
|
|
80
|
+
* (a v1 store written before the sources diverged stays readable, loudly).
|
|
81
|
+
*/
|
|
82
|
+
getCandidateKeys(): Array<{
|
|
83
|
+
key: Buffer;
|
|
84
|
+
source: 'keychain' | 'file';
|
|
85
|
+
}>;
|
|
48
86
|
/** Whether the master key is stored in the OS keychain (vs file fallback). */
|
|
49
87
|
get isKeychainBacked(): boolean;
|
|
50
|
-
private
|
|
51
|
-
private
|
|
52
|
-
private
|
|
53
|
-
private writeMacKeychain;
|
|
54
|
-
private readLinuxKeychain;
|
|
55
|
-
private writeLinuxKeychain;
|
|
88
|
+
private tryRead;
|
|
89
|
+
private readOsKeychain;
|
|
90
|
+
private writeOsKeychain;
|
|
56
91
|
private getFileKey;
|
|
57
92
|
}
|
|
58
93
|
export declare class SecretStore {
|
|
59
94
|
private stateDir;
|
|
60
95
|
private keyManager;
|
|
61
96
|
private encryptedPath;
|
|
97
|
+
/** Which key source decrypted the LAST successful read() — observability for
|
|
98
|
+
* the dual-key fallback ('keychain' | 'file'; null before any read). */
|
|
99
|
+
lastReadKeySource: 'keychain' | 'file' | null;
|
|
62
100
|
constructor(config: SecretStoreConfig);
|
|
63
|
-
/**
|
|
101
|
+
/**
|
|
102
|
+
* Read and decrypt secrets from the encrypted store. Returns empty object if
|
|
103
|
+
* no secrets exist.
|
|
104
|
+
*
|
|
105
|
+
* Vault-key-coherence (CMT-1038): tries every candidate key (primary first,
|
|
106
|
+
* then the OTHER source — keychain↔file) so a store written before the key
|
|
107
|
+
* sources diverged stays READABLE instead of looking "empty" to half the
|
|
108
|
+
* readers (the 2026-06-05 bifurcation incident). A v2 file's keyId header
|
|
109
|
+
* names the required key, so wrong-key is a precise error distinct from
|
|
110
|
+
* corruption. Success via a non-primary key emits a loud degradation report;
|
|
111
|
+
* the next write() converges the store back to the primary key.
|
|
112
|
+
*/
|
|
64
113
|
read(): Secrets;
|
|
65
|
-
/**
|
|
114
|
+
/** Record the source that decrypted; loudly report a non-primary success. */
|
|
115
|
+
private noteReadKeySource;
|
|
116
|
+
/** Encrypt and write secrets to the store (v2 format — keyId header). */
|
|
66
117
|
write(secrets: Secrets): void;
|
|
67
118
|
/** Get a specific secret by dot-notation path (e.g., 'telegram.token'). */
|
|
68
119
|
get(keyPath: string): unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecretStore.d.ts","sourceRoot":"","sources":["../../src/core/SecretStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"SecretStore.d.ts","sourceRoot":"","sources":["../../src/core/SecretStore.ts"],"names":[],"mappings":"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"}
|
package/dist/core/SecretStore.js
CHANGED
|
@@ -22,11 +22,28 @@ import { DegradationReporter } from '../monitoring/DegradationReporter.js';
|
|
|
22
22
|
import { SafeFsExecutor } from './SafeFsExecutor.js';
|
|
23
23
|
// ── Constants ────────────────────────────────────────────────────────
|
|
24
24
|
const KEYCHAIN_SERVICE = 'instar-secret-store';
|
|
25
|
-
|
|
25
|
+
/** LEGACY machine-global account — the root of the 2026-06-05 key-bifurcation
|
|
26
|
+
* incident (one slot shared by every agent on the box, silently overwritable
|
|
27
|
+
* by any fresh-stateDir SecretStore). Read for ADOPTION only; never written. */
|
|
28
|
+
const KEYCHAIN_ACCOUNT_LEGACY = 'master-key';
|
|
26
29
|
const MASTER_KEY_LENGTH = 32; // AES-256
|
|
27
30
|
const IV_LENGTH = 12; // AES-256-GCM
|
|
28
31
|
const AUTH_TAG_LENGTH = 16;
|
|
29
32
|
const HKDF_INFO = 'instar-secret-sync-v1';
|
|
33
|
+
/** v2 at-rest store format magic: 'ISv2' | keyId(8) | iv(12) | tag(16) | ct.
|
|
34
|
+
* The keyId (sha256(key) prefix) makes wrong-key diagnosable vs corruption. */
|
|
35
|
+
const STORE_MAGIC_V2 = Buffer.from('ISv2', 'ascii');
|
|
36
|
+
const KEY_ID_LENGTH = 8;
|
|
37
|
+
/** Per-agent keychain account: scoped by the absolute stateDir so two agents
|
|
38
|
+
* on one machine can never clobber each other's master key. Readable in
|
|
39
|
+
* Keychain Access (the path IS the identity — debuggable, collision-free). */
|
|
40
|
+
export function perAgentKeychainAccount(stateDir) {
|
|
41
|
+
return `master-key:${path.resolve(stateDir)}`;
|
|
42
|
+
}
|
|
43
|
+
/** The 8-byte key fingerprint stored in the v2 header. */
|
|
44
|
+
export function keyIdOf(key) {
|
|
45
|
+
return crypto.createHash('sha256').update(key).digest().subarray(0, KEY_ID_LENGTH);
|
|
46
|
+
}
|
|
30
47
|
// ── Master Key Management ────────────────────────────────────────────
|
|
31
48
|
/**
|
|
32
49
|
* Store/retrieve the master key from the OS keychain.
|
|
@@ -36,147 +53,201 @@ export class MasterKeyManager {
|
|
|
36
53
|
stateDir;
|
|
37
54
|
forceFile;
|
|
38
55
|
keyFilePath;
|
|
39
|
-
|
|
56
|
+
kc;
|
|
57
|
+
constructor(stateDir, forceFile = false, keychainOps) {
|
|
40
58
|
this.stateDir = stateDir;
|
|
41
|
-
// Test runs are ALWAYS file-key-only
|
|
42
|
-
// (
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
//
|
|
46
|
-
// test
|
|
47
|
-
|
|
48
|
-
// forceFileKey.
|
|
49
|
-
const inTestRun = !!process.env.VITEST || process.env.NODE_ENV === 'test';
|
|
59
|
+
// Test runs are ALWAYS file-key-only — UNLESS a fake keychain is injected
|
|
60
|
+
// (an injected KeychainOps is by definition not the real keychain, so the
|
|
61
|
+
// pollution risk the guard exists for cannot occur). The real-keychain
|
|
62
|
+
// guard (2026-06-05 incident: an integration test overwrote the then-
|
|
63
|
+
// machine-global entry and broke the dev agent's vault) stays structural:
|
|
64
|
+
// no test without an explicit fake can touch the OS keychain.
|
|
65
|
+
const inTestRun = (!!process.env.VITEST || process.env.NODE_ENV === 'test') && !keychainOps;
|
|
50
66
|
this.forceFile = forceFile || inTestRun;
|
|
51
67
|
this.keyFilePath = path.join(stateDir, 'machine', 'secrets-master.key');
|
|
68
|
+
this.kc = keychainOps ?? {
|
|
69
|
+
read: (service, account) => this.readOsKeychain(service, account),
|
|
70
|
+
write: (service, account, key) => this.writeOsKeychain(service, account, key),
|
|
71
|
+
};
|
|
52
72
|
}
|
|
53
|
-
/**
|
|
73
|
+
/**
|
|
74
|
+
* Retrieve or generate the master key. Resolution order (vault-key-coherence,
|
|
75
|
+
* CMT-1038 — the per-agent fix for the machine-global-slot bifurcation):
|
|
76
|
+
* 1. the PER-AGENT keychain entry (`master-key:<stateDir>`);
|
|
77
|
+
* 2. the LEGACY global entry (`master-key`) — ADOPTED on sight: copied into
|
|
78
|
+
* the per-agent account (the global entry is left in place for other
|
|
79
|
+
* not-yet-migrated agents; this code never writes it again);
|
|
80
|
+
* 3. the per-agent file key (generating one — and writing the PER-AGENT
|
|
81
|
+
* keychain entry, never the global one — when none exists anywhere).
|
|
82
|
+
*/
|
|
54
83
|
getMasterKey() {
|
|
55
84
|
if (!this.forceFile) {
|
|
56
|
-
|
|
57
|
-
const
|
|
58
|
-
if (
|
|
59
|
-
return
|
|
85
|
+
const account = perAgentKeychainAccount(this.stateDir);
|
|
86
|
+
const own = this.tryRead(account);
|
|
87
|
+
if (own)
|
|
88
|
+
return own;
|
|
89
|
+
const legacy = this.tryRead(KEYCHAIN_ACCOUNT_LEGACY);
|
|
90
|
+
if (legacy) {
|
|
91
|
+
// Adoption: persist under the per-agent account so this agent's key
|
|
92
|
+
// resolution stops depending on the shared slot. Best-effort — a
|
|
93
|
+
// failed write just means adoption retries on the next read.
|
|
94
|
+
try {
|
|
95
|
+
this.kc.write(KEYCHAIN_SERVICE, account, legacy);
|
|
96
|
+
}
|
|
97
|
+
catch { /* @silent-fallback-ok — retried next read */ }
|
|
98
|
+
return legacy;
|
|
99
|
+
}
|
|
60
100
|
}
|
|
61
101
|
// File fallback
|
|
62
102
|
return this.getFileKey();
|
|
63
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Every key this agent could plausibly have encrypted its store with, primary
|
|
106
|
+
* first: [resolved primary, the OTHER source's key if it exists and differs].
|
|
107
|
+
* Read-only — alternates NEVER generate. Backs the dual-key read fallback
|
|
108
|
+
* (a v1 store written before the sources diverged stays readable, loudly).
|
|
109
|
+
*/
|
|
110
|
+
getCandidateKeys() {
|
|
111
|
+
const out = [];
|
|
112
|
+
const push = (key, source) => {
|
|
113
|
+
if (key && !out.some((c) => c.key.equals(key)))
|
|
114
|
+
out.push({ key, source });
|
|
115
|
+
};
|
|
116
|
+
if (this.forceFile) {
|
|
117
|
+
push(this.getFileKey(), 'file');
|
|
118
|
+
// Alternate: an existing keychain key (never generated) — covers a store
|
|
119
|
+
// written under keychain resolution before forceFileKey was flipped on.
|
|
120
|
+
push(this.tryRead(perAgentKeychainAccount(this.stateDir)), 'keychain');
|
|
121
|
+
push(this.tryRead(KEYCHAIN_ACCOUNT_LEGACY), 'keychain');
|
|
122
|
+
return out;
|
|
123
|
+
}
|
|
124
|
+
push(this.tryRead(perAgentKeychainAccount(this.stateDir)), 'keychain');
|
|
125
|
+
push(this.tryRead(KEYCHAIN_ACCOUNT_LEGACY), 'keychain');
|
|
126
|
+
// Existing file key as an alternate (do NOT generate one here — getFileKey
|
|
127
|
+
// generates; alternates must be read-only).
|
|
128
|
+
try {
|
|
129
|
+
if (fs.existsSync(this.keyFilePath)) {
|
|
130
|
+
push(Buffer.from(fs.readFileSync(this.keyFilePath, 'utf-8').trim(), 'hex'), 'file');
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch { /* @silent-fallback-ok — unreadable alternate is simply absent */ }
|
|
134
|
+
if (out.length === 0)
|
|
135
|
+
push(this.getMasterKey(), this.forceFile ? 'file' : 'keychain');
|
|
136
|
+
return out;
|
|
137
|
+
}
|
|
64
138
|
/** Whether the master key is stored in the OS keychain (vs file fallback). */
|
|
65
139
|
get isKeychainBacked() {
|
|
66
140
|
if (this.forceFile)
|
|
67
141
|
return false;
|
|
68
142
|
try {
|
|
69
|
-
return this.
|
|
143
|
+
return (this.tryRead(perAgentKeychainAccount(this.stateDir)) !== null ||
|
|
144
|
+
this.tryRead(KEYCHAIN_ACCOUNT_LEGACY) !== null);
|
|
70
145
|
}
|
|
71
146
|
catch {
|
|
72
147
|
// @silent-fallback-ok — keychain unavailable, file fallback
|
|
73
148
|
return false;
|
|
74
149
|
}
|
|
75
150
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
return this.readMacKeychain();
|
|
151
|
+
tryRead(account) {
|
|
152
|
+
try {
|
|
153
|
+
return this.kc.read(KEYCHAIN_SERVICE, account);
|
|
80
154
|
}
|
|
81
|
-
|
|
82
|
-
return
|
|
155
|
+
catch {
|
|
156
|
+
return null; /* @silent-fallback-ok — keychain unavailable */
|
|
83
157
|
}
|
|
84
|
-
return null; // Windows or unsupported — fall through to file
|
|
85
158
|
}
|
|
86
|
-
|
|
159
|
+
// ── OS keychain backends (account-parameterized) ────────────────
|
|
160
|
+
readOsKeychain(service, account) {
|
|
87
161
|
if (process.platform === 'darwin') {
|
|
88
|
-
|
|
162
|
+
try {
|
|
163
|
+
const result = execFileSync('security', [
|
|
164
|
+
'find-generic-password',
|
|
165
|
+
'-s', service,
|
|
166
|
+
'-a', account,
|
|
167
|
+
'-w', // Print password only
|
|
168
|
+
], { encoding: 'utf-8', timeout: 5000, stdio: ['pipe', 'pipe', 'pipe'] }).trim();
|
|
169
|
+
return Buffer.from(result, 'base64');
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
// @silent-fallback-ok — platform keychain read
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
89
175
|
}
|
|
90
176
|
else if (process.platform === 'linux') {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
return Buffer.from(result, 'base64');
|
|
104
|
-
}
|
|
105
|
-
catch {
|
|
106
|
-
// @silent-fallback-ok — platform keychain read
|
|
107
|
-
return null;
|
|
177
|
+
try {
|
|
178
|
+
const result = execFileSync('secret-tool', [
|
|
179
|
+
'lookup',
|
|
180
|
+
'service', service,
|
|
181
|
+
'account', account,
|
|
182
|
+
], { encoding: 'utf-8', timeout: 5000, stdio: ['pipe', 'pipe', 'pipe'] }).trim();
|
|
183
|
+
return Buffer.from(result, 'base64');
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
// @silent-fallback-ok — linux keychain read
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
108
189
|
}
|
|
190
|
+
return null; // Windows or unsupported — fall through to file
|
|
109
191
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
// Delete existing entry first (ignore errors if it doesn't exist)
|
|
192
|
+
writeOsKeychain(service, account, key) {
|
|
193
|
+
if (process.platform === 'darwin') {
|
|
113
194
|
try {
|
|
195
|
+
// Delete existing entry first (ignore errors if it doesn't exist)
|
|
196
|
+
try {
|
|
197
|
+
execFileSync('security', [
|
|
198
|
+
'delete-generic-password',
|
|
199
|
+
'-s', service,
|
|
200
|
+
'-a', account,
|
|
201
|
+
], { stdio: 'pipe', timeout: 5000 });
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
// @silent-fallback-ok — entry may not exist
|
|
205
|
+
}
|
|
114
206
|
execFileSync('security', [
|
|
115
|
-
'
|
|
116
|
-
'-s',
|
|
117
|
-
'-a',
|
|
207
|
+
'add-generic-password',
|
|
208
|
+
'-s', service,
|
|
209
|
+
'-a', account,
|
|
210
|
+
'-w', key.toString('base64'),
|
|
118
211
|
], { stdio: 'pipe', timeout: 5000 });
|
|
212
|
+
return true;
|
|
119
213
|
}
|
|
120
|
-
catch {
|
|
121
|
-
|
|
214
|
+
catch (err) {
|
|
215
|
+
DegradationReporter.getInstance().report({
|
|
216
|
+
feature: 'SecretStore.writeMacOSKeychain',
|
|
217
|
+
primary: 'Persist master key to macOS keychain',
|
|
218
|
+
fallback: 'Key only in memory — lost on restart',
|
|
219
|
+
reason: `Why: ${err instanceof Error ? err.message : String(err)}`,
|
|
220
|
+
impact: 'Master key not persisted, may be lost',
|
|
221
|
+
});
|
|
222
|
+
return false;
|
|
122
223
|
}
|
|
123
|
-
execFileSync('security', [
|
|
124
|
-
'add-generic-password',
|
|
125
|
-
'-s', KEYCHAIN_SERVICE,
|
|
126
|
-
'-a', KEYCHAIN_ACCOUNT,
|
|
127
|
-
'-w', key.toString('base64'),
|
|
128
|
-
], { stdio: 'pipe', timeout: 5000 });
|
|
129
|
-
return true;
|
|
130
|
-
}
|
|
131
|
-
catch (err) {
|
|
132
|
-
DegradationReporter.getInstance().report({
|
|
133
|
-
feature: 'SecretStore.writeMacOSKeychain',
|
|
134
|
-
primary: 'Persist master key to macOS keychain',
|
|
135
|
-
fallback: 'Key only in memory — lost on restart',
|
|
136
|
-
reason: `Why: ${err instanceof Error ? err.message : String(err)}`,
|
|
137
|
-
impact: 'Master key not persisted, may be lost',
|
|
138
|
-
});
|
|
139
|
-
return false;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
readLinuxKeychain() {
|
|
143
|
-
try {
|
|
144
|
-
const result = execFileSync('secret-tool', [
|
|
145
|
-
'lookup',
|
|
146
|
-
'service', KEYCHAIN_SERVICE,
|
|
147
|
-
'account', KEYCHAIN_ACCOUNT,
|
|
148
|
-
], { encoding: 'utf-8', timeout: 5000, stdio: ['pipe', 'pipe', 'pipe'] }).trim();
|
|
149
|
-
return Buffer.from(result, 'base64');
|
|
150
224
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
reason: `Why: ${err instanceof Error ? err.message : String(err)}`,
|
|
176
|
-
impact: 'Master key not persisted, may be lost',
|
|
177
|
-
});
|
|
178
|
-
return false;
|
|
225
|
+
else if (process.platform === 'linux') {
|
|
226
|
+
try {
|
|
227
|
+
execFileSync('secret-tool', [
|
|
228
|
+
'store',
|
|
229
|
+
'--label', 'Instar Secret Store Master Key',
|
|
230
|
+
'service', service,
|
|
231
|
+
'account', account,
|
|
232
|
+
], {
|
|
233
|
+
input: key.toString('base64'),
|
|
234
|
+
timeout: 5000,
|
|
235
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
236
|
+
});
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
catch (err) {
|
|
240
|
+
DegradationReporter.getInstance().report({
|
|
241
|
+
feature: 'SecretStore.writeLinuxKeychain',
|
|
242
|
+
primary: 'Persist master key to Linux keychain',
|
|
243
|
+
fallback: 'Key only in memory — lost on restart',
|
|
244
|
+
reason: `Why: ${err instanceof Error ? err.message : String(err)}`,
|
|
245
|
+
impact: 'Master key not persisted, may be lost',
|
|
246
|
+
});
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
179
249
|
}
|
|
250
|
+
return false;
|
|
180
251
|
}
|
|
181
252
|
// ── File fallback ───────────────────────────────────────────────
|
|
182
253
|
getFileKey() {
|
|
@@ -186,9 +257,15 @@ export class MasterKeyManager {
|
|
|
186
257
|
}
|
|
187
258
|
// Generate new key
|
|
188
259
|
const key = crypto.randomBytes(MASTER_KEY_LENGTH);
|
|
189
|
-
// Try to store
|
|
190
|
-
|
|
191
|
-
|
|
260
|
+
// Try to store under the PER-AGENT keychain account first (never the
|
|
261
|
+
// legacy global slot — writing that slot is how the 2026-06-05 incident
|
|
262
|
+
// broke every other vault on the machine).
|
|
263
|
+
if (!this.forceFile) {
|
|
264
|
+
try {
|
|
265
|
+
if (this.kc.write(KEYCHAIN_SERVICE, perAgentKeychainAccount(this.stateDir), key))
|
|
266
|
+
return key;
|
|
267
|
+
}
|
|
268
|
+
catch { /* @silent-fallback-ok — fall through to file */ }
|
|
192
269
|
}
|
|
193
270
|
// Write to file with restrictive permissions
|
|
194
271
|
const dir = path.dirname(this.keyFilePath);
|
|
@@ -204,24 +281,80 @@ export class SecretStore {
|
|
|
204
281
|
stateDir;
|
|
205
282
|
keyManager;
|
|
206
283
|
encryptedPath;
|
|
284
|
+
/** Which key source decrypted the LAST successful read() — observability for
|
|
285
|
+
* the dual-key fallback ('keychain' | 'file'; null before any read). */
|
|
286
|
+
lastReadKeySource = null;
|
|
207
287
|
constructor(config) {
|
|
208
288
|
this.stateDir = config.stateDir;
|
|
209
|
-
this.keyManager = new MasterKeyManager(config.stateDir, config.forceFileKey);
|
|
289
|
+
this.keyManager = new MasterKeyManager(config.stateDir, config.forceFileKey, config.keychainOps);
|
|
210
290
|
this.encryptedPath = path.join(config.stateDir, 'secrets', 'config.secrets.enc');
|
|
211
291
|
}
|
|
212
|
-
/**
|
|
292
|
+
/**
|
|
293
|
+
* Read and decrypt secrets from the encrypted store. Returns empty object if
|
|
294
|
+
* no secrets exist.
|
|
295
|
+
*
|
|
296
|
+
* Vault-key-coherence (CMT-1038): tries every candidate key (primary first,
|
|
297
|
+
* then the OTHER source — keychain↔file) so a store written before the key
|
|
298
|
+
* sources diverged stays READABLE instead of looking "empty" to half the
|
|
299
|
+
* readers (the 2026-06-05 bifurcation incident). A v2 file's keyId header
|
|
300
|
+
* names the required key, so wrong-key is a precise error distinct from
|
|
301
|
+
* corruption. Success via a non-primary key emits a loud degradation report;
|
|
302
|
+
* the next write() converges the store back to the primary key.
|
|
303
|
+
*/
|
|
213
304
|
read() {
|
|
214
305
|
if (!fs.existsSync(this.encryptedPath)) {
|
|
215
306
|
return {};
|
|
216
307
|
}
|
|
217
308
|
const raw = fs.readFileSync(this.encryptedPath);
|
|
218
|
-
const
|
|
219
|
-
|
|
309
|
+
const candidates = this.keyManager.getCandidateKeys();
|
|
310
|
+
// ── v2 format: 'ISv2' | keyId(8) | iv | tag | ct — the keyId names the key ──
|
|
311
|
+
if (raw.length > STORE_MAGIC_V2.length + KEY_ID_LENGTH && raw.subarray(0, STORE_MAGIC_V2.length).equals(STORE_MAGIC_V2)) {
|
|
312
|
+
const wantId = raw.subarray(STORE_MAGIC_V2.length, STORE_MAGIC_V2.length + KEY_ID_LENGTH);
|
|
313
|
+
const body = raw.subarray(STORE_MAGIC_V2.length + KEY_ID_LENGTH);
|
|
314
|
+
const match = candidates.find((c) => keyIdOf(c.key).equals(wantId));
|
|
315
|
+
if (!match) {
|
|
316
|
+
throw new Error(`SecretStore: store is encrypted with key id ${wantId.toString('hex')} — ` +
|
|
317
|
+
`no resolvable key matches (have: ${candidates.map((c) => `${c.source}:${keyIdOf(c.key).toString('hex')}`).join(', ') || 'none'}). ` +
|
|
318
|
+
`The vault is NOT empty; the matching master key is missing.`);
|
|
319
|
+
}
|
|
320
|
+
const secrets = this.decryptAES(body, match.key); // auth failure here = real corruption (key matched)
|
|
321
|
+
this.noteReadKeySource(match.source, candidates[0]?.source);
|
|
322
|
+
return secrets;
|
|
323
|
+
}
|
|
324
|
+
// ── v1 (legacy, headerless): try candidates in order ──
|
|
325
|
+
let lastErr = null;
|
|
326
|
+
for (const c of candidates) {
|
|
327
|
+
try {
|
|
328
|
+
const secrets = this.decryptAES(raw, c.key);
|
|
329
|
+
this.noteReadKeySource(c.source, candidates[0]?.source);
|
|
330
|
+
return secrets;
|
|
331
|
+
}
|
|
332
|
+
catch (err) {
|
|
333
|
+
lastErr = err;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
throw new Error(`SecretStore: no resolvable key decrypts the store (tried ${candidates.length}: ` +
|
|
337
|
+
`${candidates.map((c) => `${c.source}:${keyIdOf(c.key).toString('hex')}`).join(', ') || 'none'}). ` +
|
|
338
|
+
`The vault is NOT empty; the matching master key is missing. Last error: ` +
|
|
339
|
+
`${lastErr instanceof Error ? lastErr.message : String(lastErr)}`);
|
|
340
|
+
}
|
|
341
|
+
/** Record the source that decrypted; loudly report a non-primary success. */
|
|
342
|
+
noteReadKeySource(used, primary) {
|
|
343
|
+
this.lastReadKeySource = used;
|
|
344
|
+
if (primary && used !== primary) {
|
|
345
|
+
DegradationReporter.getInstance().report({
|
|
346
|
+
feature: 'SecretStore.dualKeyRead',
|
|
347
|
+
primary: `Decrypt the vault with the primary (${primary}) master key`,
|
|
348
|
+
fallback: `Decrypted with the ${used} key instead`,
|
|
349
|
+
reason: 'Why: the keychain and file master keys have DIVERGED for this agent (the 2026-06-05 bifurcation class). The data is intact and readable.',
|
|
350
|
+
impact: 'The next write() re-encrypts with the primary key (v2 format), converging the sources. If divergence persists, inspect the per-agent keychain entry and .instar/machine/secrets-master.key.',
|
|
351
|
+
});
|
|
352
|
+
}
|
|
220
353
|
}
|
|
221
|
-
/** Encrypt and write secrets to the store. */
|
|
354
|
+
/** Encrypt and write secrets to the store (v2 format — keyId header). */
|
|
222
355
|
write(secrets) {
|
|
223
356
|
const masterKey = this.keyManager.getMasterKey();
|
|
224
|
-
const encrypted = this.encryptAES(secrets, masterKey);
|
|
357
|
+
const encrypted = Buffer.concat([STORE_MAGIC_V2, keyIdOf(masterKey), this.encryptAES(secrets, masterKey)]);
|
|
225
358
|
const dir = path.dirname(this.encryptedPath);
|
|
226
359
|
if (!fs.existsSync(dir)) {
|
|
227
360
|
fs.mkdirSync(dir, { recursive: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecretStore.js","sourceRoot":"","sources":["../../src/core/SecretStore.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SecretStore.js","sourceRoot":"","sources":["../../src/core/SecretStore.ts"],"names":[],"mappings":"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"}
|