@blamejs/exceptd-skills 0.18.27 → 0.18.28
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/CHANGELOG.md +12 -0
- package/bin/exceptd.js +25 -8
- package/data/_indexes/_meta.json +10 -10
- package/data/_indexes/activity-feed.json +29 -29
- package/data/_indexes/catalog-summaries.json +2 -2
- package/data/_indexes/chains.json +65 -10
- package/data/_indexes/currency.json +6 -6
- package/data/_indexes/frequency.json +105 -39
- package/data/_indexes/handoff-dag.json +36 -16
- package/data/_indexes/jurisdiction-map.json +3 -1
- package/data/_indexes/section-offsets.json +166 -148
- package/data/_indexes/summary-cards.json +41 -10
- package/data/_indexes/token-budget.json +63 -53
- package/data/_indexes/xref.json +43 -3
- package/data/d3fend-catalog.json +41 -8
- package/data/rfc-references.json +23 -4
- package/lib/currency-severity.js +60 -0
- package/manifest.json +99 -62
- package/package.json +2 -2
- package/sbom.cdx.json +40 -25
- package/skills/global-grc/skill.md +106 -17
- package/skills/pqc-first/skill.md +3 -2
- package/skills/security-maturity-tiers/skill.md +56 -6
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
"schema_version": "1.0.0",
|
|
4
4
|
"tokenizer_note": "Character-density approximation: 1 token ≈ 4 chars. This is the canonical rule-of-thumb for OpenAI tokenizers on English+technical text. Claude's tokenizer is typically more efficient on prose; treat this as an upper-bound budget for both. Consumers with stricter precision needs should re-tokenize with their own tokenizer.",
|
|
5
5
|
"approx_chars_per_token": 4,
|
|
6
|
-
"total_chars":
|
|
7
|
-
"total_approx_tokens":
|
|
6
|
+
"total_chars": 1767897,
|
|
7
|
+
"total_approx_tokens": 441982,
|
|
8
8
|
"skill_count": 51
|
|
9
9
|
},
|
|
10
10
|
"skills": {
|
|
@@ -650,10 +650,10 @@
|
|
|
650
650
|
},
|
|
651
651
|
"global-grc": {
|
|
652
652
|
"path": "skills/global-grc/skill.md",
|
|
653
|
-
"bytes":
|
|
654
|
-
"chars":
|
|
655
|
-
"lines":
|
|
656
|
-
"approx_tokens":
|
|
653
|
+
"bytes": 58154,
|
|
654
|
+
"chars": 57870,
|
|
655
|
+
"lines": 662,
|
|
656
|
+
"approx_tokens": 14468,
|
|
657
657
|
"approx_chars_per_token": 4,
|
|
658
658
|
"sections": {
|
|
659
659
|
"frontmatter-scope": {
|
|
@@ -662,44 +662,49 @@
|
|
|
662
662
|
"approx_tokens": 107
|
|
663
663
|
},
|
|
664
664
|
"framework-registry-mid-2026-currency": {
|
|
665
|
-
"bytes":
|
|
666
|
-
"chars":
|
|
667
|
-
"approx_tokens":
|
|
665
|
+
"bytes": 26614,
|
|
666
|
+
"chars": 26474,
|
|
667
|
+
"approx_tokens": 6619
|
|
668
668
|
},
|
|
669
669
|
"universal-gaps-no-jurisdiction-covers-these": {
|
|
670
670
|
"bytes": 1104,
|
|
671
671
|
"chars": 1104,
|
|
672
672
|
"approx_tokens": 276
|
|
673
673
|
},
|
|
674
|
+
"defensive-countermeasure-mapping": {
|
|
675
|
+
"bytes": 4445,
|
|
676
|
+
"chars": 4425,
|
|
677
|
+
"approx_tokens": 1106
|
|
678
|
+
},
|
|
674
679
|
"notification-timeline-summary": {
|
|
675
|
-
"bytes":
|
|
676
|
-
"chars":
|
|
677
|
-
"approx_tokens":
|
|
680
|
+
"bytes": 1320,
|
|
681
|
+
"chars": 1316,
|
|
682
|
+
"approx_tokens": 329
|
|
678
683
|
},
|
|
679
684
|
"threat-context": {
|
|
680
|
-
"bytes":
|
|
681
|
-
"chars":
|
|
682
|
-
"approx_tokens":
|
|
685
|
+
"bytes": 3324,
|
|
686
|
+
"chars": 3298,
|
|
687
|
+
"approx_tokens": 825
|
|
683
688
|
},
|
|
684
689
|
"framework-lag-declaration": {
|
|
685
|
-
"bytes":
|
|
686
|
-
"chars":
|
|
687
|
-
"approx_tokens":
|
|
690
|
+
"bytes": 8387,
|
|
691
|
+
"chars": 8345,
|
|
692
|
+
"approx_tokens": 2086
|
|
688
693
|
},
|
|
689
694
|
"ttp-mapping": {
|
|
690
|
-
"bytes":
|
|
691
|
-
"chars":
|
|
692
|
-
"approx_tokens":
|
|
695
|
+
"bytes": 2316,
|
|
696
|
+
"chars": 2299,
|
|
697
|
+
"approx_tokens": 575
|
|
693
698
|
},
|
|
694
699
|
"exploit-availability-matrix": {
|
|
695
|
-
"bytes":
|
|
696
|
-
"chars":
|
|
697
|
-
"approx_tokens":
|
|
700
|
+
"bytes": 3834,
|
|
701
|
+
"chars": 3820,
|
|
702
|
+
"approx_tokens": 955
|
|
698
703
|
},
|
|
699
704
|
"compliance-theater-check": {
|
|
700
|
-
"bytes":
|
|
701
|
-
"chars":
|
|
702
|
-
"approx_tokens":
|
|
705
|
+
"bytes": 2697,
|
|
706
|
+
"chars": 2687,
|
|
707
|
+
"approx_tokens": 672
|
|
703
708
|
},
|
|
704
709
|
"analysis-procedure": {
|
|
705
710
|
"bytes": 1036,
|
|
@@ -780,10 +785,10 @@
|
|
|
780
785
|
},
|
|
781
786
|
"pqc-first": {
|
|
782
787
|
"path": "skills/pqc-first/skill.md",
|
|
783
|
-
"bytes":
|
|
784
|
-
"chars":
|
|
785
|
-
"lines":
|
|
786
|
-
"approx_tokens":
|
|
788
|
+
"bytes": 38292,
|
|
789
|
+
"chars": 38118,
|
|
790
|
+
"lines": 573,
|
|
791
|
+
"approx_tokens": 9530,
|
|
787
792
|
"approx_chars_per_token": 4,
|
|
788
793
|
"sections": {
|
|
789
794
|
"threat-context": {
|
|
@@ -792,9 +797,9 @@
|
|
|
792
797
|
"approx_tokens": 652
|
|
793
798
|
},
|
|
794
799
|
"framework-lag-declaration": {
|
|
795
|
-
"bytes":
|
|
796
|
-
"chars":
|
|
797
|
-
"approx_tokens":
|
|
800
|
+
"bytes": 8162,
|
|
801
|
+
"chars": 8134,
|
|
802
|
+
"approx_tokens": 2034
|
|
798
803
|
},
|
|
799
804
|
"ttp-mapping": {
|
|
800
805
|
"bytes": 2120,
|
|
@@ -940,10 +945,10 @@
|
|
|
940
945
|
},
|
|
941
946
|
"security-maturity-tiers": {
|
|
942
947
|
"path": "skills/security-maturity-tiers/skill.md",
|
|
943
|
-
"bytes":
|
|
944
|
-
"chars":
|
|
945
|
-
"lines":
|
|
946
|
-
"approx_tokens":
|
|
948
|
+
"bytes": 37336,
|
|
949
|
+
"chars": 37134,
|
|
950
|
+
"lines": 540,
|
|
951
|
+
"approx_tokens": 9284,
|
|
947
952
|
"approx_chars_per_token": 4,
|
|
948
953
|
"sections": {
|
|
949
954
|
"frontmatter-scope": {
|
|
@@ -962,19 +967,19 @@
|
|
|
962
967
|
"approx_tokens": 128
|
|
963
968
|
},
|
|
964
969
|
"domain-kernel-lpe-copy-fail-dirty-frag-class": {
|
|
965
|
-
"bytes":
|
|
966
|
-
"chars":
|
|
967
|
-
"approx_tokens":
|
|
970
|
+
"bytes": 4340,
|
|
971
|
+
"chars": 4328,
|
|
972
|
+
"approx_tokens": 1082
|
|
968
973
|
},
|
|
969
974
|
"domain-ai-attack-surface": {
|
|
970
|
-
"bytes":
|
|
971
|
-
"chars":
|
|
972
|
-
"approx_tokens":
|
|
975
|
+
"bytes": 3426,
|
|
976
|
+
"chars": 3396,
|
|
977
|
+
"approx_tokens": 849
|
|
973
978
|
},
|
|
974
979
|
"domain-cryptography-pqc": {
|
|
975
|
-
"bytes":
|
|
976
|
-
"chars":
|
|
977
|
-
"approx_tokens":
|
|
980
|
+
"bytes": 2257,
|
|
981
|
+
"chars": 2231,
|
|
982
|
+
"approx_tokens": 558
|
|
978
983
|
},
|
|
979
984
|
"domain-grc-compliance": {
|
|
980
985
|
"bytes": 1960,
|
|
@@ -1002,20 +1007,25 @@
|
|
|
1002
1007
|
"approx_tokens": 161
|
|
1003
1008
|
},
|
|
1004
1009
|
"threat-context": {
|
|
1005
|
-
"bytes":
|
|
1006
|
-
"chars":
|
|
1007
|
-
"approx_tokens":
|
|
1010
|
+
"bytes": 2244,
|
|
1011
|
+
"chars": 2238,
|
|
1012
|
+
"approx_tokens": 560
|
|
1008
1013
|
},
|
|
1009
1014
|
"framework-lag-declaration": {
|
|
1010
|
-
"bytes":
|
|
1011
|
-
"chars":
|
|
1012
|
-
"approx_tokens":
|
|
1015
|
+
"bytes": 4610,
|
|
1016
|
+
"chars": 4588,
|
|
1017
|
+
"approx_tokens": 1147
|
|
1013
1018
|
},
|
|
1014
1019
|
"ttp-mapping": {
|
|
1015
1020
|
"bytes": 2508,
|
|
1016
1021
|
"chars": 2506,
|
|
1017
1022
|
"approx_tokens": 627
|
|
1018
1023
|
},
|
|
1024
|
+
"defensive-countermeasure-mapping": {
|
|
1025
|
+
"bytes": 4145,
|
|
1026
|
+
"chars": 4129,
|
|
1027
|
+
"approx_tokens": 1032
|
|
1028
|
+
},
|
|
1019
1029
|
"exploit-availability-matrix": {
|
|
1020
1030
|
"bytes": 2665,
|
|
1021
1031
|
"chars": 2661,
|
package/data/_indexes/xref.json
CHANGED
|
@@ -300,11 +300,13 @@
|
|
|
300
300
|
"defensive-countermeasure-mapping",
|
|
301
301
|
"dlp-gap-analysis",
|
|
302
302
|
"fuzz-testing-strategy",
|
|
303
|
+
"global-grc",
|
|
303
304
|
"kernel-lpe-triage",
|
|
304
305
|
"mcp-agent-trust",
|
|
305
306
|
"mlops-security",
|
|
306
307
|
"sector-energy",
|
|
307
308
|
"sector-federal-government",
|
|
309
|
+
"security-maturity-tiers",
|
|
308
310
|
"supply-chain-integrity",
|
|
309
311
|
"webapp-security"
|
|
310
312
|
],
|
|
@@ -340,6 +342,7 @@
|
|
|
340
342
|
"dlp-gap-analysis",
|
|
341
343
|
"email-security-anti-phishing",
|
|
342
344
|
"fuzz-testing-strategy",
|
|
345
|
+
"global-grc",
|
|
343
346
|
"idp-incident-response",
|
|
344
347
|
"incident-response-playbook",
|
|
345
348
|
"mlops-security",
|
|
@@ -348,6 +351,7 @@
|
|
|
348
351
|
"sector-financial",
|
|
349
352
|
"sector-healthcare",
|
|
350
353
|
"sector-telecom",
|
|
354
|
+
"security-maturity-tiers",
|
|
351
355
|
"webapp-security"
|
|
352
356
|
],
|
|
353
357
|
"D3-NTA": [
|
|
@@ -360,6 +364,7 @@
|
|
|
360
364
|
"defensive-countermeasure-mapping",
|
|
361
365
|
"dlp-gap-analysis",
|
|
362
366
|
"email-security-anti-phishing",
|
|
367
|
+
"global-grc",
|
|
363
368
|
"idp-incident-response",
|
|
364
369
|
"incident-response-playbook",
|
|
365
370
|
"rag-pipeline-security",
|
|
@@ -367,12 +372,15 @@
|
|
|
367
372
|
"sector-energy",
|
|
368
373
|
"sector-financial",
|
|
369
374
|
"sector-telecom",
|
|
375
|
+
"security-maturity-tiers",
|
|
370
376
|
"webapp-security"
|
|
371
377
|
],
|
|
372
378
|
"D3-FAPA": [
|
|
373
379
|
"ai-attack-surface",
|
|
374
380
|
"defensive-countermeasure-mapping",
|
|
375
|
-
"
|
|
381
|
+
"global-grc",
|
|
382
|
+
"rag-pipeline-security",
|
|
383
|
+
"security-maturity-tiers"
|
|
376
384
|
],
|
|
377
385
|
"D3-CSPP": [
|
|
378
386
|
"age-gates-child-safety",
|
|
@@ -383,12 +391,14 @@
|
|
|
383
391
|
"defensive-countermeasure-mapping",
|
|
384
392
|
"dlp-gap-analysis",
|
|
385
393
|
"email-security-anti-phishing",
|
|
394
|
+
"global-grc",
|
|
386
395
|
"identity-assurance",
|
|
387
396
|
"incident-response-playbook",
|
|
388
397
|
"mcp-agent-trust",
|
|
389
398
|
"rag-pipeline-security",
|
|
390
399
|
"ransomware-response",
|
|
391
400
|
"sector-healthcare",
|
|
401
|
+
"security-maturity-tiers",
|
|
392
402
|
"webapp-security"
|
|
393
403
|
],
|
|
394
404
|
"D3-CAA": [
|
|
@@ -420,11 +430,13 @@
|
|
|
420
430
|
"cloud-iam-incident",
|
|
421
431
|
"defensive-countermeasure-mapping",
|
|
422
432
|
"email-security-anti-phishing",
|
|
433
|
+
"global-grc",
|
|
423
434
|
"identity-assurance",
|
|
424
435
|
"idp-incident-response",
|
|
425
436
|
"mcp-agent-trust",
|
|
426
437
|
"sector-financial",
|
|
427
438
|
"sector-healthcare",
|
|
439
|
+
"security-maturity-tiers",
|
|
428
440
|
"webapp-security"
|
|
429
441
|
],
|
|
430
442
|
"D3-FCR": [
|
|
@@ -442,8 +454,10 @@
|
|
|
442
454
|
"ai-c2-detection",
|
|
443
455
|
"container-runtime-security",
|
|
444
456
|
"defensive-countermeasure-mapping",
|
|
457
|
+
"global-grc",
|
|
445
458
|
"sector-energy",
|
|
446
|
-
"sector-telecom"
|
|
459
|
+
"sector-telecom",
|
|
460
|
+
"security-maturity-tiers"
|
|
447
461
|
],
|
|
448
462
|
"D3-NTPM": [
|
|
449
463
|
"ai-c2-detection",
|
|
@@ -454,13 +468,35 @@
|
|
|
454
468
|
"sector-energy",
|
|
455
469
|
"sector-telecom"
|
|
456
470
|
],
|
|
471
|
+
"D3-EFA": [
|
|
472
|
+
"global-grc",
|
|
473
|
+
"security-maturity-tiers"
|
|
474
|
+
],
|
|
457
475
|
"D3-FE": [
|
|
458
476
|
"defensive-countermeasure-mapping",
|
|
477
|
+
"global-grc",
|
|
459
478
|
"pqc-first"
|
|
460
479
|
],
|
|
480
|
+
"D3-KBPI": [
|
|
481
|
+
"global-grc",
|
|
482
|
+
"security-maturity-tiers"
|
|
483
|
+
],
|
|
461
484
|
"D3-MENCR": [
|
|
462
485
|
"defensive-countermeasure-mapping",
|
|
463
|
-
"
|
|
486
|
+
"global-grc",
|
|
487
|
+
"pqc-first",
|
|
488
|
+
"security-maturity-tiers"
|
|
489
|
+
],
|
|
490
|
+
"D3-OTF": [
|
|
491
|
+
"global-grc",
|
|
492
|
+
"security-maturity-tiers"
|
|
493
|
+
],
|
|
494
|
+
"D3-SCA": [
|
|
495
|
+
"global-grc",
|
|
496
|
+
"security-maturity-tiers"
|
|
497
|
+
],
|
|
498
|
+
"D3-ITF": [
|
|
499
|
+
"security-maturity-tiers"
|
|
464
500
|
],
|
|
465
501
|
"D3-RPA": [
|
|
466
502
|
"defensive-countermeasure-mapping",
|
|
@@ -1319,6 +1355,10 @@
|
|
|
1319
1355
|
"RFC-9794": [
|
|
1320
1356
|
"pqc-first"
|
|
1321
1357
|
],
|
|
1358
|
+
"RFC-9954": [
|
|
1359
|
+
"pqc-first",
|
|
1360
|
+
"security-maturity-tiers"
|
|
1361
|
+
],
|
|
1322
1362
|
"RFC-8032": [
|
|
1323
1363
|
"container-runtime-security",
|
|
1324
1364
|
"identity-assurance",
|
package/data/d3fend-catalog.json
CHANGED
|
@@ -58,11 +58,13 @@
|
|
|
58
58
|
"defensive-countermeasure-mapping",
|
|
59
59
|
"dlp-gap-analysis",
|
|
60
60
|
"fuzz-testing-strategy",
|
|
61
|
+
"global-grc",
|
|
61
62
|
"kernel-lpe-triage",
|
|
62
63
|
"mcp-agent-trust",
|
|
63
64
|
"mlops-security",
|
|
64
65
|
"sector-energy",
|
|
65
66
|
"sector-federal-government",
|
|
67
|
+
"security-maturity-tiers",
|
|
66
68
|
"supply-chain-integrity",
|
|
67
69
|
"webapp-security"
|
|
68
70
|
],
|
|
@@ -301,7 +303,9 @@
|
|
|
301
303
|
],
|
|
302
304
|
"skills_referencing": [
|
|
303
305
|
"defensive-countermeasure-mapping",
|
|
304
|
-
"
|
|
306
|
+
"global-grc",
|
|
307
|
+
"pqc-first",
|
|
308
|
+
"security-maturity-tiers"
|
|
305
309
|
],
|
|
306
310
|
"implementation_examples": [
|
|
307
311
|
"TLS 1.3 with hybrid X25519MLKEM768 key exchange (RFC 9794-class drafts)",
|
|
@@ -339,6 +343,7 @@
|
|
|
339
343
|
],
|
|
340
344
|
"skills_referencing": [
|
|
341
345
|
"defensive-countermeasure-mapping",
|
|
346
|
+
"global-grc",
|
|
342
347
|
"pqc-first"
|
|
343
348
|
],
|
|
344
349
|
"implementation_examples": [
|
|
@@ -427,11 +432,13 @@
|
|
|
427
432
|
"cloud-iam-incident",
|
|
428
433
|
"defensive-countermeasure-mapping",
|
|
429
434
|
"email-security-anti-phishing",
|
|
435
|
+
"global-grc",
|
|
430
436
|
"identity-assurance",
|
|
431
437
|
"idp-incident-response",
|
|
432
438
|
"mcp-agent-trust",
|
|
433
439
|
"sector-financial",
|
|
434
440
|
"sector-healthcare",
|
|
441
|
+
"security-maturity-tiers",
|
|
435
442
|
"webapp-security"
|
|
436
443
|
],
|
|
437
444
|
"implementation_examples": [
|
|
@@ -562,6 +569,7 @@
|
|
|
562
569
|
"defensive-countermeasure-mapping",
|
|
563
570
|
"dlp-gap-analysis",
|
|
564
571
|
"email-security-anti-phishing",
|
|
572
|
+
"global-grc",
|
|
565
573
|
"idp-incident-response",
|
|
566
574
|
"incident-response-playbook",
|
|
567
575
|
"rag-pipeline-security",
|
|
@@ -569,6 +577,7 @@
|
|
|
569
577
|
"sector-energy",
|
|
570
578
|
"sector-financial",
|
|
571
579
|
"sector-telecom",
|
|
580
|
+
"security-maturity-tiers",
|
|
572
581
|
"webapp-security"
|
|
573
582
|
],
|
|
574
583
|
"implementation_examples": [
|
|
@@ -666,12 +675,14 @@
|
|
|
666
675
|
"defensive-countermeasure-mapping",
|
|
667
676
|
"dlp-gap-analysis",
|
|
668
677
|
"email-security-anti-phishing",
|
|
678
|
+
"global-grc",
|
|
669
679
|
"identity-assurance",
|
|
670
680
|
"incident-response-playbook",
|
|
671
681
|
"mcp-agent-trust",
|
|
672
682
|
"rag-pipeline-security",
|
|
673
683
|
"ransomware-response",
|
|
674
684
|
"sector-healthcare",
|
|
685
|
+
"security-maturity-tiers",
|
|
675
686
|
"webapp-security"
|
|
676
687
|
],
|
|
677
688
|
"implementation_examples": [
|
|
@@ -722,6 +733,7 @@
|
|
|
722
733
|
"dlp-gap-analysis",
|
|
723
734
|
"email-security-anti-phishing",
|
|
724
735
|
"fuzz-testing-strategy",
|
|
736
|
+
"global-grc",
|
|
725
737
|
"idp-incident-response",
|
|
726
738
|
"incident-response-playbook",
|
|
727
739
|
"mlops-security",
|
|
@@ -730,6 +742,7 @@
|
|
|
730
742
|
"sector-financial",
|
|
731
743
|
"sector-healthcare",
|
|
732
744
|
"sector-telecom",
|
|
745
|
+
"security-maturity-tiers",
|
|
733
746
|
"webapp-security"
|
|
734
747
|
],
|
|
735
748
|
"implementation_examples": [
|
|
@@ -810,7 +823,9 @@
|
|
|
810
823
|
"skills_referencing": [
|
|
811
824
|
"ai-attack-surface",
|
|
812
825
|
"defensive-countermeasure-mapping",
|
|
813
|
-
"
|
|
826
|
+
"global-grc",
|
|
827
|
+
"rag-pipeline-security",
|
|
828
|
+
"security-maturity-tiers"
|
|
814
829
|
],
|
|
815
830
|
"implementation_examples": [
|
|
816
831
|
"auditd FIM with behavioral rules",
|
|
@@ -850,8 +865,10 @@
|
|
|
850
865
|
"ai-c2-detection",
|
|
851
866
|
"container-runtime-security",
|
|
852
867
|
"defensive-countermeasure-mapping",
|
|
868
|
+
"global-grc",
|
|
853
869
|
"sector-energy",
|
|
854
|
-
"sector-telecom"
|
|
870
|
+
"sector-telecom",
|
|
871
|
+
"security-maturity-tiers"
|
|
855
872
|
],
|
|
856
873
|
"implementation_examples": [
|
|
857
874
|
"VPC egress allowlists with no default internet route",
|
|
@@ -1128,7 +1145,10 @@
|
|
|
1128
1145
|
"cgroup",
|
|
1129
1146
|
"LSM Profile"
|
|
1130
1147
|
],
|
|
1131
|
-
"skills_referencing": [
|
|
1148
|
+
"skills_referencing": [
|
|
1149
|
+
"global-grc",
|
|
1150
|
+
"security-maturity-tiers"
|
|
1151
|
+
],
|
|
1132
1152
|
"implementation_examples": [
|
|
1133
1153
|
"SELinux / AppArmor confinement profiles per workload",
|
|
1134
1154
|
"Linux user namespaces + capability dropping (CAP_SYS_ADMIN removed)",
|
|
@@ -1163,7 +1183,10 @@
|
|
|
1163
1183
|
"System Call",
|
|
1164
1184
|
"Process Behavior"
|
|
1165
1185
|
],
|
|
1166
|
-
"skills_referencing": [
|
|
1186
|
+
"skills_referencing": [
|
|
1187
|
+
"global-grc",
|
|
1188
|
+
"security-maturity-tiers"
|
|
1189
|
+
],
|
|
1167
1190
|
"implementation_examples": [
|
|
1168
1191
|
"Linux auditd with syscall rules (ausearch -k privesc)",
|
|
1169
1192
|
"Falco runtime rules on suspicious syscall sequences",
|
|
@@ -1240,7 +1263,10 @@
|
|
|
1240
1263
|
"Firmware",
|
|
1241
1264
|
"OS Image"
|
|
1242
1265
|
],
|
|
1243
|
-
"skills_referencing": [
|
|
1266
|
+
"skills_referencing": [
|
|
1267
|
+
"global-grc",
|
|
1268
|
+
"security-maturity-tiers"
|
|
1269
|
+
],
|
|
1244
1270
|
"implementation_examples": [
|
|
1245
1271
|
"YARA",
|
|
1246
1272
|
"PEStudio / PEiD",
|
|
@@ -3005,7 +3031,10 @@
|
|
|
3005
3031
|
"reference_url": "https://d3fend.mitre.org/technique/D3-ITF/",
|
|
3006
3032
|
"last_verified": "2026-05-19",
|
|
3007
3033
|
"_auto_imported": true,
|
|
3008
|
-
"_intake_method": "mitre-d3fend-owl"
|
|
3034
|
+
"_intake_method": "mitre-d3fend-owl",
|
|
3035
|
+
"skills_referencing": [
|
|
3036
|
+
"security-maturity-tiers"
|
|
3037
|
+
]
|
|
3009
3038
|
},
|
|
3010
3039
|
"D3-JFAPA": {
|
|
3011
3040
|
"id": "D3-JFAPA",
|
|
@@ -3682,7 +3711,11 @@
|
|
|
3682
3711
|
"reference_url": "https://d3fend.mitre.org/technique/D3-OTF/",
|
|
3683
3712
|
"last_verified": "2026-05-19",
|
|
3684
3713
|
"_auto_imported": true,
|
|
3685
|
-
"_intake_method": "mitre-d3fend-owl"
|
|
3714
|
+
"_intake_method": "mitre-d3fend-owl",
|
|
3715
|
+
"skills_referencing": [
|
|
3716
|
+
"global-grc",
|
|
3717
|
+
"security-maturity-tiers"
|
|
3718
|
+
]
|
|
3686
3719
|
},
|
|
3687
3720
|
"D3-OTP": {
|
|
3688
3721
|
"id": "D3-OTP",
|
package/data/rfc-references.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_meta": {
|
|
3
3
|
"schema_version": "1.0.0",
|
|
4
|
-
"last_updated": "2026-05
|
|
4
|
+
"last_updated": "2026-08-05",
|
|
5
5
|
"note": "IETF RFCs and Internet-Drafts that exceptd skills depend on. RFCs are the layer beneath compliance frameworks: a control like 'TLS 1.3 required' implicitly references RFC 8446; a 'use strong KEM' control depends on whatever draft-ietf-tls-ecdhe-mlkem settles into. Frameworks lag RFCs; RFCs lag attacker innovation. This catalog tracks both kinds of lag.",
|
|
6
6
|
"status_values": [
|
|
7
7
|
"Internet Standard",
|
|
@@ -1337,12 +1337,15 @@
|
|
|
1337
1337
|
"status": "Informational",
|
|
1338
1338
|
"tracker": "https://datatracker.ietf.org/doc/draft-ietf-tls-hybrid-design/",
|
|
1339
1339
|
"relevance": "General-purpose hybrid-KEM design that the ecdhe-mlkem draft instantiates. Operators evaluating the migration story should read both.",
|
|
1340
|
-
"lag_notes": "
|
|
1340
|
+
"lag_notes": "Published as RFC 9954 (Informational, July 2026) — cite RFC-9954 rather than this draft for the hybrid construction. Retained so existing references resolve. Never status-synchronized with draft-ietf-tls-ecdhe-mlkem, which remains an active Standards-Track draft.",
|
|
1341
1341
|
"skills_referencing": [
|
|
1342
1342
|
"pqc-first"
|
|
1343
1343
|
],
|
|
1344
|
-
"last_verified": "2026-05
|
|
1345
|
-
"abstract": "IETF Internet-Draft (TLS WG) — design rationale and security analysis for hybrid post-quantum + classical TLS 1.3 handshakes. Defines the wire format, key-derivation chain, and downgrade-resistance properties for hybrid key-exchange. Cited by RFC 9763 (ML-KEM in TLS 1.3) + RFC 9764 (ML-DSA in TLS 1.3) as the architectural foundation."
|
|
1344
|
+
"last_verified": "2026-08-05",
|
|
1345
|
+
"abstract": "IETF Internet-Draft (TLS WG) — design rationale and security analysis for hybrid post-quantum + classical TLS 1.3 handshakes. Defines the wire format, key-derivation chain, and downgrade-resistance properties for hybrid key-exchange. Cited by RFC 9763 (ML-KEM in TLS 1.3) + RFC 9764 (ML-DSA in TLS 1.3) as the architectural foundation.",
|
|
1346
|
+
"replaced_by": [
|
|
1347
|
+
"RFC-9954"
|
|
1348
|
+
]
|
|
1346
1349
|
},
|
|
1347
1350
|
"ISO-29147": {
|
|
1348
1351
|
"number": null,
|
|
@@ -291829,5 +291832,21 @@
|
|
|
291829
291832
|
"last_verified": "2026-05-27",
|
|
291830
291833
|
"_auto_imported": true,
|
|
291831
291834
|
"_intake_method": "ietf-rfc-index"
|
|
291835
|
+
},
|
|
291836
|
+
"RFC-9954": {
|
|
291837
|
+
"number": 9954,
|
|
291838
|
+
"title": "Hybrid Key Exchange in TLS 1.3",
|
|
291839
|
+
"status": "Informational",
|
|
291840
|
+
"published": "2026-07",
|
|
291841
|
+
"errata_count": 0,
|
|
291842
|
+
"tracker": "https://www.rfc-editor.org/info/rfc9954",
|
|
291843
|
+
"relevance": "Publishes the concatenation-based hybrid key-exchange construction for TLS 1.3 that the PQC migration story depends on. Gives operators a citable standard for X25519MLKEM768 rather than a moving draft, which matters for a control an auditor has to verify.",
|
|
291844
|
+
"lag_notes": "Informational, not Standards Track — it specifies the construction, not a mandate. No compliance framework requires it (NIST 800-53 SC-13, ISO 27001:2022 A.8.24, PCI DSS 4.0 4.2.1 and NIS2 Art. 21 name no IETF profile), and CNSA 2.0 sets a 2030 deadline without pinning one. Supersedes draft-ietf-tls-hybrid-design; draft-ietf-tls-ecdhe-mlkem remains a separate Standards-Track draft and is NOT covered by this RFC.",
|
|
291845
|
+
"skills_referencing": [
|
|
291846
|
+
"pqc-first",
|
|
291847
|
+
"security-maturity-tiers"
|
|
291848
|
+
],
|
|
291849
|
+
"last_verified": "2026-08-05",
|
|
291850
|
+
"abstract": "Defines hybrid key exchange for TLS 1.3 — negotiating multiple key-exchange algorithms as a single named group and concatenating their shared secrets, so the session stays secure while at least one component algorithm is unbroken. The construction underpinning X25519MLKEM768 and the harvest-now-decrypt-later defence."
|
|
291832
291851
|
}
|
|
291833
291852
|
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* lib/currency-severity.js
|
|
5
|
+
*
|
|
6
|
+
* Pure function used by the `exceptd doctor` verb to turn a currency report
|
|
7
|
+
* into a health verdict.
|
|
8
|
+
*
|
|
9
|
+
* The scoring model in orchestrator/pipeline.js grades every skill on four
|
|
10
|
+
* labels — current (score >= 90), acceptable (70-89), stale (50-69),
|
|
11
|
+
* critical_stale (< 50) — and raises `action_required` only below 70. The
|
|
12
|
+
* pre-extraction predicate in the doctor ignored that ladder and failed on
|
|
13
|
+
* `currency_label !== "current"`, which folded the acceptable tier in with
|
|
14
|
+
* genuine staleness.
|
|
15
|
+
*
|
|
16
|
+
* That made the health check a scheduled failure rather than a signal: a
|
|
17
|
+
* skill's score drops from 90 to 80 the day it crosses 90 days since
|
|
18
|
+
* `last_threat_review`, so any skill will turn `doctor` red on a fixed
|
|
19
|
+
* cadence with no code change and nothing actually wrong.
|
|
20
|
+
*
|
|
21
|
+
* The tiers now map to severity the way the model defines them:
|
|
22
|
+
*
|
|
23
|
+
* current → healthy, no entry in either bucket
|
|
24
|
+
* acceptable (drifting) → severity:"warn", ok:true, exit 0
|
|
25
|
+
* stale / critical_stale → ok:false (error), exit 1
|
|
26
|
+
*
|
|
27
|
+
* `stale_skills` keeps its original meaning — every skill that is not
|
|
28
|
+
* `current` — so an existing consumer reading it still sees the full picture.
|
|
29
|
+
* `drifting_skills` and `action_required_skills` split that list along the
|
|
30
|
+
* boundary the exit code now respects.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @param {object[]} report currency_report rows from currencyCheck()
|
|
35
|
+
* @param {boolean} actionRequired the report-level action_required flag
|
|
36
|
+
* @returns {{ok: boolean, severity: string|null, stale: object[], drifting: object[], actionable: object[], critical: object[]}}
|
|
37
|
+
*/
|
|
38
|
+
function classifyCurrency(report, actionRequired) {
|
|
39
|
+
const rows = Array.isArray(report) ? report.filter(r => r && typeof r === "object") : [];
|
|
40
|
+
|
|
41
|
+
const stale = rows.filter(s => s.action_required || s.currency_label !== "current");
|
|
42
|
+
const drifting = rows.filter(s => !s.action_required && s.currency_label !== "current");
|
|
43
|
+
const actionable = rows.filter(s => s.action_required);
|
|
44
|
+
const critical = rows.filter(s => s.currency_score !== undefined && s.currency_score < 50);
|
|
45
|
+
|
|
46
|
+
// The report-level flag is honored even when no row carries action_required,
|
|
47
|
+
// so an upstream that raises the flag some other way still fails closed.
|
|
48
|
+
const ok = actionable.length === 0 && !actionRequired;
|
|
49
|
+
|
|
50
|
+
return {
|
|
51
|
+
ok,
|
|
52
|
+
severity: ok && drifting.length > 0 ? "warn" : null,
|
|
53
|
+
stale,
|
|
54
|
+
drifting,
|
|
55
|
+
actionable,
|
|
56
|
+
critical,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
module.exports = { classifyCurrency };
|