@coderifts/agent-guard 17.2.0 → 17.3.0
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/cjs/cas-attestation.d.ts.map +1 -1
- package/dist/cjs/cas-attestation.js +98 -6
- package/dist/cjs/cas-attestation.js.map +1 -1
- package/dist/cjs/vendor/VENDOR.sha256 +4 -2
- package/dist/cjs/vendor/verified-execution-binding.js +316 -0
- package/dist/cjs/vendor/verify-grant.js +45 -3
- package/dist/esm/cas-attestation.d.ts.map +1 -1
- package/dist/esm/cas-attestation.js +98 -6
- package/dist/esm/cas-attestation.js.map +1 -1
- package/dist/esm/vendor/VENDOR.sha256 +4 -2
- package/dist/esm/vendor/verified-execution-binding.js +316 -0
- package/dist/esm/vendor/verify-grant.js +45 -3
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cas-attestation.d.ts","sourceRoot":"","sources":["../../src/cas-attestation.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cas-attestation.d.ts","sourceRoot":"","sources":["../../src/cas-attestation.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,6 +33,30 @@ const LIMITS = Object.freeze({
|
|
|
33
33
|
does_not_claim_host_cannot_bypass: true,
|
|
34
34
|
does_not_claim_governance_redecision: true,
|
|
35
35
|
});
|
|
36
|
+
/**
|
|
37
|
+
* THE CORE PREDICATE, quoted rather than recomputed (1459).
|
|
38
|
+
*
|
|
39
|
+
* MEASURED before this wiring: the guard reached the right answer with a formula of its own —
|
|
40
|
+
* `receipt_verified && committed && class === 'executor_attested' && strictCommitObservation(...)`.
|
|
41
|
+
* Correct, and bespoke. The auditor's point is that a predicate written twice is a predicate that
|
|
42
|
+
* drifts, and the Atomic bypass was exactly that: two formulas for one question, disagreeing.
|
|
43
|
+
*
|
|
44
|
+
* So the guard now shapes its inputs and QUOTES `verifiedExecutionBinding`. The named shortfall
|
|
45
|
+
* states (UNAUTHORIZED / COMMIT_UNPROVEN / ONE_RUN_UNPROVEN / …) surface here as a result, so an
|
|
46
|
+
* operator reads the same vocabulary the CLI, Prove and conformance print.
|
|
47
|
+
*
|
|
48
|
+
* Loaded lazily and behind try/catch: a packaging fault must surface as NOT authorized, never as a
|
|
49
|
+
* crash inside the guard, and never as a silent fallback to the old local formula.
|
|
50
|
+
*/
|
|
51
|
+
function coreBinding() {
|
|
52
|
+
try {
|
|
53
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires, global-require
|
|
54
|
+
return require('./vendor/verified-execution-binding.js');
|
|
55
|
+
}
|
|
56
|
+
catch (_) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
36
60
|
/**
|
|
37
61
|
* Authenticate an execution grant against the pinned ISSUER keyring, through the vendored
|
|
38
62
|
* canonical core (receipt-verifier verify-grant.js — cr.exec.v1 AND cr.exec.v2).
|
|
@@ -349,19 +373,85 @@ function buildCasAttestation(proof, outcome, opts = {}) {
|
|
|
349
373
|
const indeterminate = cas.status === 'indeterminate';
|
|
350
374
|
const cas_evidence = evaluateCasEvidence(outcome, opts);
|
|
351
375
|
let authorized_and_committed = receipt_verified && cas.status === 'committed';
|
|
376
|
+
let binding = null;
|
|
352
377
|
let authorized_and_host_reported_committed = false;
|
|
353
378
|
// ENFORCING_STRICT: the existing derived name now requires executor_attested + kernel
|
|
354
379
|
// cross-check. Non-strict keeps the 9.0.0 formula (receipt verified + clean commit).
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
380
|
+
// ── ONE PREDICATE FOR BOTH ENFORCING PROFILES ────────────────────────────────────────────
|
|
381
|
+
//
|
|
382
|
+
// The intersection is computed by the vendored core; this block only SHAPES the guard's inputs
|
|
383
|
+
// into the core's vocabulary. `required` names the two authorities an enforcing guard can
|
|
384
|
+
// actually establish from a tool outcome: it holds a grant and an attestation, and it does not
|
|
385
|
+
// hold a prove artifact or a provider readback — asking the core for `one_run_root` here would
|
|
386
|
+
// report a shortfall about evidence this surface never receives.
|
|
387
|
+
const enforcingProfile = opts.profile === 'ENFORCING_STRICT' || opts.profile === 'ENFORCING_ATOMIC';
|
|
388
|
+
if (enforcingProfile) {
|
|
389
|
+
const core = coreBinding();
|
|
390
|
+
const from = intendedFromOutcome(outcome);
|
|
391
|
+
const grantToken = (opts.grant && String(opts.grant)) || (from.grant && String(from.grant)) || '';
|
|
392
|
+
const attToken = extractExecutorAttestationToken(outcome);
|
|
393
|
+
if (!core) {
|
|
394
|
+
// FAIL-CLOSED, and named. Falling back to the local formula would recreate the second
|
|
395
|
+
// predicate this change exists to remove.
|
|
396
|
+
authorized_and_committed = false;
|
|
397
|
+
binding = { state: 'UNAUTHORIZED', shortfalls: ['the vendored core predicate could not be loaded'] };
|
|
398
|
+
}
|
|
399
|
+
else {
|
|
400
|
+
const keyring = opts.grant_keyring && Array.isArray(opts.grant_keyring.keys)
|
|
401
|
+
? new Map(opts.grant_keyring.keys
|
|
402
|
+
.filter((k) => k && typeof k.kid === 'string' && typeof k.public_key_pem === 'string')
|
|
403
|
+
.map((k) => [k.kid, {
|
|
404
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires, global-require
|
|
405
|
+
publicKey: require('node:crypto').createPublicKey(k.public_key_pem),
|
|
406
|
+
status: k.status || 'active',
|
|
407
|
+
retired_at: null,
|
|
408
|
+
compromised_at: null,
|
|
409
|
+
}]))
|
|
410
|
+
: null;
|
|
411
|
+
const r = core.verifiedExecutionBinding({
|
|
412
|
+
receipt: { verified: receipt_verified },
|
|
413
|
+
grant: { token: grantToken, keyring, expectedKid: null, ...(Number.isFinite(opts.now) ? { now: opts.now } : {}) },
|
|
414
|
+
attestation: {
|
|
415
|
+
token: attToken,
|
|
416
|
+
registry: opts.registry,
|
|
417
|
+
// The SDK's verifier, handed in rather than reimplemented — the core holds no
|
|
418
|
+
// attestation format knowledge of its own.
|
|
419
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires, global-require
|
|
420
|
+
verify: (t, o) => require('@coderifts/sdk').verifyExecutionAttestation(t, o),
|
|
421
|
+
},
|
|
422
|
+
committed: cas.status === 'committed',
|
|
423
|
+
required: ['issuer_grant', 'executor_attestation'],
|
|
424
|
+
});
|
|
425
|
+
binding = { state: r.state, shortfalls: r.shortfalls };
|
|
426
|
+
authorized_and_committed = r.authorized_and_committed === true;
|
|
427
|
+
}
|
|
359
428
|
}
|
|
360
429
|
if (opts.profile === 'ENFORCING_ATOMIC') {
|
|
361
|
-
|
|
430
|
+
// ── REPRODUCED THEN CLOSED (1447 / 1459) ────────────────────────────────────────────
|
|
431
|
+
//
|
|
432
|
+
// This branch used to read:
|
|
433
|
+
//
|
|
434
|
+
// authorized_and_committed = receipt_verified && committed && class === 'executor_attested'
|
|
435
|
+
//
|
|
436
|
+
// and never asked whether the GRANT was signed by anyone. Measured on the public 17.2.0, with
|
|
437
|
+
// a forged-signature grant and a REAL attestation from a trusted executor bound to that
|
|
438
|
+
// grant's jti and scope:
|
|
439
|
+
//
|
|
440
|
+
// ENFORCING_STRICT authorized_and_committed = false
|
|
441
|
+
// ENFORCING_ATOMIC authorized_and_committed = true
|
|
442
|
+
//
|
|
443
|
+
// Two profiles of one product, one set of bytes, opposite answers. The attestation was doing
|
|
444
|
+
// all the work, and an attestation only ever says "I committed the grant with these ids" — it
|
|
445
|
+
// cannot say the ids belonged to a grant anyone authorized.
|
|
446
|
+
//
|
|
447
|
+
// BOTH branches now QUOTE the same predicate rather than each computing a formula. Strict is
|
|
448
|
+
// unchanged in behaviour and Atomic is brought up to it, which is the direction a disagreement
|
|
449
|
+
// between two enforcing profiles has to be resolved in.
|
|
450
|
+
// The verdict itself now comes from the core above — both enforcing profiles quote it, which
|
|
451
|
+
// is what makes them incapable of disagreeing. This branch keeps only the ATOMIC-only
|
|
452
|
+
// OBSERVATION name, which is a different fact and was never part of the bypass.
|
|
362
453
|
const hostClaimed = cas_evidence.class === 'host_claimed';
|
|
363
454
|
authorized_and_host_reported_committed = receipt_verified && cas.status === 'committed' && hostClaimed;
|
|
364
|
-
authorized_and_committed = receipt_verified && cas.status === 'committed' && executorOk;
|
|
365
455
|
}
|
|
366
456
|
const attestation = {
|
|
367
457
|
attestation_spec: exports.CAS_ATTESTATION_SPEC,
|
|
@@ -382,6 +472,8 @@ function buildCasAttestation(proof, outcome, opts = {}) {
|
|
|
382
472
|
...(opts.profile === 'ENFORCING_ATOMIC'
|
|
383
473
|
? { authorized_and_host_reported_committed }
|
|
384
474
|
: {}),
|
|
475
|
+
// The core's NAMED state, carried so an operator reads why rather than only whether.
|
|
476
|
+
...(binding ? { authorization_state: binding.state } : {}),
|
|
385
477
|
}),
|
|
386
478
|
cas_evidence,
|
|
387
479
|
limits: LIMITS,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cas-attestation.js","sourceRoot":"","sources":["../../src/cas-attestation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cas-attestation.js","sourceRoot":"","sources":["../../src/cas-attestation.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,14 +23,16 @@
|
|
|
23
23
|
#
|
|
24
24
|
# verify.js 6048195c0bcf7e2594a2d78e83cfc082ea615790
|
|
25
25
|
# arity.js 724aa9ae8171f1acf629c3c6b4879dc056575f20
|
|
26
|
-
# verify-grant.js
|
|
26
|
+
# verify-grant.js a472bf9073781cba25d83c7d1406b1a7c4af0b94
|
|
27
27
|
# verify-prove-transcript.js 724aa9ae8171f1acf629c3c6b4879dc056575f20
|
|
28
|
+
# verified-execution-binding.js 1e41542296551139c41e2d4b4cff2e67bc42aa06
|
|
28
29
|
# verify-evidence.js 724aa9ae8171f1acf629c3c6b4879dc056575f20
|
|
29
30
|
# keys/coderifts-keys.json 724aa9ae8171f1acf629c3c6b4879dc056575f20
|
|
30
31
|
|
|
31
32
|
verify.js 363e52c72ec4b913e1f3edc8e2029848feaeacb1efa6c07960fe5e5f195c23b3
|
|
32
33
|
arity.js 721fcac58b960b5e2aa1af91edb6cfc87ebe828a6da73879967ef79a1ca474e8
|
|
33
|
-
verify-grant.js
|
|
34
|
+
verify-grant.js 127b53de3be77196862c10a8812221de0a5112cf1d3feae12d347a6021852df7
|
|
34
35
|
verify-prove-transcript.js 3bb17bd4f16d5ee3cf3fbb754b4df9aa570a615ca94ff2a97b751c4fabd3bd0d
|
|
35
36
|
verify-evidence.js 7ca498fad4b23e4ae8f28c42c30058bc3526a00d5cc6d6f36380335bf25d3288
|
|
37
|
+
verified-execution-binding.js e48ea29b9f8b0c5b1754187788cbaf78cdaf0b505848c05d1ae3ffebb30218f2
|
|
36
38
|
keys/coderifts-keys.json bfe0c898cda3c3a4c8141726d0adb4cdb7eb9762de6264e430eff6469b90422e
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* verifiedExecutionBinding — the ONE predicate that answers "authorized and committed".
|
|
5
|
+
*
|
|
6
|
+
* ── WHY ONE (1459) ──────────────────────────────────────────────────────────────────────────
|
|
7
|
+
*
|
|
8
|
+
* The same question was being answered in several places with different rules, and the answers
|
|
9
|
+
* disagreed. Measured on the public agent-guard 17.2.0, with a forged-signature grant and a REAL
|
|
10
|
+
* attestation from a trusted executor bound to that grant's jti and scope:
|
|
11
|
+
*
|
|
12
|
+
* ENFORCING_STRICT authorized_and_committed = false
|
|
13
|
+
* ENFORCING_ATOMIC authorized_and_committed = true
|
|
14
|
+
*
|
|
15
|
+
* Two profiles of one product, looking at one set of bytes, reaching opposite conclusions — because
|
|
16
|
+
* the Atomic formula was `receipt_verified && committed && class === 'executor_attested'` and never
|
|
17
|
+
* asked whether the GRANT was signed by anyone. A predicate that is recomputed is a predicate that
|
|
18
|
+
* drifts; this file exists so callers QUOTE the answer instead.
|
|
19
|
+
*
|
|
20
|
+
* ── FOUR AUTHORITIES, AND ONLY THEIR INTERSECTION ───────────────────────────────────────────
|
|
21
|
+
*
|
|
22
|
+
* Each is independently true or not, and each answers a different question. None of them implies
|
|
23
|
+
* another, which is exactly why the intersection — not any one of them — is the success condition:
|
|
24
|
+
*
|
|
25
|
+
* issuer_grant did CodeRifts authorize THIS change? (a signature under a pinned key)
|
|
26
|
+
* executor_attestation did the executor commit THAT grant? (a signature over the grant's ids)
|
|
27
|
+
* one_run_root are these bytes from ONE run? (cr.evidence.root.v1 digests)
|
|
28
|
+
* provider_witness did the provider record it? (a readback — UNSIGNED by nature)
|
|
29
|
+
*
|
|
30
|
+
* ── SHORTFALLS ARE NAMED, NOT FOLDED INTO `false` ───────────────────────────────────────────
|
|
31
|
+
*
|
|
32
|
+
* "Not authorized" and "authorized but the commit is unproven" are different facts with different
|
|
33
|
+
* remedies, and a boolean loses that. Every shortfall gets a state a human can act on, and the
|
|
34
|
+
* states are ORDERED by severity so the returned one is the most serious thing that is wrong.
|
|
35
|
+
*
|
|
36
|
+
* WHAT THIS DOES NOT DO. It reaches no network and holds no keys: every input is supplied by the
|
|
37
|
+
* caller, already-verified or verifiable, and the four authorities are recomputed here from those
|
|
38
|
+
* inputs rather than taken as claims. It also cannot see a lying executor — the root closes
|
|
39
|
+
* third-party splicing, not an executor misreporting its own run.
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
const crypto = require('node:crypto');
|
|
43
|
+
|
|
44
|
+
const { verifyExecutionGrant } = require('./verify-grant.js');
|
|
45
|
+
const { verifyEvidenceRootBinding } = require('./verify-evidence.js');
|
|
46
|
+
|
|
47
|
+
const BINDING_V = 'cr.verified-execution-binding.v1';
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Ordered most-severe first. The returned `state` is the FIRST unmet one, so a caller that renders
|
|
51
|
+
* a single line renders the thing that most needs fixing.
|
|
52
|
+
*/
|
|
53
|
+
const STATE = Object.freeze({
|
|
54
|
+
UNAUTHORIZED: 'UNAUTHORIZED',
|
|
55
|
+
COMMIT_UNPROVEN: 'COMMIT_UNPROVEN',
|
|
56
|
+
ONE_RUN_UNPROVEN: 'ONE_RUN_UNPROVEN',
|
|
57
|
+
RECORDED_UNWITNESSED: 'RECORDED_UNWITNESSED',
|
|
58
|
+
NOT_COMMITTED: 'NOT_COMMITTED',
|
|
59
|
+
AUTHORIZED_AND_COMMITTED: 'AUTHORIZED_AND_COMMITTED',
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
/** What each authority is allowed to be missing for, so a caller can choose its own strictness. */
|
|
63
|
+
const AUTHORITY = Object.freeze({
|
|
64
|
+
ISSUER_GRANT: 'issuer_grant',
|
|
65
|
+
EXECUTOR_ATTESTATION: 'executor_attestation',
|
|
66
|
+
ONE_RUN_ROOT: 'one_run_root',
|
|
67
|
+
PROVIDER_WITNESS: 'provider_witness',
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
const sha256pref = (v) =>
|
|
71
|
+
`sha256:${crypto.createHash('sha256').update(String(v), 'utf8').digest('hex')}`;
|
|
72
|
+
|
|
73
|
+
const b64json = (seg) => {
|
|
74
|
+
try { return JSON.parse(Buffer.from(seg, 'base64url').toString('utf8')); } catch (_) { return null; }
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
/** The four fields an attestation binds, read from its own signed preimage. */
|
|
78
|
+
function attestationClaims(token) {
|
|
79
|
+
if (typeof token !== 'string') return null;
|
|
80
|
+
const seg = token.split('|');
|
|
81
|
+
if (seg.length !== 4 || !seg[2]) return null;
|
|
82
|
+
const body = b64json(seg[2]);
|
|
83
|
+
return body && typeof body === 'object' ? body : null;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/** The grant's identity, in one vocabulary across v1 and v2. */
|
|
87
|
+
function grantClaims(token) {
|
|
88
|
+
if (typeof token !== 'string') return null;
|
|
89
|
+
const body = b64json(String(token).split('.')[0]);
|
|
90
|
+
if (!body || typeof body !== 'object') return null;
|
|
91
|
+
return {
|
|
92
|
+
v: body.v,
|
|
93
|
+
jti: body.grant_id || body.jti || null,
|
|
94
|
+
scope_hash: body.after_payload_hash || body.scope_hash || null,
|
|
95
|
+
receipt_hash: body.receipt_hash || body.receipt_digest || null,
|
|
96
|
+
operation: body.operation || null,
|
|
97
|
+
// The rest of what a grant SAYS, so the attestation can be checked against all of it rather
|
|
98
|
+
// than against the two fields that happened to be compared first.
|
|
99
|
+
target: body.target_uri || body.target_id || null,
|
|
100
|
+
tenant_id: body.tenant_id || null,
|
|
101
|
+
executor_id: body.executor_id || null,
|
|
102
|
+
adapter_id: body.adapter_id || null,
|
|
103
|
+
audience: body.audience_hash || body.audience || null,
|
|
104
|
+
policy_hash: body.policy_hash || null,
|
|
105
|
+
state_token: body.expected_state_token || body.state_nonce || null,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* @param {object} o
|
|
111
|
+
* @param {{verified: boolean, token?: string}} o.receipt
|
|
112
|
+
* @param {{token: string, publicKey?, keyring?, intended?: object, now?: number}} o.grant
|
|
113
|
+
* THE EXACT BYTES THE ISSUER SIGNED. Not a grant read back out of a tool result: a caller
|
|
114
|
+
* that lets the executed tool hand back its own authorization has already lost.
|
|
115
|
+
* @param {{token: string, registry?: object, verify?: Function}} [o.attestation]
|
|
116
|
+
* @param {{artifact: object, executorKey}} [o.evidenceRoot]
|
|
117
|
+
* @param {{signed: boolean}} [o.providerReadback]
|
|
118
|
+
* @param {boolean} o.committed
|
|
119
|
+
* @param {string[]} [o.required] authorities this caller demands; default: grant + attestation.
|
|
120
|
+
*/
|
|
121
|
+
function verifiedExecutionBinding(o = {}) {
|
|
122
|
+
const required = new Set(Array.isArray(o.required) && o.required.length
|
|
123
|
+
? o.required
|
|
124
|
+
: [AUTHORITY.ISSUER_GRANT, AUTHORITY.EXECUTOR_ATTESTATION]);
|
|
125
|
+
const shortfalls = [];
|
|
126
|
+
const authorities = {};
|
|
127
|
+
const note = (name, ok, detail) => {
|
|
128
|
+
authorities[name] = { ok, required: required.has(name), detail };
|
|
129
|
+
if (!ok && required.has(name)) shortfalls.push(`${name}: ${detail}`);
|
|
130
|
+
return ok;
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
// ── 1. THE ISSUER GRANT ────────────────────────────────────────────────────────────────
|
|
134
|
+
const g = o.grant || {};
|
|
135
|
+
let grantOk = false;
|
|
136
|
+
let gClaims = null;
|
|
137
|
+
if (typeof g.token !== 'string' || g.token.length === 0) {
|
|
138
|
+
note(AUTHORITY.ISSUER_GRANT, false, 'no execution grant was supplied');
|
|
139
|
+
} else if (!g.publicKey && !g.keyring) {
|
|
140
|
+
// FAIL-CLOSED, and named as its own thing: "we had no key" is not "the signature was bad".
|
|
141
|
+
note(AUTHORITY.ISSUER_GRANT, false,
|
|
142
|
+
'no pinned issuer keyring was supplied, so the grant could not be authenticated');
|
|
143
|
+
} else {
|
|
144
|
+
const r = verifyExecutionGrant(g.token, {
|
|
145
|
+
ctx: { publicKey: g.publicKey, keyring: g.keyring, expectedKid: g.expectedKid ?? null },
|
|
146
|
+
...(g.intended ? { intended: g.intended } : {}),
|
|
147
|
+
...(Number.isFinite(g.now) ? { now: g.now } : {}),
|
|
148
|
+
});
|
|
149
|
+
gClaims = grantClaims(g.token);
|
|
150
|
+
grantOk = note(AUTHORITY.ISSUER_GRANT, r.valid === true,
|
|
151
|
+
`${r.status}${r.reason ? `/${r.reason}` : ''}`);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// ── 2. THE EXECUTOR ATTESTATION ────────────────────────────────────────────────────────
|
|
155
|
+
const a = o.attestation || {};
|
|
156
|
+
let attOk = false;
|
|
157
|
+
if (typeof a.token !== 'string' || a.token.length === 0) {
|
|
158
|
+
note(AUTHORITY.EXECUTOR_ATTESTATION, false, 'no executor attestation was supplied');
|
|
159
|
+
} else if (typeof a.verify !== 'function') {
|
|
160
|
+
note(AUTHORITY.EXECUTOR_ATTESTATION, false,
|
|
161
|
+
'no attestation verifier was supplied, so the commit could not be checked');
|
|
162
|
+
} else {
|
|
163
|
+
const r = a.verify(a.token, { registry: a.registry });
|
|
164
|
+
const sigOk = r && r.valid === true;
|
|
165
|
+
// BOUND TO THE VERIFIED GRANT'S OWN IDS — not to ids the caller passed alongside. This is the
|
|
166
|
+
// join that makes the two signatures one statement instead of two unrelated true things.
|
|
167
|
+
const c = attestationClaims(a.token);
|
|
168
|
+
// ── THE ATTESTATION MUST BIND THE SAME EXECUTION, NOT MERELY THE SAME NAMES (1464) ────
|
|
169
|
+
//
|
|
170
|
+
// REPRODUCED before this was written. A correctly-signed grant bound to receipt R1, and a
|
|
171
|
+
// correctly-signed attestation from a trusted executor bound to receipt R2, sharing a
|
|
172
|
+
// grant_jti and a scope_hash — R1 != R2 — read AUTHORIZED_AND_COMMITTED. Both signatures are
|
|
173
|
+
// real; the two documents describe DIFFERENT executions and the join could not tell.
|
|
174
|
+
//
|
|
175
|
+
// `jti` and `scope_hash` are the two fields an attacker controls most cheaply: they are copied
|
|
176
|
+
// FROM the grant into the attestation by whoever assembles the pair. Comparing only those is
|
|
177
|
+
// comparing a value with its own copy. What binds is the receipt each side was issued against,
|
|
178
|
+
// and — the strongest available — the sha256 of the exact grant token bytes.
|
|
179
|
+
const attReceipt = c ? String(c.receipt_digest || '') : '';
|
|
180
|
+
const grantReceipt = gClaims ? String(gClaims.receipt_hash || '') : '';
|
|
181
|
+
const mismatch = (() => {
|
|
182
|
+
if (!sigOk) return `attestation ${r ? r.status : 'unverifiable'}`;
|
|
183
|
+
if (!gClaims) return 'there is no verified grant for the attestation to bind';
|
|
184
|
+
if (String(c.grant_jti || '') !== String(gClaims.jti || '')) {
|
|
185
|
+
return 'the attestation binds a different grant id than the verified grant';
|
|
186
|
+
}
|
|
187
|
+
if (String(c.scope_hash || '') !== String(gClaims.scope_hash || '')) {
|
|
188
|
+
return 'the attestation binds a different scope than the verified grant';
|
|
189
|
+
}
|
|
190
|
+
// THE CROSS-RECEIPT CHECK. Empty on either side is a mismatch: an attestation that names no
|
|
191
|
+
// receipt cannot be shown to be about this authorization, and "unstated" must not read as
|
|
192
|
+
// "the same".
|
|
193
|
+
if (!attReceipt || !grantReceipt || attReceipt !== grantReceipt) {
|
|
194
|
+
return `the grant was issued against receipt ${grantReceipt || '(none)'} and the `
|
|
195
|
+
+ `attestation commits receipt ${attReceipt || '(none)'} — two different executions`;
|
|
196
|
+
}
|
|
197
|
+
// ── WHAT cr.exec.attest.v1 CAN AND CANNOT BE ASKED ──────────────────────────────
|
|
198
|
+
//
|
|
199
|
+
// MEASURED, and it bounds this check rather than the check bounding the format: the
|
|
200
|
+
// attestation body is a CLOSED set — executor_kid, grant_jti, receipt_digest, scope_hash,
|
|
201
|
+
// committed_at, state_nonce, result_digest, meta. Any other key is refused
|
|
202
|
+
// ATTEST_MALFORMED / unknown_field by its own verifier.
|
|
203
|
+
//
|
|
204
|
+
// So target, operation, tenant, executor, adapter, audience and policy CANNOT be
|
|
205
|
+
// cross-checked here: the attestation never states them, and a comparison against a field
|
|
206
|
+
// that cannot exist is not a check — it is a line that always passes. They are named in
|
|
207
|
+
// `does_not_prove` instead, which is the honest place for a binding the format cannot carry.
|
|
208
|
+
//
|
|
209
|
+
// The same is true of the exact grant-token digest: there is no field for it. Binding the
|
|
210
|
+
// grant BYTES rather than its claims would be the tightest join available and it needs a
|
|
211
|
+
// format change (a `grant_token_digest` slot in cr.exec.attest.v2), not a check here.
|
|
212
|
+
//
|
|
213
|
+
// What the format DOES let us bind is the state nonce, and it is bound below.
|
|
214
|
+
if (gClaims.state_token != null && c.state_nonce != null
|
|
215
|
+
&& String(gClaims.state_token) !== String(c.state_nonce)) {
|
|
216
|
+
return 'the grant and the attestation disagree about the state nonce';
|
|
217
|
+
}
|
|
218
|
+
return null;
|
|
219
|
+
})();
|
|
220
|
+
attOk = note(AUTHORITY.EXECUTOR_ATTESTATION, mismatch === null, mismatch || 'bound');
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// ── 3. ONE RUN ─────────────────────────────────────────────────────────────────────────
|
|
224
|
+
const er = o.evidenceRoot || null;
|
|
225
|
+
if (!er || !er.artifact) {
|
|
226
|
+
note(AUTHORITY.ONE_RUN_ROOT, false,
|
|
227
|
+
'no cr.evidence.root.v1 was supplied, so these bytes are not shown to be one run');
|
|
228
|
+
} else {
|
|
229
|
+
const r = verifyEvidenceRootBinding(er.artifact, { executorKey: er.executorKey, sidecars: er.sidecars });
|
|
230
|
+
note(AUTHORITY.ONE_RUN_ROOT, r.ok === true, r.ok ? 'bound' : (r.failures[0] || 'unbound'));
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// ── 4. THE PROVIDER WITNESS ────────────────────────────────────────────────────────────
|
|
234
|
+
// A readback is an UNSIGNED document by nature. It is carried, not verified, and this authority
|
|
235
|
+
// is false unless a caller states it was witnessed some stronger way — never true by default.
|
|
236
|
+
// ── A CALLER BOOLEAN IS NOT EVIDENCE (1465) ────────────────────────────────────────────
|
|
237
|
+
//
|
|
238
|
+
// REPRODUCED before this was written:
|
|
239
|
+
//
|
|
240
|
+
// required: ['provider_witness'], receipt: {verified: true},
|
|
241
|
+
// providerReadback: {signed: true}, committed: true, NO grant, NO attestation, NO root
|
|
242
|
+
// → AUTHORIZED_AND_COMMITTED, shortfalls: []
|
|
243
|
+
//
|
|
244
|
+
// `signed: true` was a bare boolean the caller wrote, and this function aggregated it into a
|
|
245
|
+
// global success. Nothing was verified; a field named `signed` was believed because it was set.
|
|
246
|
+
//
|
|
247
|
+
// A witness now requires a VERIFIED witness envelope: bytes plus a verifier plus a trust anchor.
|
|
248
|
+
// No such format exists yet (phase D measured that the readback is unsigned by nature), so this
|
|
249
|
+
// authority cannot currently be satisfied at all — and saying that plainly is the honest answer.
|
|
250
|
+
// Asking for it yields RECORDED_UNWITNESSED, which is exactly what it means.
|
|
251
|
+
//
|
|
252
|
+
// NOT a breaking change for the five consumers: none of them requires `provider_witness` today
|
|
253
|
+
// (guard and contract-gate ask for issuer_grant + executor_attestation; prove and conformance for
|
|
254
|
+
// issuer_grant + one_run_root). It removes a way to LIE, not a way anyone works.
|
|
255
|
+
const pw = o.providerReadback || null;
|
|
256
|
+
const witnessVerified = !!(pw && pw.verified === true && pw.envelope && pw.verifier);
|
|
257
|
+
note(AUTHORITY.PROVIDER_WITNESS, witnessVerified,
|
|
258
|
+
pw
|
|
259
|
+
? (pw.signed === true && !witnessVerified
|
|
260
|
+
? 'the caller asserted `signed: true` and supplied no verifiable witness envelope — a '
|
|
261
|
+
+ 'boolean is not evidence, and no signed-witness format exists yet'
|
|
262
|
+
: 'the provider readback is an unsigned document (carried, not verified)')
|
|
263
|
+
: 'no provider readback was supplied');
|
|
264
|
+
|
|
265
|
+
// ── THE INTERSECTION ───────────────────────────────────────────────────────────────────
|
|
266
|
+
const committed = o.committed === true;
|
|
267
|
+
// THE RECEIPT, and what this function can honestly say about it.
|
|
268
|
+
//
|
|
269
|
+
// `verified` is the CALLER's determination: this core is not given the receipt token or a
|
|
270
|
+
// keyring, so it cannot re-establish it. That is recorded rather than hidden — a reader of the
|
|
271
|
+
// result can see whether the receipt was verified HERE or asserted by whoever called.
|
|
272
|
+
//
|
|
273
|
+
// Left as-is deliberately: making a bare boolean insufficient would change the input shape of
|
|
274
|
+
// all five consumers at once, and that belongs with the closed-profile work (1465), not
|
|
275
|
+
// half-done in a round that would leave them broken. The gap is named, not narrowed in silence.
|
|
276
|
+
const receiptOk = !!(o.receipt && o.receipt.verified === true);
|
|
277
|
+
const receiptAsserted = receiptOk && !(o.receipt.token && (o.receipt.keyring || o.receipt.publicKey));
|
|
278
|
+
if (!receiptOk) shortfalls.unshift('receipt: the decision receipt did not verify');
|
|
279
|
+
|
|
280
|
+
let state = STATE.AUTHORIZED_AND_COMMITTED;
|
|
281
|
+
if (!receiptOk || (required.has(AUTHORITY.ISSUER_GRANT) && !grantOk)) state = STATE.UNAUTHORIZED;
|
|
282
|
+
else if (required.has(AUTHORITY.EXECUTOR_ATTESTATION) && !attOk) state = STATE.COMMIT_UNPROVEN;
|
|
283
|
+
else if (required.has(AUTHORITY.ONE_RUN_ROOT) && !authorities[AUTHORITY.ONE_RUN_ROOT].ok) {
|
|
284
|
+
state = STATE.ONE_RUN_UNPROVEN;
|
|
285
|
+
} else if (required.has(AUTHORITY.PROVIDER_WITNESS) && !authorities[AUTHORITY.PROVIDER_WITNESS].ok) {
|
|
286
|
+
state = STATE.RECORDED_UNWITNESSED;
|
|
287
|
+
} else if (!committed) state = STATE.NOT_COMMITTED;
|
|
288
|
+
|
|
289
|
+
return {
|
|
290
|
+
v: BINDING_V,
|
|
291
|
+
authorized_and_committed: state === STATE.AUTHORIZED_AND_COMMITTED,
|
|
292
|
+
state,
|
|
293
|
+
authorities,
|
|
294
|
+
shortfalls,
|
|
295
|
+
/** True when `receipt.verified` was taken on the caller's word rather than established here. */
|
|
296
|
+
receipt_caller_asserted: receiptAsserted,
|
|
297
|
+
// Said out loud so a caller cannot read success as more than it is.
|
|
298
|
+
does_not_prove: [
|
|
299
|
+
'that the executor told the truth about its own run — the evidence root closes third-party '
|
|
300
|
+
+ 'splicing, not an executor misreporting itself',
|
|
301
|
+
'that a provider merged anything; `provider_witness` is an unsigned readback unless a caller '
|
|
302
|
+
+ 'states otherwise',
|
|
303
|
+
'that the grant and the attestation agree about target, operation, tenant, executor, adapter, '
|
|
304
|
+
+ 'audience or policy — cr.exec.attest.v1 is a closed field set that states none of them, so '
|
|
305
|
+
+ 'those are UNCHECKED here rather than checked and equal (1464)',
|
|
306
|
+
'that the attestation commits the exact grant BYTES — the format carries no grant-token '
|
|
307
|
+
+ 'digest, so the join is over the grant id, scope, receipt and state nonce',
|
|
308
|
+
...(receiptAsserted
|
|
309
|
+
? ['that the decision receipt verifies — `receipt.verified` was asserted by the caller and '
|
|
310
|
+
+ 'not established here; this core is given no receipt token or keyring to check it with']
|
|
311
|
+
: []),
|
|
312
|
+
],
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
module.exports = { verifiedExecutionBinding, STATE, AUTHORITY, BINDING_V, grantClaims, attestationClaims };
|
|
@@ -70,8 +70,39 @@ function scalar(v) {
|
|
|
70
70
|
return v == null ? '' : String(v);
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
+
/**
|
|
74
|
+
* cr.exec.v1 OPTIONAL signed fields — the ATOMIC profile's, and a DELIBERATE widening (1470).
|
|
75
|
+
*
|
|
76
|
+
* ── MEASURED BEFORE OPENING THE SET ─────────────────────────────────────────────────────────
|
|
77
|
+
*
|
|
78
|
+
* This verifier's allowed set was `['v', ...SIGNED_FIELDS]`, so a v1 grant carrying `state_nonce`
|
|
79
|
+
* read MALFORMED / unknown_field. That grant is not malformed: it is what the demo executor issues
|
|
80
|
+
* for the ATOMIC profile, and capability-demo's middleware has always signed and accepted it
|
|
81
|
+
* (OPTIONAL_SIGNED_FIELDS = ['state_nonce', 'deployment_id']). Fail-CLOSED, and wrong — this core
|
|
82
|
+
* is vendored into five consumers, so every one of them refused a valid ATOMIC grant.
|
|
83
|
+
*
|
|
84
|
+
* ── WHY WIDENING IS SAFE HERE, AND WHY IT IS STILL A DECISION ───────────────────────────────
|
|
85
|
+
*
|
|
86
|
+
* These fields are SIGNED: appended to the preimage, so a forger cannot add one without breaking
|
|
87
|
+
* the signature. The closed set never protected against injection; it protects against SEMANTIC
|
|
88
|
+
* DRIFT — a future field that RESTRICTS use must not be silently ignored by an older verifier that
|
|
89
|
+
* then says GRANT_CURRENT. `state_nonce` and `deployment_id` do not restrict: they NARROW, and a
|
|
90
|
+
* verifier that ignores them is not more permissive than one that does not know them.
|
|
91
|
+
*
|
|
92
|
+
* So the set is widened BY NAME, not opened. An actually-unknown field is still unknown_field, and
|
|
93
|
+
* test/v1-atomic-optional-fields.test.js records both halves so the next change is a decision
|
|
94
|
+
* rather than a rediscovery.
|
|
95
|
+
*
|
|
96
|
+
* ── APPENDED ONLY WHEN NON-EMPTY ────────────────────────────────────────────────────────────
|
|
97
|
+
*
|
|
98
|
+
* Byte-identical to capability-demo/packages/middleware/src/verify-grant.js. A BEARER grant's
|
|
99
|
+
* signing input must stay exactly what it was before ATOMIC existed, or every pre-ATOMIC issuance
|
|
100
|
+
* stops verifying — which is why presence, not declaration, decides the slot.
|
|
101
|
+
*/
|
|
102
|
+
const V1_OPTIONAL_SIGNED_FIELDS = Object.freeze(['state_nonce', 'deployment_id']);
|
|
103
|
+
|
|
73
104
|
function reconstructSignedInput(payload) {
|
|
74
|
-
|
|
105
|
+
const parts = [
|
|
75
106
|
SIGNING_PREFIX,
|
|
76
107
|
scalar(payload.kid),
|
|
77
108
|
scalar(payload.receipt_digest),
|
|
@@ -82,7 +113,11 @@ function reconstructSignedInput(payload) {
|
|
|
82
113
|
scalar(payload.jti),
|
|
83
114
|
scalar(payload.iat),
|
|
84
115
|
scalar(payload.exp),
|
|
85
|
-
]
|
|
116
|
+
];
|
|
117
|
+
for (const k of V1_OPTIONAL_SIGNED_FIELDS) {
|
|
118
|
+
if (payload[k] != null && String(payload[k]).length > 0) parts.push(String(payload[k]));
|
|
119
|
+
}
|
|
120
|
+
return parts.join('|');
|
|
86
121
|
}
|
|
87
122
|
|
|
88
123
|
function sha256pref(s) {
|
|
@@ -262,13 +297,19 @@ function verifyExecutionGrantInner(token, ctx, opts = {}) {
|
|
|
262
297
|
return { valid: false, status: 'MALFORMED', reason: 'missing_field', payload };
|
|
263
298
|
}
|
|
264
299
|
}
|
|
265
|
-
const allowed = new Set(['v', ...SIGNED_FIELDS]);
|
|
300
|
+
const allowed = new Set(['v', ...SIGNED_FIELDS, ...V1_OPTIONAL_SIGNED_FIELDS]);
|
|
266
301
|
for (const k of Object.keys(payload)) {
|
|
267
302
|
if (!allowed.has(k)) {
|
|
268
303
|
return { valid: false, status: 'MALFORMED', reason: 'unknown_field', payload };
|
|
269
304
|
}
|
|
270
305
|
}
|
|
271
306
|
|
|
307
|
+
for (const k of V1_OPTIONAL_SIGNED_FIELDS) {
|
|
308
|
+
if (payload[k] != null && typeof payload[k] !== 'string') {
|
|
309
|
+
return { valid: false, status: 'MALFORMED', reason: 'missing_field', payload };
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
272
313
|
// 3. delimiter guard
|
|
273
314
|
for (const k of SIGNED_FIELDS) {
|
|
274
315
|
if (payload[k].includes('|')) {
|
|
@@ -513,6 +554,7 @@ module.exports = {
|
|
|
513
554
|
SIGNING_PREFIX,
|
|
514
555
|
SIGNING_PREFIX_V2,
|
|
515
556
|
SIGNED_FIELDS,
|
|
557
|
+
V1_OPTIONAL_SIGNED_FIELDS,
|
|
516
558
|
CLOCK_SKEW_LEEWAY_MS,
|
|
517
559
|
isIssuedInFuture,
|
|
518
560
|
};
|