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/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 { parseCrlRevokedSerials, normalizeSerialHex } from "@teekit/qvl/utils";
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
- async function fetchVcek(product, chipId, reportedTcb, reloadAmdKds = false) {
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
- const stale = kdsCache.getStale("vcek", cacheKey);
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 = kdsCache.getStale("vcek", cacheKey);
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 = kdsCache.getStale("vcek", cacheKey);
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 = kdsCache.getStale("cert_chain", product);
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 = kdsCache.getStale("cert_chain", product);
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 = kdsCache.getStale("crl", product);
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 = kdsCache.getStale("crl", product);
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 revoked = new Set(parseCrlRevokedSerials(crlDer));
278
- return !revoked.has(vcekSerial);
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
- /** Verify VCEK → ASK → ARK certificate chain using Node's crypto module. */
290
- function verifyCertChain(vcekDer, chainPem) {
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
- const chainPem = await fetchChainPem(detectedProduct, reloadAmdKds);
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 revocation check fetch the AMD VCEK CRL and confirm the leaf
399
- // cert's serial number is not in the revoked list. Cached for 7 days.
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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"}