secretvm-verify 0.8.3 → 0.9.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/README.md +6 -4
- package/dist/agent.d.ts +2 -2
- package/dist/agent.js +4 -4
- package/dist/agent.js.map +1 -1
- package/dist/amd.d.ts +1 -1
- package/dist/amd.js +356 -26
- package/dist/amd.js.map +1 -1
- package/dist/cli.js +21 -15
- package/dist/cli.js.map +1 -1
- package/dist/cpu.d.ts +4 -1
- package/dist/cpu.js +5 -2
- package/dist/cpu.js.map +1 -1
- package/dist/tdx.d.ts +7 -5
- package/dist/tdx.js +35 -114
- package/dist/tdx.js.map +1 -1
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -1
- package/dist/vm.d.ts +1 -1
- package/dist/vm.js +2 -2
- package/dist/vm.js.map +1 -1
- package/package.json +2 -2
package/dist/amd.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import crypto from "node:crypto";
|
|
2
|
-
import { fromBER, Integer, Sequence, UTCTime } from "asn1js";
|
|
3
|
-
import {
|
|
2
|
+
import { fromBER, Integer, Sequence, OctetString, ObjectIdentifier, UTCTime } from "asn1js";
|
|
3
|
+
import { utils as qvlUtils } from "@phala/dcap-qvl";
|
|
4
4
|
import { isVmUrl, fetchCpuQuote } from "./url.js";
|
|
5
5
|
import { makeResult } from "./types.js";
|
|
6
6
|
import * as kdsCache from "./kdsCache.js";
|
|
7
|
+
/** Canonical hex form of an X.509 serial: uppercase, no leading zeros. */
|
|
8
|
+
function normalizeSerialHex(input) {
|
|
9
|
+
const hex = input.replace(/[^a-fA-F0-9]/g, "").toUpperCase();
|
|
10
|
+
return hex.replace(/^0+(?=[0-9A-F])/g, "");
|
|
11
|
+
}
|
|
7
12
|
const AMD_KDS_BASE = "https://kdsintf.amd.com";
|
|
8
13
|
/**
|
|
9
14
|
* Parse the `nextUpdate` field from a DER-encoded X.509 CRL.
|
|
@@ -67,6 +72,15 @@ function parseTcb(buf) {
|
|
|
67
72
|
microcode: buf[7],
|
|
68
73
|
};
|
|
69
74
|
}
|
|
75
|
+
function tcbGte(a, b) {
|
|
76
|
+
return (a.bootLoader >= b.bootLoader &&
|
|
77
|
+
a.tee >= b.tee &&
|
|
78
|
+
a.snp >= b.snp &&
|
|
79
|
+
a.microcode >= b.microcode);
|
|
80
|
+
}
|
|
81
|
+
function isTcbOrdered(current, committed, launch) {
|
|
82
|
+
return tcbGte(current, committed) && tcbGte(committed, launch);
|
|
83
|
+
}
|
|
70
84
|
/** Convert raw little-endian R, S buffers to DER-encoded ECDSA signature. */
|
|
71
85
|
function ecdsaLeRsToDer(rLE, sLE) {
|
|
72
86
|
// Reverse to big-endian
|
|
@@ -155,7 +169,16 @@ function vcekCacheKey(product, chipId, tcb) {
|
|
|
155
169
|
`_bl${tcb.bootLoader}_tee${tcb.tee}` +
|
|
156
170
|
`_snp${tcb.snp}_uc${tcb.microcode}`);
|
|
157
171
|
}
|
|
158
|
-
|
|
172
|
+
/**
|
|
173
|
+
* Stale cache fallback. In strict mode this returns null so the caller
|
|
174
|
+
* fails closed; otherwise returns the stale entry if one exists.
|
|
175
|
+
*/
|
|
176
|
+
function staleFallback(kind, key, strict) {
|
|
177
|
+
if (strict)
|
|
178
|
+
return null;
|
|
179
|
+
return kdsCache.getStale(kind, key);
|
|
180
|
+
}
|
|
181
|
+
async function fetchVcek(product, chipId, reportedTcb, reloadAmdKds = false, strict = false) {
|
|
159
182
|
const candidates = product ? [product] : ["Genoa", "Milan", "Turin"];
|
|
160
183
|
for (const name of candidates) {
|
|
161
184
|
const cacheKey = vcekCacheKey(name, chipId, reportedTcb);
|
|
@@ -171,8 +194,9 @@ async function fetchVcek(product, chipId, reportedTcb, reloadAmdKds = false) {
|
|
|
171
194
|
resp = await fetch(url);
|
|
172
195
|
}
|
|
173
196
|
catch (e) {
|
|
174
|
-
// Network failure: fall back to a stale cached entry if we have one
|
|
175
|
-
|
|
197
|
+
// Network failure: fall back to a stale cached entry if we have one
|
|
198
|
+
// (unless strict mode, in which case fail closed).
|
|
199
|
+
const stale = staleFallback("vcek", cacheKey, strict);
|
|
176
200
|
if (stale)
|
|
177
201
|
return { der: stale, product: name };
|
|
178
202
|
throw e;
|
|
@@ -184,13 +208,13 @@ async function fetchVcek(product, chipId, reportedTcb, reloadAmdKds = false) {
|
|
|
184
208
|
}
|
|
185
209
|
if (resp.status === 429) {
|
|
186
210
|
// Last-ditch fallback: serve a stale cached entry rather than fail.
|
|
187
|
-
const stale =
|
|
211
|
+
const stale = staleFallback("vcek", cacheKey, strict);
|
|
188
212
|
if (stale)
|
|
189
213
|
return { der: stale, product: name };
|
|
190
214
|
throw new Error("AMD KDS rate-limited (429). Retry later or specify product.");
|
|
191
215
|
}
|
|
192
216
|
if (product) {
|
|
193
|
-
const stale =
|
|
217
|
+
const stale = staleFallback("vcek", cacheKey, strict);
|
|
194
218
|
if (stale)
|
|
195
219
|
return { der: stale, product: name };
|
|
196
220
|
throw new Error(`AMD KDS returned ${resp.status}`);
|
|
@@ -198,7 +222,7 @@ async function fetchVcek(product, chipId, reportedTcb, reloadAmdKds = false) {
|
|
|
198
222
|
}
|
|
199
223
|
throw new Error("Could not fetch VCEK for any known product (Genoa/Milan/Turin)");
|
|
200
224
|
}
|
|
201
|
-
async function fetchChainPem(product, reloadAmdKds = false) {
|
|
225
|
+
async function fetchChainPem(product, reloadAmdKds = false, strict = false) {
|
|
202
226
|
if (!reloadAmdKds) {
|
|
203
227
|
const cached = kdsCache.get("cert_chain", product);
|
|
204
228
|
if (cached)
|
|
@@ -210,13 +234,13 @@ async function fetchChainPem(product, reloadAmdKds = false) {
|
|
|
210
234
|
resp = await fetch(url);
|
|
211
235
|
}
|
|
212
236
|
catch (e) {
|
|
213
|
-
const stale =
|
|
237
|
+
const stale = staleFallback("cert_chain", product, strict);
|
|
214
238
|
if (stale)
|
|
215
239
|
return stale.toString("utf8");
|
|
216
240
|
throw e;
|
|
217
241
|
}
|
|
218
242
|
if (!resp.ok) {
|
|
219
|
-
const stale =
|
|
243
|
+
const stale = staleFallback("cert_chain", product, strict);
|
|
220
244
|
if (stale)
|
|
221
245
|
return stale.toString("utf8");
|
|
222
246
|
throw new Error(`AMD KDS cert_chain returned ${resp.status}`);
|
|
@@ -232,9 +256,10 @@ async function fetchChainPem(product, reloadAmdKds = false) {
|
|
|
232
256
|
* naturally aligns with AMD's published refresh schedule. If the CRL has no
|
|
233
257
|
* `nextUpdate` (rare) or parsing fails, we fall back to a 7-day TTL.
|
|
234
258
|
* On network failure we fall back to a stale cached entry rather than
|
|
235
|
-
* failing every SEV verification while KDS is down
|
|
259
|
+
* failing every SEV verification while KDS is down (unless strict=true,
|
|
260
|
+
* in which case the caller wants to fail closed instead).
|
|
236
261
|
*/
|
|
237
|
-
async function fetchCrl(product, reloadAmdKds = false) {
|
|
262
|
+
async function fetchCrl(product, reloadAmdKds = false, strict = false) {
|
|
238
263
|
if (!reloadAmdKds) {
|
|
239
264
|
const cached = kdsCache.get("crl", product);
|
|
240
265
|
if (cached)
|
|
@@ -246,13 +271,13 @@ async function fetchCrl(product, reloadAmdKds = false) {
|
|
|
246
271
|
resp = await fetch(url);
|
|
247
272
|
}
|
|
248
273
|
catch (e) {
|
|
249
|
-
const stale =
|
|
274
|
+
const stale = staleFallback("crl", product, strict);
|
|
250
275
|
if (stale)
|
|
251
276
|
return stale;
|
|
252
277
|
throw e;
|
|
253
278
|
}
|
|
254
279
|
if (!resp.ok) {
|
|
255
|
-
const stale =
|
|
280
|
+
const stale = staleFallback("crl", product, strict);
|
|
256
281
|
if (stale)
|
|
257
282
|
return stale;
|
|
258
283
|
throw new Error(`AMD KDS crl returned ${resp.status}`);
|
|
@@ -270,12 +295,249 @@ async function fetchCrl(product, reloadAmdKds = false) {
|
|
|
270
295
|
kdsCache.put("crl", product, der, ttl);
|
|
271
296
|
return der;
|
|
272
297
|
}
|
|
298
|
+
/**
|
|
299
|
+
* Verify the AMD VCEK CRL signature against the ARK public key.
|
|
300
|
+
*
|
|
301
|
+
* AMD signs `/vcek/v1/{product}/crl` directly with the ARK private key
|
|
302
|
+
* using RSA-PSS-SHA384 (salt length 48). Without this check, a forged
|
|
303
|
+
* or replayed CRL with revocation entries removed would slip through
|
|
304
|
+
* the revocation step — the previous behaviour only consulted the
|
|
305
|
+
* revoked-serial list.
|
|
306
|
+
*
|
|
307
|
+
* Walks the outer DER manually so we can hand the un-modified
|
|
308
|
+
* `tbsCertList` bytes to `crypto.verify`. Re-encoding via asn1.js
|
|
309
|
+
* is not guaranteed to reproduce the original byte-for-byte.
|
|
310
|
+
*/
|
|
311
|
+
function verifyCrlSignature(crlDer, chainPem) {
|
|
312
|
+
try {
|
|
313
|
+
const blocks = splitPem(chainPem);
|
|
314
|
+
if (blocks.length < 2)
|
|
315
|
+
return false;
|
|
316
|
+
const ark = new crypto.X509Certificate(blocks[1]);
|
|
317
|
+
// CertificateList ::= SEQUENCE { tbsCertList SEQUENCE, sigAlg SEQUENCE, sig BIT STRING }
|
|
318
|
+
if (crlDer[0] !== 0x30)
|
|
319
|
+
return false;
|
|
320
|
+
let cur = parseDerLength(crlDer, 1).offset;
|
|
321
|
+
// tbsCertList — capture raw bytes for signature verification
|
|
322
|
+
if (crlDer[cur] !== 0x30)
|
|
323
|
+
return false;
|
|
324
|
+
const tbsStart = cur;
|
|
325
|
+
const tbsLen = parseDerLength(crlDer, cur + 1);
|
|
326
|
+
cur = tbsLen.offset + tbsLen.length;
|
|
327
|
+
const tbsBytes = crlDer.subarray(tbsStart, cur);
|
|
328
|
+
// Confirm the CRL's issuer DN equals the ARK's subject DN. The signature
|
|
329
|
+
// check above already ties the CRL bytes to the ARK key, so a mismatch
|
|
330
|
+
// would indicate AMD mislabelled the issuer field — but checking it
|
|
331
|
+
// explicitly removes any ambiguity about which CA the CRL is for.
|
|
332
|
+
if (!crlIssuerEqualsArkSubject(crlDer, Buffer.from(ark.raw)))
|
|
333
|
+
return false;
|
|
334
|
+
// signatureAlgorithm — skip
|
|
335
|
+
if (crlDer[cur] !== 0x30)
|
|
336
|
+
return false;
|
|
337
|
+
const sigAlgLen = parseDerLength(crlDer, cur + 1);
|
|
338
|
+
cur = sigAlgLen.offset + sigAlgLen.length;
|
|
339
|
+
// signatureValue BIT STRING — first content byte is unused-bits count (0)
|
|
340
|
+
if (crlDer[cur] !== 0x03)
|
|
341
|
+
return false;
|
|
342
|
+
const sigBitLen = parseDerLength(crlDer, cur + 1);
|
|
343
|
+
if (crlDer[sigBitLen.offset] !== 0x00)
|
|
344
|
+
return false;
|
|
345
|
+
const sigBytes = crlDer.subarray(sigBitLen.offset + 1, sigBitLen.offset + sigBitLen.length);
|
|
346
|
+
return crypto.verify("sha384", tbsBytes, {
|
|
347
|
+
key: ark.publicKey,
|
|
348
|
+
padding: crypto.constants.RSA_PKCS1_PSS_PADDING,
|
|
349
|
+
saltLength: 48,
|
|
350
|
+
}, sigBytes);
|
|
351
|
+
}
|
|
352
|
+
catch {
|
|
353
|
+
return false;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Compare the CRL's issuer Name to the ARK's subject Name structurally
|
|
358
|
+
* (parse both with asn1js and re-encode to canonical DER, then byte-equal).
|
|
359
|
+
*
|
|
360
|
+
* CRL: outer SEQUENCE → tbsCertList → optional version (INTEGER) → signature
|
|
361
|
+
* AlgorithmIdentifier (SEQUENCE) → issuer Name (SEQUENCE) ← here.
|
|
362
|
+
* Cert: outer SEQUENCE → tbsCertificate → optional [0] version → serialNumber
|
|
363
|
+
* → signature → issuer → validity → subject Name (SEQUENCE) ← here.
|
|
364
|
+
*/
|
|
365
|
+
function crlIssuerEqualsArkSubject(crlDer, arkDer) {
|
|
366
|
+
const crlParsed = fromBER(crlDer);
|
|
367
|
+
const arkParsed = fromBER(arkDer);
|
|
368
|
+
if (crlParsed.offset === -1 || arkParsed.offset === -1)
|
|
369
|
+
return false;
|
|
370
|
+
const certList = crlParsed.result;
|
|
371
|
+
if (!(certList instanceof Sequence))
|
|
372
|
+
return false;
|
|
373
|
+
const tbsCertList = certList.valueBlock.value[0];
|
|
374
|
+
if (!(tbsCertList instanceof Sequence))
|
|
375
|
+
return false;
|
|
376
|
+
const crlChildren = tbsCertList.valueBlock.value;
|
|
377
|
+
let i = 0;
|
|
378
|
+
if (crlChildren[i] instanceof Integer)
|
|
379
|
+
i++; // optional version
|
|
380
|
+
i++; // signature AlgorithmIdentifier
|
|
381
|
+
const crlIssuer = crlChildren[i];
|
|
382
|
+
if (!(crlIssuer instanceof Sequence))
|
|
383
|
+
return false;
|
|
384
|
+
const cert = arkParsed.result;
|
|
385
|
+
if (!(cert instanceof Sequence))
|
|
386
|
+
return false;
|
|
387
|
+
const tbsCert = cert.valueBlock.value[0];
|
|
388
|
+
if (!(tbsCert instanceof Sequence))
|
|
389
|
+
return false;
|
|
390
|
+
const certChildren = tbsCert.valueBlock.value;
|
|
391
|
+
let j = 0;
|
|
392
|
+
// [0] version is context-specific tagged
|
|
393
|
+
const v = certChildren[j];
|
|
394
|
+
if (v?.idBlock?.tagClass === 3 && v?.idBlock?.tagNumber === 0)
|
|
395
|
+
j++;
|
|
396
|
+
j += 3; // serialNumber, signature, issuer
|
|
397
|
+
j++; // validity
|
|
398
|
+
const arkSubject = certChildren[j];
|
|
399
|
+
if (!(arkSubject instanceof Sequence))
|
|
400
|
+
return false;
|
|
401
|
+
const a = Buffer.from(crlIssuer.toBER());
|
|
402
|
+
const b = Buffer.from(arkSubject.toBER());
|
|
403
|
+
return Buffer.compare(a, b) === 0;
|
|
404
|
+
}
|
|
405
|
+
function parseDerLength(buf, offset) {
|
|
406
|
+
let len = buf[offset];
|
|
407
|
+
offset += 1;
|
|
408
|
+
if (len < 0x80)
|
|
409
|
+
return { length: len, offset };
|
|
410
|
+
const numBytes = len & 0x7f;
|
|
411
|
+
let actualLen = 0;
|
|
412
|
+
for (let i = 0; i < numBytes; i++) {
|
|
413
|
+
actualLen = (actualLen << 8) | buf[offset++];
|
|
414
|
+
}
|
|
415
|
+
return { length: actualLen, offset };
|
|
416
|
+
}
|
|
417
|
+
// AMD VCEK custom OIDs (1.3.6.1.4.1.3704.1.*) that name the cert's chip and
|
|
418
|
+
// TCB binding.
|
|
419
|
+
const AMD_OID_HWID = "1.3.6.1.4.1.3704.1.4";
|
|
420
|
+
const AMD_OID_BL = "1.3.6.1.4.1.3704.1.3.1";
|
|
421
|
+
const AMD_OID_TEE = "1.3.6.1.4.1.3704.1.3.2";
|
|
422
|
+
const AMD_OID_SNP = "1.3.6.1.4.1.3704.1.3.3";
|
|
423
|
+
const AMD_OID_UC = "1.3.6.1.4.1.3704.1.3.8";
|
|
424
|
+
/**
|
|
425
|
+
* Get the OCTET STRING contents of an X.509 extension by OID, walking the
|
|
426
|
+
* cert structurally (rather than searching for OID byte sequences in the
|
|
427
|
+
* raw DER, which can collide with serial numbers or signature bytes).
|
|
428
|
+
*
|
|
429
|
+
* Cert structure: outer SEQUENCE → tbsCertificate SEQUENCE → ...,
|
|
430
|
+
* extensions [3] EXPLICIT SEQUENCE OF Extension.
|
|
431
|
+
* Extension structure: SEQUENCE { OID, [BOOLEAN critical], OCTET STRING }.
|
|
432
|
+
*/
|
|
433
|
+
function getCertExtensionContents(certDer, oidString) {
|
|
434
|
+
const parsed = fromBER(certDer);
|
|
435
|
+
if (parsed.offset === -1)
|
|
436
|
+
return null;
|
|
437
|
+
const cert = parsed.result;
|
|
438
|
+
if (!(cert instanceof Sequence))
|
|
439
|
+
return null;
|
|
440
|
+
const tbs = cert.valueBlock.value[0];
|
|
441
|
+
if (!(tbs instanceof Sequence))
|
|
442
|
+
return null;
|
|
443
|
+
// Find [3] EXPLICIT extensions tag (context-specific class=3, tagNumber=3)
|
|
444
|
+
let extsContainer = null;
|
|
445
|
+
for (const child of tbs.valueBlock.value) {
|
|
446
|
+
const idBlock = child.idBlock;
|
|
447
|
+
if (idBlock?.tagClass === 3 && idBlock?.tagNumber === 3) {
|
|
448
|
+
extsContainer = child;
|
|
449
|
+
break;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
if (!extsContainer)
|
|
453
|
+
return null;
|
|
454
|
+
// Inside the [3] tag is the SEQUENCE OF Extension
|
|
455
|
+
const extsSeq = extsContainer.valueBlock.value[0];
|
|
456
|
+
if (!(extsSeq instanceof Sequence))
|
|
457
|
+
return null;
|
|
458
|
+
for (const ext of extsSeq.valueBlock.value) {
|
|
459
|
+
if (!(ext instanceof Sequence))
|
|
460
|
+
continue;
|
|
461
|
+
const children = ext.valueBlock.value;
|
|
462
|
+
const oidEl = children[0];
|
|
463
|
+
if (!(oidEl instanceof ObjectIdentifier))
|
|
464
|
+
continue;
|
|
465
|
+
if (oidEl.valueBlock.toString() !== oidString)
|
|
466
|
+
continue;
|
|
467
|
+
// Last child is the OCTET STRING (skip optional BOOLEAN critical)
|
|
468
|
+
const last = children[children.length - 1];
|
|
469
|
+
if (!(last instanceof OctetString))
|
|
470
|
+
return null;
|
|
471
|
+
return Buffer.from(last.valueBlock.valueHexView);
|
|
472
|
+
}
|
|
473
|
+
return null;
|
|
474
|
+
}
|
|
475
|
+
/** Read the inner ASN.1 INTEGER inside an AMD TCB extension's OCTET STRING. */
|
|
476
|
+
function readAmdTcbInt(octetContents) {
|
|
477
|
+
if (octetContents.length < 3 || octetContents[0] !== 0x02)
|
|
478
|
+
return null;
|
|
479
|
+
const len = parseDerLength(octetContents, 1);
|
|
480
|
+
const intBytes = octetContents.subarray(len.offset, len.offset + len.length);
|
|
481
|
+
if (intBytes.length === 1)
|
|
482
|
+
return intBytes[0];
|
|
483
|
+
// ASN.1 INTEGER for values >= 128 is encoded as 00 XX (leading zero for
|
|
484
|
+
// unsigned representation).
|
|
485
|
+
if (intBytes.length === 2 && intBytes[0] === 0x00)
|
|
486
|
+
return intBytes[1];
|
|
487
|
+
return null;
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* Confirm the VCEK certificate's HWID + TCB extensions match the report.
|
|
491
|
+
*
|
|
492
|
+
* Defence-in-depth: today we trust AMD KDS to return the cert matching the
|
|
493
|
+
* URL parameters we supplied (which were derived from the report). With this
|
|
494
|
+
* check, we trust AMD's own cryptographic binding directly — the cert
|
|
495
|
+
* extensions say "this VCEK is for chip X at TCB Y", and we verify that
|
|
496
|
+
* matches the chip_id + reported_tcb in the attested report.
|
|
497
|
+
*
|
|
498
|
+
* Returns false on any parse error so a malformed/corrupt VCEK cleanly
|
|
499
|
+
* surfaces as `valid=false` instead of throwing.
|
|
500
|
+
*/
|
|
501
|
+
function vcekMatchesReport(vcekDer, rpt) {
|
|
502
|
+
try {
|
|
503
|
+
const hwid = getCertExtensionContents(vcekDer, AMD_OID_HWID);
|
|
504
|
+
if (!hwid || hwid.length !== 64)
|
|
505
|
+
return false;
|
|
506
|
+
if (Buffer.compare(hwid, rpt.chipId) !== 0)
|
|
507
|
+
return false;
|
|
508
|
+
const blOctets = getCertExtensionContents(vcekDer, AMD_OID_BL);
|
|
509
|
+
const teeOctets = getCertExtensionContents(vcekDer, AMD_OID_TEE);
|
|
510
|
+
const snpOctets = getCertExtensionContents(vcekDer, AMD_OID_SNP);
|
|
511
|
+
const ucOctets = getCertExtensionContents(vcekDer, AMD_OID_UC);
|
|
512
|
+
if (!blOctets || !teeOctets || !snpOctets || !ucOctets)
|
|
513
|
+
return false;
|
|
514
|
+
const bl = readAmdTcbInt(blOctets);
|
|
515
|
+
const tee = readAmdTcbInt(teeOctets);
|
|
516
|
+
const snp = readAmdTcbInt(snpOctets);
|
|
517
|
+
const uc = readAmdTcbInt(ucOctets);
|
|
518
|
+
if (bl === null || tee === null || snp === null || uc === null)
|
|
519
|
+
return false;
|
|
520
|
+
return (bl === rpt.reportedTcb.bootLoader &&
|
|
521
|
+
tee === rpt.reportedTcb.tee &&
|
|
522
|
+
snp === rpt.reportedTcb.snp &&
|
|
523
|
+
uc === rpt.reportedTcb.microcode);
|
|
524
|
+
}
|
|
525
|
+
catch {
|
|
526
|
+
return false;
|
|
527
|
+
}
|
|
528
|
+
}
|
|
273
529
|
/** Return true if the VCEK is NOT in the CRL (i.e. not revoked). */
|
|
274
530
|
function checkVcekRevocation(vcekDer, crlDer) {
|
|
275
531
|
const cert = new crypto.X509Certificate(vcekDer);
|
|
276
532
|
const vcekSerial = normalizeSerialHex(cert.serialNumber);
|
|
277
|
-
const
|
|
278
|
-
|
|
533
|
+
const crl = qvlUtils.CertificateList.decode(crlDer, "der");
|
|
534
|
+
const revokedList = crl?.tbsCertList?.revokedCertificates ?? [];
|
|
535
|
+
for (const entry of revokedList) {
|
|
536
|
+
const serial = normalizeSerialHex(entry.userCertificate.toString(16));
|
|
537
|
+
if (serial === vcekSerial)
|
|
538
|
+
return false;
|
|
539
|
+
}
|
|
540
|
+
return true;
|
|
279
541
|
}
|
|
280
542
|
function splitPem(pem) {
|
|
281
543
|
const blocks = [];
|
|
@@ -286,8 +548,37 @@ function splitPem(pem) {
|
|
|
286
548
|
}
|
|
287
549
|
return blocks;
|
|
288
550
|
}
|
|
289
|
-
/**
|
|
290
|
-
|
|
551
|
+
/**
|
|
552
|
+
* Pinned SHA-256 fingerprints of the AMD ARK public keys (SPKI), per product.
|
|
553
|
+
*
|
|
554
|
+
* AMD publishes the ARK at `https://kdsintf.amd.com/vcek/v1/{product}/cert_chain`,
|
|
555
|
+
* but the chain endpoint is reachable over the public internet — without
|
|
556
|
+
* pinning, a DNS-spoof or compromised KDS could substitute a self-signed
|
|
557
|
+
* impostor ARK and the chain check would still pass. These fingerprints are
|
|
558
|
+
* the cryptographic anchor that ties the chain to AMD.
|
|
559
|
+
*
|
|
560
|
+
* The pin is over the SubjectPublicKeyInfo (not the cert envelope) so it
|
|
561
|
+
* survives certificate reissuance with the same key. ARKs ship with 25-year
|
|
562
|
+
* validity (e.g. ARK-Milan: 2020 → 2045).
|
|
563
|
+
*
|
|
564
|
+
* Recompute by running:
|
|
565
|
+
* curl -sf https://kdsintf.amd.com/vcek/v1/{product}/cert_chain |
|
|
566
|
+
* awk '/-----BEGIN CERTIFICATE-----/{n++} n==2{print}' |
|
|
567
|
+
* openssl x509 -pubkey -noout |
|
|
568
|
+
* openssl pkey -pubin -outform DER 2>/dev/null |
|
|
569
|
+
* openssl dgst -sha256
|
|
570
|
+
*/
|
|
571
|
+
const PINNED_ARK_SPKI_SHA256 = {
|
|
572
|
+
Milan: "9f056bee44377e29308cb5ffa895bdfb62d18881fa6bed8d6f075b0204089cb9",
|
|
573
|
+
Genoa: "429a69c9422aa258ee4d8db5fcda9c6470ef15f8cd5a9cebd6cbc7d90b863831",
|
|
574
|
+
Turin: "4f125410563a2ab9a50356f9243f6fe0b6f73de98603f53f90339c70e9d7ad08",
|
|
575
|
+
};
|
|
576
|
+
function spkiSha256Hex(cert) {
|
|
577
|
+
const spkiDer = cert.publicKey.export({ format: "der", type: "spki" });
|
|
578
|
+
return crypto.createHash("sha256").update(spkiDer).digest("hex");
|
|
579
|
+
}
|
|
580
|
+
/** Verify VCEK → ASK → ARK certificate chain and pin the ARK to AMD. */
|
|
581
|
+
function verifyCertChain(vcekDer, chainPem, product) {
|
|
291
582
|
const blocks = splitPem(chainPem);
|
|
292
583
|
if (blocks.length < 2) {
|
|
293
584
|
return false;
|
|
@@ -302,6 +593,13 @@ function verifyCertChain(vcekDer, chainPem) {
|
|
|
302
593
|
return false;
|
|
303
594
|
}
|
|
304
595
|
}
|
|
596
|
+
// Pin the ARK to the known AMD root for this product. Without this,
|
|
597
|
+
// a self-signed impostor chain would pass the cryptographic checks below.
|
|
598
|
+
const expectedArkSpki = PINNED_ARK_SPKI_SHA256[product];
|
|
599
|
+
if (!expectedArkSpki)
|
|
600
|
+
return false;
|
|
601
|
+
if (spkiSha256Hex(ark) !== expectedArkSpki)
|
|
602
|
+
return false;
|
|
305
603
|
try {
|
|
306
604
|
// X509Certificate.verify() handles RSA-PSS and ECDSA automatically
|
|
307
605
|
// ARK is self-signed
|
|
@@ -341,7 +639,7 @@ function verifyReportSignature(rpt, vcekDer) {
|
|
|
341
639
|
// ---------------------------------------------------------------------------
|
|
342
640
|
// Public
|
|
343
641
|
// ---------------------------------------------------------------------------
|
|
344
|
-
export async function checkSevCpuAttestation(dataOrUrl, product = "", reloadAmdKds = false) {
|
|
642
|
+
export async function checkSevCpuAttestation(dataOrUrl, product = "", reloadAmdKds = false, strict = false) {
|
|
345
643
|
const data = isVmUrl(dataOrUrl) ? await fetchCpuQuote(dataOrUrl) : dataOrUrl;
|
|
346
644
|
const errors = [];
|
|
347
645
|
const checks = {};
|
|
@@ -373,7 +671,7 @@ export async function checkSevCpuAttestation(dataOrUrl, product = "", reloadAmdK
|
|
|
373
671
|
let vcekDer;
|
|
374
672
|
let detectedProduct;
|
|
375
673
|
try {
|
|
376
|
-
const result = await fetchVcek(product, rpt.chipId, rpt.reportedTcb, reloadAmdKds);
|
|
674
|
+
const result = await fetchVcek(product, rpt.chipId, rpt.reportedTcb, reloadAmdKds, strict);
|
|
377
675
|
vcekDer = result.der;
|
|
378
676
|
detectedProduct = result.product;
|
|
379
677
|
checks.vcek_fetched = true;
|
|
@@ -383,10 +681,17 @@ export async function checkSevCpuAttestation(dataOrUrl, product = "", reloadAmdK
|
|
|
383
681
|
checks.vcek_fetched = false;
|
|
384
682
|
return makeResult("SEV-SNP", { checks, errors });
|
|
385
683
|
}
|
|
684
|
+
// VCEK extensions must match the report's chip_id and reported_tcb.
|
|
685
|
+
// Defence-in-depth against KDS misbehavior or URL-construction bugs.
|
|
686
|
+
checks.vcek_matches_report = vcekMatchesReport(vcekDer, rpt);
|
|
687
|
+
if (!checks.vcek_matches_report) {
|
|
688
|
+
errors.push("VCEK extensions do not match report (chip_id or TCB mismatch)");
|
|
689
|
+
}
|
|
386
690
|
// Verify cert chain (VCEK -> ASK -> ARK)
|
|
691
|
+
let chainPem;
|
|
387
692
|
try {
|
|
388
|
-
|
|
389
|
-
checks.cert_chain_valid = verifyCertChain(vcekDer, chainPem);
|
|
693
|
+
chainPem = await fetchChainPem(detectedProduct, reloadAmdKds, strict);
|
|
694
|
+
checks.cert_chain_valid = verifyCertChain(vcekDer, chainPem, detectedProduct);
|
|
390
695
|
if (!checks.cert_chain_valid) {
|
|
391
696
|
errors.push("Certificate chain verification failed (VCEK → ASK → ARK)");
|
|
392
697
|
}
|
|
@@ -395,10 +700,18 @@ export async function checkSevCpuAttestation(dataOrUrl, product = "", reloadAmdK
|
|
|
395
700
|
checks.cert_chain_valid = false;
|
|
396
701
|
errors.push(`Failed to verify cert chain: ${e.message}`);
|
|
397
702
|
}
|
|
398
|
-
// CRL
|
|
399
|
-
//
|
|
703
|
+
// CRL signature + revocation. Both gates required for valid=true: the
|
|
704
|
+
// signature ties the CRL contents to AMD's ARK (so a forged CRL with
|
|
705
|
+
// revocations stripped won't pass), and the revocation check confirms
|
|
706
|
+
// the VCEK serial isn't on the list.
|
|
400
707
|
try {
|
|
401
|
-
const crlDer = await fetchCrl(detectedProduct, reloadAmdKds);
|
|
708
|
+
const crlDer = await fetchCrl(detectedProduct, reloadAmdKds, strict);
|
|
709
|
+
checks.crl_signature_valid = chainPem
|
|
710
|
+
? verifyCrlSignature(crlDer, chainPem)
|
|
711
|
+
: false;
|
|
712
|
+
if (!checks.crl_signature_valid) {
|
|
713
|
+
errors.push("AMD CRL signature verification failed");
|
|
714
|
+
}
|
|
402
715
|
checks.crl_check_passed = checkVcekRevocation(vcekDer, crlDer);
|
|
403
716
|
if (!checks.crl_check_passed) {
|
|
404
717
|
const cert = new crypto.X509Certificate(vcekDer);
|
|
@@ -406,6 +719,7 @@ export async function checkSevCpuAttestation(dataOrUrl, product = "", reloadAmdK
|
|
|
406
719
|
}
|
|
407
720
|
}
|
|
408
721
|
catch (e) {
|
|
722
|
+
checks.crl_signature_valid = false;
|
|
409
723
|
checks.crl_check_passed = false;
|
|
410
724
|
errors.push(`CRL revocation check failed: ${e.message}`);
|
|
411
725
|
}
|
|
@@ -414,11 +728,27 @@ export async function checkSevCpuAttestation(dataOrUrl, product = "", reloadAmdK
|
|
|
414
728
|
if (!checks.report_signature_valid) {
|
|
415
729
|
errors.push("Report signature verification failed");
|
|
416
730
|
}
|
|
731
|
+
// Policy: SecretVM must not be running in debug mode (would expose secrets).
|
|
732
|
+
checks.debug_disabled = !rpt.debugAllowed;
|
|
733
|
+
if (!checks.debug_disabled) {
|
|
734
|
+
errors.push("Report has debug_allowed=true (debug-mode VM is not trusted)");
|
|
735
|
+
}
|
|
736
|
+
// TCB monotonicity per the SEV-SNP firmware ABI: current_tcb >= committed_tcb
|
|
737
|
+
// >= launch_tcb componentwise. An inversion indicates a firmware downgrade
|
|
738
|
+
// or a malformed report.
|
|
739
|
+
checks.tcb_ordering_valid = isTcbOrdered(rpt.currentTcb, rpt.committedTcb, rpt.launchTcb);
|
|
740
|
+
if (!checks.tcb_ordering_valid) {
|
|
741
|
+
errors.push("TCB ordering invalid (expected current >= committed >= launch componentwise)");
|
|
742
|
+
}
|
|
417
743
|
const valid = !!checks.report_parsed &&
|
|
418
744
|
!!checks.vcek_fetched &&
|
|
745
|
+
!!checks.vcek_matches_report &&
|
|
419
746
|
!!checks.cert_chain_valid &&
|
|
747
|
+
!!checks.crl_signature_valid &&
|
|
420
748
|
!!checks.crl_check_passed &&
|
|
421
|
-
!!checks.report_signature_valid
|
|
749
|
+
!!checks.report_signature_valid &&
|
|
750
|
+
!!checks.debug_disabled &&
|
|
751
|
+
!!checks.tcb_ordering_valid;
|
|
422
752
|
const report = {
|
|
423
753
|
version: rpt.version,
|
|
424
754
|
guest_svn: rpt.guestSvn,
|
package/dist/amd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"amd.js","sourceRoot":"","sources":["../src/amd.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"amd.js","sourceRoot":"","sources":["../src/amd.ts"],"names":[],"mappings":"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"}
|