@blamejs/exceptd-skills 0.12.6 → 0.12.8

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.
Files changed (65) hide show
  1. package/AGENTS.md +14 -0
  2. package/CHANGELOG.md +97 -0
  3. package/bin/exceptd.js +189 -52
  4. package/data/_indexes/_meta.json +37 -37
  5. package/data/_indexes/activity-feed.json +26 -26
  6. package/data/_indexes/catalog-summaries.json +8 -8
  7. package/data/_indexes/chains.json +238 -0
  8. package/data/_indexes/frequency.json +63 -5
  9. package/data/_indexes/jurisdiction-map.json +13 -3
  10. package/data/_indexes/section-offsets.json +881 -845
  11. package/data/_indexes/summary-cards.json +2 -2
  12. package/data/_indexes/token-budget.json +145 -125
  13. package/data/atlas-ttps.json +189 -1
  14. package/data/cwe-catalog.json +290 -1
  15. package/data/d3fend-catalog.json +163 -1
  16. package/data/framework-control-gaps.json +243 -0
  17. package/data/playbooks/containers.json +23 -5
  18. package/data/playbooks/cred-stores.json +9 -9
  19. package/data/playbooks/crypto.json +8 -8
  20. package/data/playbooks/hardening.json +46 -10
  21. package/data/playbooks/library-author.json +16 -20
  22. package/data/playbooks/mcp.json +64 -1
  23. package/data/playbooks/runtime.json +7 -7
  24. package/data/playbooks/sbom.json +11 -11
  25. package/data/playbooks/secrets.json +4 -4
  26. package/data/rfc-references.json +144 -0
  27. package/lib/refresh-external.js +25 -5
  28. package/lib/schemas/skill-frontmatter.schema.json +2 -2
  29. package/manifest-snapshot.json +1 -1
  30. package/manifest.json +67 -67
  31. package/package.json +2 -1
  32. package/sbom.cdx.json +6 -6
  33. package/scripts/check-sbom-currency.js +87 -0
  34. package/scripts/check-test-coverage.README.md +148 -0
  35. package/scripts/check-test-coverage.js +455 -0
  36. package/scripts/hooks/pre-commit.sh +19 -0
  37. package/scripts/predeploy.js +16 -30
  38. package/skills/age-gates-child-safety/skill.md +3 -0
  39. package/skills/ai-attack-surface/skill.md +4 -1
  40. package/skills/ai-c2-detection/skill.md +6 -1
  41. package/skills/ai-risk-management/skill.md +3 -0
  42. package/skills/api-security/skill.md +3 -0
  43. package/skills/attack-surface-pentest/skill.md +3 -0
  44. package/skills/cloud-security/skill.md +3 -0
  45. package/skills/container-runtime-security/skill.md +3 -0
  46. package/skills/coordinated-vuln-disclosure/skill.md +8 -1
  47. package/skills/defensive-countermeasure-mapping/skill.md +1 -1
  48. package/skills/dlp-gap-analysis/skill.md +3 -0
  49. package/skills/email-security-anti-phishing/skill.md +9 -1
  50. package/skills/identity-assurance/skill.md +6 -1
  51. package/skills/incident-response-playbook/skill.md +8 -2
  52. package/skills/kernel-lpe-triage/skill.md +24 -4
  53. package/skills/mcp-agent-trust/skill.md +4 -1
  54. package/skills/mlops-security/skill.md +3 -0
  55. package/skills/ot-ics-security/skill.md +3 -0
  56. package/skills/rag-pipeline-security/skill.md +3 -0
  57. package/skills/sector-energy/skill.md +3 -0
  58. package/skills/sector-federal-government/skill.md +3 -0
  59. package/skills/sector-financial/skill.md +3 -0
  60. package/skills/sector-healthcare/skill.md +3 -0
  61. package/skills/security-maturity-tiers/skill.md +19 -1
  62. package/skills/skill-update-loop/skill.md +32 -0
  63. package/skills/supply-chain-integrity/skill.md +3 -0
  64. package/skills/threat-modeling-methodology/skill.md +3 -0
  65. package/skills/webapp-security/skill.md +3 -0
@@ -3,7 +3,7 @@
3
3
  "schema_version": "1.0.0",
4
4
  "atlas_version": "5.1.0",
5
5
  "atlas_release_date": "2025-11-01",
6
- "last_updated": "2026-05-01",
6
+ "last_updated": "2026-05-13",
7
7
  "source": "https://atlas.mitre.org",
8
8
  "note": "AI-relevant ATLAS v5.1.0 TTPs with framework_gap field. framework_gap: no framework has a control that addresses this TTP.",
9
9
  "tlp": "CLEAR",
@@ -278,5 +278,193 @@
278
278
  "ai-c2-detection",
279
279
  "ai-attack-surface"
280
280
  ]
281
+ },
282
+ "AML.T0024": {
283
+ "id": "AML.T0024",
284
+ "name": "Exfiltration via ML Inference API",
285
+ "tactic": "Exfiltration",
286
+ "description": "Adversary uses an ML inference API as the exfiltration channel for stolen data — embedding sensitive content in prompts, retrieval queries, or function-call arguments and reconstructing it from responses, logs, or training feedback. Distinguished from classical exfiltration by the channel being a categorically-trusted AI endpoint that egress controls do not flag.",
287
+ "subtechniques": [
288
+ "AML.T0024.000 — Prompt-as-Exfil (embed secret in user-facing prompt to public LLM)",
289
+ "AML.T0024.001 — Retrieval-as-Exfil (poisoned RAG corpus reads attacker-controlled documents that include exfil instructions)",
290
+ "AML.T0024.002 — Tool-Call-as-Exfil (MCP tool argument or function-call parameter carries the payload)"
291
+ ],
292
+ "real_world_instances": [
293
+ "RAG exfiltration: attacker-injected document instructs the model to summarize org secrets into a follow-up query that hits an external endpoint",
294
+ "Coding-assistant exfil: AI completion suggestions carry repository secrets in trailing comments that the developer accepts without scrutiny"
295
+ ],
296
+ "framework_gap": true,
297
+ "framework_gap_detail": "DLP controls (PCI-DSS-v4-A1, NIST-800-53-SC-7) inspect HTTP egress at the network boundary; AI inference traffic is categorically allowed and rarely DLP-classified. No framework requires content classification on the prompt+completion stream. SI-12 information handling does not contemplate the AI-as-side-channel case.",
298
+ "controls_that_partially_help": [
299
+ "NIST-800-53-SC-7",
300
+ "NIST-800-53-SI-4",
301
+ "ISO-27001-2022-A.8.12"
302
+ ],
303
+ "controls_that_dont_help": [
304
+ "NIST-800-53-SC-13",
305
+ "PCI-DSS-v4-A1"
306
+ ],
307
+ "detection": "Content-aware DLP applied to outbound AI prompts and tool arguments; per-prompt secret-pattern scan before egress; behavioral baseline of typical prompt entropy + length per user; alert on unusual completion-response sizes correlated with sensitive-file reads",
308
+ "exceptd_skills": [
309
+ "dlp-gap-analysis",
310
+ "rag-pipeline-security",
311
+ "ai-attack-surface"
312
+ ]
313
+ },
314
+ "AML.T0044": {
315
+ "id": "AML.T0044",
316
+ "name": "Full ML Model Access",
317
+ "tactic": "Collection",
318
+ "description": "Adversary obtains complete read access to a deployed ML model — weights, architecture, tokenizer, training-data fingerprints — enabling offline adversarial-example crafting, distillation into a smaller offensive model, or extraction of memorized training data containing sensitive content.",
319
+ "subtechniques": [
320
+ "AML.T0044.000 — Model File Theft (read access to weights on disk / object storage)",
321
+ "AML.T0044.001 — Model Extraction via Query (reconstruct equivalent model from API responses)",
322
+ "AML.T0044.002 — Training Pipeline Compromise (snapshot weights mid-training)"
323
+ ],
324
+ "real_world_instances": [
325
+ "Cloud-bucket misconfigurations exposing fine-tuned model weights",
326
+ "Production query-budget abuse for model-distillation attacks against commercial LLM APIs"
327
+ ],
328
+ "framework_gap": true,
329
+ "framework_gap_detail": "No framework treats trained model weights as a regulated data class with specific protection requirements. AC-6 least privilege does not contemplate model-file read scope. SC-28 protection of information at rest covers data at rest categorically but does not require per-model-artifact key isolation. No framework requires distillation-resistance testing.",
330
+ "controls_that_partially_help": [
331
+ "NIST-800-53-AC-6",
332
+ "NIST-800-53-SC-28",
333
+ "ISO-27001-2022-A.8.3"
334
+ ],
335
+ "controls_that_dont_help": [
336
+ "NIST-800-53-CM-7"
337
+ ],
338
+ "detection": "Object-storage access audit on model artifact paths; query-budget anomaly detection (high-volume systematic queries from single identity); model-watermark verification on extracted artifacts",
339
+ "exceptd_skills": [
340
+ "dlp-gap-analysis",
341
+ "ai-attack-surface",
342
+ "ai-risk-management"
343
+ ]
344
+ },
345
+ "AML.T0048": {
346
+ "id": "AML.T0048",
347
+ "name": "Erode ML Model Integrity",
348
+ "tactic": "Impact",
349
+ "description": "Adversary causes gradual degradation of ML model output quality through sustained low-rate adversarial inputs, feedback-loop poisoning, RAG-corpus drift, or systematic query patterns that bias the model's behavior over time. Distinguished from acute poisoning (T0020) by the operational tempo: erosion is slow enough to evade output-monitoring thresholds while accumulating into a meaningful integrity loss.",
350
+ "subtechniques": [
351
+ "AML.T0048.000 — Feedback-Loop Erosion (poison reinforcement signal at low rate)",
352
+ "AML.T0048.001 — Corpus-Drift Erosion (continuously inject low-quality documents into RAG retrieval set)",
353
+ "AML.T0048.002 — Query-Pattern Erosion (systematic prompts that shift output distribution)"
354
+ ],
355
+ "real_world_instances": [
356
+ "CVE-2026-45321 — RAG/agentic-coding corpus erosion enabling staged supply-chain attacks",
357
+ "Adversarial query campaigns against production recommendation systems documented in 2025-2026 incident reports"
358
+ ],
359
+ "framework_gap": true,
360
+ "framework_gap_detail": "Continuous-integrity monitoring on ML output distributions is not a framework control. SI-7 software/firmware integrity addresses code artifacts not model behavior. No framework requires drift detection against a known-good model baseline. NIST AI RMF MEASURE-2.7 recommends but does not require continuous adversarial robustness assessment.",
361
+ "controls_that_partially_help": [
362
+ "NIST-800-53-SI-7",
363
+ "NIST-AI-RMF-MEASURE-2.7"
364
+ ],
365
+ "controls_that_dont_help": [
366
+ "ISO-27001-2022-A.8.28",
367
+ "SOC2-CC7"
368
+ ],
369
+ "detection": "Statistical drift detection on output distribution; periodic golden-test-set regression scoring; user-feedback anomaly mining for unusual complaint clusters",
370
+ "exceptd_skills": [
371
+ "ai-attack-surface",
372
+ "rag-pipeline-security",
373
+ "ai-risk-management"
374
+ ]
375
+ },
376
+ "AML.T0053": {
377
+ "id": "AML.T0053",
378
+ "name": "LLM Plugin Compromise",
379
+ "tactic": "Execution",
380
+ "description": "Adversary compromises an LLM plugin / tool / MCP server registered with a host AI assistant, gaining the ability to execute attacker-controlled actions in the host's authorization context whenever the model invokes the plugin. Distinguished from supply-chain compromise (T0010) by targeting the runtime trust relationship between an installed plugin and the host AI rather than the install pathway.",
381
+ "subtechniques": [
382
+ "AML.T0053.000 — Malicious Plugin Publish (publish under typosquat or compromised account)",
383
+ "AML.T0053.001 — Plugin Update Backdoor (push backdoor in a version update after publisher trust is established)",
384
+ "AML.T0053.002 — Plugin-to-Plugin Pivot (compromised plugin instructs the model to invoke another plugin with attacker-chosen arguments)"
385
+ ],
386
+ "real_world_instances": [
387
+ "CVE-2026-30615 — Windsurf MCP zero-interaction RCE via plugin trust",
388
+ "Public MCP-registry typosquat campaigns documented 2025-2026"
389
+ ],
390
+ "framework_gap": true,
391
+ "framework_gap_detail": "No framework has a plugin-trust control specifically for LLM/agent tool registries. SA-12 supply chain protections do not contemplate model-invoked plugin runtimes. AC-3 access enforcement does not address the model-as-authorization-proxy pattern where the user's identity authenticates the model but the model chooses which plugin to invoke and with what arguments.",
392
+ "controls_that_partially_help": [
393
+ "NIST-800-53-SA-12",
394
+ "NIST-800-53-AC-3",
395
+ "ISO-27001-2022-A.8.30"
396
+ ],
397
+ "controls_that_dont_help": [
398
+ "NIST-800-53-SI-3"
399
+ ],
400
+ "detection": "Plugin-manifest signature verification; plugin-call audit trail (model decision + plugin name + arguments + result); plugin reputation scoring; alert on newly-installed plugin invocations during the first 72h",
401
+ "exceptd_skills": [
402
+ "mcp-agent-trust",
403
+ "ai-attack-surface"
404
+ ]
405
+ },
406
+ "AML.T0055": {
407
+ "id": "AML.T0055",
408
+ "name": "Unsecured Credentials",
409
+ "tactic": "Credential Access",
410
+ "description": "Adversary obtains credentials — API keys, OAuth tokens, model-provider secrets, MCP server tokens, fine-tuning service credentials — that were stored in cleartext, exposed in logs, embedded in code, or persisted in checked-in configuration. Within the AI/ML scope this technique covers credentials specific to the model-development supply chain (HuggingFace tokens, OpenAI API keys, anthropic auth, fine-tuning service keys, vector-DB credentials).",
411
+ "subtechniques": [
412
+ "AML.T0055.000 — Credentials in Repository (.env, source, notebook output cells)",
413
+ "AML.T0055.001 — Credentials in Logs (training logs, inference logs, MCP debug output)",
414
+ "AML.T0055.002 — Credentials in Model Artifact Metadata (HuggingFace model card, ONNX metadata)"
415
+ ],
416
+ "real_world_instances": [
417
+ "Public-repository scans surface thousands of leaked OpenAI/Anthropic/HuggingFace tokens monthly",
418
+ "Notebook cell-output exposure of API keys in published Kaggle/Colab artifacts"
419
+ ],
420
+ "framework_gap": true,
421
+ "framework_gap_detail": "IA-5 authenticator management does not contemplate AI-service credential classes specifically. No framework requires repository-time secret scanning to enforce AI-provider credentials. Most regulatory frameworks treat all API keys identically; the AI-provider key uniquely conveys budget + model-access + identity-impersonation when leaked.",
422
+ "controls_that_partially_help": [
423
+ "NIST-800-53-IA-5",
424
+ "NIST-800-53-SC-12",
425
+ "ISO-27001-2022-A.5.16"
426
+ ],
427
+ "controls_that_dont_help": [
428
+ "NIST-800-53-AC-2"
429
+ ],
430
+ "detection": "Pre-commit and CI-time secret scanning with AI-provider key signatures; notebook-output sanitization; log-aggregation regex on AI provider key shapes; vendor-side anomaly detection on leaked-key usage patterns",
431
+ "exceptd_skills": [
432
+ "dlp-gap-analysis",
433
+ "mcp-agent-trust",
434
+ "rag-pipeline-security"
435
+ ]
436
+ },
437
+ "AML.T0057": {
438
+ "id": "AML.T0057",
439
+ "name": "LLM Data Leakage",
440
+ "tactic": "Exfiltration",
441
+ "description": "Adversary causes an LLM to disclose information from its training data, retrieval corpus, system prompt, or conversation context that should not have been accessible. Includes training-data memorization recovery, system-prompt extraction, retrieved-document leakage to the wrong tenant, and cross-conversation context bleed.",
442
+ "subtechniques": [
443
+ "AML.T0057.000 — Memorization Recovery (extract memorized training records via crafted prompts)",
444
+ "AML.T0057.001 — System Prompt Leakage (induce the model to reveal its hidden instructions)",
445
+ "AML.T0057.002 — Retrieval Tenant Bleed (RAG returns documents from a different tenant)",
446
+ "AML.T0057.003 — Cross-Conversation Bleed (KV-cache or session-state confusion across requests)"
447
+ ],
448
+ "real_world_instances": [
449
+ "Production AI assistant prompt-extraction incidents 2025-2026",
450
+ "Public LLM training-data memorization studies (NYT v. OpenAI, Carlini et al. extraction works)"
451
+ ],
452
+ "framework_gap": true,
453
+ "framework_gap_detail": "No framework treats model output as a confidentiality boundary. SC-4 information in shared resources addresses traditional shared compute, not RAG retrieval namespaces. No framework requires per-tenant retrieval-context isolation testing. Privacy-impact assessments treat training data as transformed-and-anonymous, contradicting the memorization-recovery reality.",
454
+ "controls_that_partially_help": [
455
+ "NIST-800-53-SC-4",
456
+ "NIST-800-53-AC-3",
457
+ "ISO-27001-2022-A.5.34"
458
+ ],
459
+ "controls_that_dont_help": [
460
+ "ISO-27001-2022-A.8.28",
461
+ "NIST-800-53-SI-12"
462
+ ],
463
+ "detection": "Differential-privacy-style output auditing; canary insertions in training data + retrieval corpus with leak-detection on outputs; tenant-tag verification on RAG-retrieved documents; system-prompt-leak red team during release",
464
+ "exceptd_skills": [
465
+ "rag-pipeline-security",
466
+ "ai-attack-surface",
467
+ "dlp-gap-analysis"
468
+ ]
281
469
  }
282
470
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "_meta": {
3
3
  "schema_version": "1.0.0",
4
- "last_updated": "2026-05-11",
4
+ "last_updated": "2026-05-13",
5
5
  "cwe_version": "4.16",
6
6
  "cwe_version_release_date": "2024-11-19",
7
7
  "source": "https://cwe.mitre.org",
@@ -1013,5 +1013,294 @@
1013
1013
  "real_requirement": "Secure-by-default configurations shipped; insecure modes require explicit opt-in with a documented risk acknowledgment; for MCP servers, default to no-network, no-fs, requiring explicit capability grants.",
1014
1014
  "lag_notes": "CM-6 baseline configuration is set per-deployment; CWE-1188 is about the shipped default. Frameworks rarely audit product defaults — they audit organizational deployment.",
1015
1015
  "last_verified": "2026-05-11"
1016
+ },
1017
+ "CWE-250": {
1018
+ "id": "CWE-250",
1019
+ "name": "Execution with Unnecessary Privileges",
1020
+ "abstraction": "Class",
1021
+ "category": "Privilege Management",
1022
+ "description": "The product performs an operation at a privilege level higher than the minimum required, expanding the consequences of any vulnerability in that code path. Common roots: long-lived root daemons, container processes running as UID 0 with no need, sudo-without-NOPASSWD prompt fatigue, setuid binaries with feature-creep.",
1023
+ "top_25_rank_2024": null,
1024
+ "top_25_rank_2025": null,
1025
+ "view_memberships": ["CWE-1000"],
1026
+ "related_attack_patterns_capec": ["CAPEC-104", "CAPEC-470"],
1027
+ "skills_referencing": ["container-runtime-security", "kernel-lpe-triage", "ot-ics-security"],
1028
+ "evidence_cves": [],
1029
+ "framework_controls_partially_addressing": ["NIST-800-53-AC-6", "ISO-27001-2022-A.8.2", "PCI-DSS-v4-7.2"],
1030
+ "real_requirement": "Per-syscall capability dropping enforced at process start; no long-lived root daemons in modern container runtimes; sudo audit trail with rate-limit on privileged invocations; setuid binaries replaced with capability(7) bits.",
1031
+ "lag_notes": "AC-6 least privilege is a paper compliance target — frameworks accept role-based attestation. CWE-250 requires runtime evidence of capability minimization, which compliance audits rarely sample.",
1032
+ "last_verified": "2026-05-13"
1033
+ },
1034
+ "CWE-256": {
1035
+ "id": "CWE-256",
1036
+ "name": "Plaintext Storage of a Password",
1037
+ "abstraction": "Variant",
1038
+ "category": "Credentials Management",
1039
+ "description": "The product stores a password in cleartext on disk, in a config file, or in a database column without cryptographic hashing or encryption, exposing it on any read access to the storage medium.",
1040
+ "top_25_rank_2024": null,
1041
+ "top_25_rank_2025": null,
1042
+ "view_memberships": ["CWE-1000", "CWE-1003"],
1043
+ "related_attack_patterns_capec": ["CAPEC-37"],
1044
+ "skills_referencing": ["cred-stores", "ai-api", "dlp-gap-analysis"],
1045
+ "evidence_cves": [],
1046
+ "framework_controls_partially_addressing": ["NIST-800-53-IA-5(1)", "ISO-27001-2022-A.5.16", "PCI-DSS-v4-8.3"],
1047
+ "real_requirement": "Passwords hashed at rest with a memory-hard KDF (Argon2id, scrypt); legacy databases with cleartext passwords forcibly rotated on next-login; no service-account passwords in config files — secrets manager mandatory.",
1048
+ "lag_notes": "IA-5(1) addresses authenticator storage but compliance attestation often accepts 'encrypted at rest' for the storage volume, missing that the password value itself must be hashed not encrypted. PCI 8.3 specifies strong cryptography but rarely audits the KDF choice.",
1049
+ "last_verified": "2026-05-13"
1050
+ },
1051
+ "CWE-284": {
1052
+ "id": "CWE-284",
1053
+ "name": "Improper Access Control",
1054
+ "abstraction": "Pillar",
1055
+ "category": "Access Control",
1056
+ "description": "The product does not restrict or incorrectly restricts access to a resource from an unauthorized actor. CWE-284 is the pillar — most authz/authn defects are specializations of this class.",
1057
+ "top_25_rank_2024": null,
1058
+ "top_25_rank_2025": null,
1059
+ "view_memberships": ["CWE-1000"],
1060
+ "related_attack_patterns_capec": ["CAPEC-1", "CAPEC-19"],
1061
+ "skills_referencing": ["container-runtime-security", "identity-assurance", "webapp-security"],
1062
+ "evidence_cves": [],
1063
+ "framework_controls_partially_addressing": ["NIST-800-53-AC-3", "ISO-27001-2022-A.5.15", "SOC2-CC6"],
1064
+ "real_requirement": "Authorization decisions enforced at the resource server, never client-side; deny-by-default policy with explicit allow; per-request authz check including for authenticated identities.",
1065
+ "lag_notes": "AC-3 is the policy intent; compliance accepts the existence of an authorization framework. CWE-284 specifically calls out improper enforcement — the framework's existence does not imply the enforcement is correct.",
1066
+ "last_verified": "2026-05-13"
1067
+ },
1068
+ "CWE-310": {
1069
+ "id": "CWE-310",
1070
+ "name": "Cryptographic Issues",
1071
+ "abstraction": "Category",
1072
+ "category": "Cryptography",
1073
+ "description": "Top-level category covering cryptographic weaknesses — weak algorithms, insufficient key lengths, predictable IVs, missing integrity, broken random number generation. The category is retained as an umbrella for CWE-326, -327, -328, -329, -330 et al.",
1074
+ "top_25_rank_2024": null,
1075
+ "top_25_rank_2025": null,
1076
+ "view_memberships": ["CWE-1000"],
1077
+ "related_attack_patterns_capec": ["CAPEC-97"],
1078
+ "skills_referencing": ["pqc-first", "crypto-codebase"],
1079
+ "evidence_cves": [],
1080
+ "framework_controls_partially_addressing": ["NIST-800-53-SC-13", "ISO-27001-2022-A.8.24", "FIPS-140-3"],
1081
+ "real_requirement": "Cryptographic agility — algorithm choice expressed as policy, not hardcoded; periodic crypto inventory; PQC migration roadmap with hybrid signature support.",
1082
+ "lag_notes": "SC-13 addresses approved cryptographic mechanisms but lags behind quantum-resistance reality. FIPS-140-3 approved list omits PQC primitives until NIST PQC standardization (FIPS 203/204/205) fully promulgates.",
1083
+ "last_verified": "2026-05-13"
1084
+ },
1085
+ "CWE-312": {
1086
+ "id": "CWE-312",
1087
+ "name": "Cleartext Storage of Sensitive Information",
1088
+ "abstraction": "Variant",
1089
+ "category": "Data Protection",
1090
+ "description": "The product stores sensitive information in cleartext within a resource that may be accessible to another control sphere — disk, log file, browser storage, environment variable that's printable by ps(1), Kubernetes ConfigMap when a Secret was the right primitive.",
1091
+ "top_25_rank_2024": null,
1092
+ "top_25_rank_2025": null,
1093
+ "view_memberships": ["CWE-1000", "CWE-1003"],
1094
+ "related_attack_patterns_capec": ["CAPEC-37"],
1095
+ "skills_referencing": ["secrets", "ai-api", "dlp-gap-analysis"],
1096
+ "evidence_cves": [],
1097
+ "framework_controls_partially_addressing": ["NIST-800-53-SC-28", "ISO-27001-2022-A.8.24", "PCI-DSS-v4-3.5"],
1098
+ "real_requirement": "Encryption-at-rest for all sensitive fields with per-tenant key isolation; structured logging schemas that mark sensitive fields and redact at emit time; Kubernetes Secrets with KMS-backed encryption-at-rest, not ConfigMaps.",
1099
+ "lag_notes": "SC-28 'protection at rest' is typically satisfied by full-disk encryption — which does not protect against a logged-in process reading the cleartext. PCI 3.5 requires field-level cryptography but auditors often accept disk-level controls.",
1100
+ "last_verified": "2026-05-13"
1101
+ },
1102
+ "CWE-326": {
1103
+ "id": "CWE-326",
1104
+ "name": "Inadequate Encryption Strength",
1105
+ "abstraction": "Class",
1106
+ "category": "Cryptography",
1107
+ "description": "The product stores or transmits sensitive data using an encryption scheme that is too weak — short key length, deprecated algorithm (DES, RC4, 3DES, MD5-MAC), parameter choices outside current safe ranges. Distinguished from CWE-327 (broken algorithm) by the strength dimension rather than algorithm choice.",
1108
+ "top_25_rank_2024": null,
1109
+ "top_25_rank_2025": null,
1110
+ "view_memberships": ["CWE-1000", "CWE-310"],
1111
+ "related_attack_patterns_capec": ["CAPEC-20", "CAPEC-97"],
1112
+ "skills_referencing": ["pqc-first", "crypto-codebase", "crypto"],
1113
+ "evidence_cves": [],
1114
+ "framework_controls_partially_addressing": ["NIST-800-53-SC-13", "NIST-SP-800-131A", "ISO-27001-2022-A.8.24"],
1115
+ "real_requirement": "AES-256 minimum for symmetric; RSA-3072 or ECC P-384 minimum for asymmetric pre-PQC migration; hybrid PQC (ML-KEM + ECDHE) for new TLS deployments; reject TLS handshakes below 1.2.",
1116
+ "lag_notes": "SP 800-131A defines algorithm transitions but vendor compliance attestations lag — many auditors still accept 'AES + RSA-2048' without questioning quantum-resistance roadmap.",
1117
+ "last_verified": "2026-05-13"
1118
+ },
1119
+ "CWE-328": {
1120
+ "id": "CWE-328",
1121
+ "name": "Use of Weak Hash",
1122
+ "abstraction": "Class",
1123
+ "category": "Cryptography",
1124
+ "description": "The product uses a cryptographic hash that produces output that no longer offers cryptographic guarantees — MD5, SHA-1 for collision resistance, unsalted SHA-256 for password verification. Includes hashes used for HMAC where the construction extends MAC lifetime past the underlying hash's safe horizon.",
1125
+ "top_25_rank_2024": null,
1126
+ "top_25_rank_2025": null,
1127
+ "view_memberships": ["CWE-1000", "CWE-310"],
1128
+ "related_attack_patterns_capec": ["CAPEC-97"],
1129
+ "skills_referencing": ["crypto-codebase", "pqc-first"],
1130
+ "evidence_cves": [],
1131
+ "framework_controls_partially_addressing": ["NIST-800-53-SC-13", "NIST-SP-800-131A"],
1132
+ "real_requirement": "SHA-256 minimum for integrity; SHA-384/SHA-512 for high-assurance; Argon2id/scrypt for password verification; HMAC-SHA-256 minimum for MAC.",
1133
+ "lag_notes": "SP 800-131A retired SHA-1 for digital signatures in 2013 but legacy MAC use in non-signature contexts continued in many codebases — frameworks rarely require active inventory.",
1134
+ "last_verified": "2026-05-13"
1135
+ },
1136
+ "CWE-329": {
1137
+ "id": "CWE-329",
1138
+ "name": "Generation of Predictable IV with CBC Mode",
1139
+ "abstraction": "Variant",
1140
+ "category": "Cryptography",
1141
+ "description": "The product generates an initialization vector (IV) for CBC-mode encryption that is predictable — counter-derived, low-entropy, zero, or reused. Predictable IV in CBC reveals plaintext patterns and breaks the IND-CPA security model.",
1142
+ "top_25_rank_2024": null,
1143
+ "top_25_rank_2025": null,
1144
+ "view_memberships": ["CWE-1000", "CWE-310"],
1145
+ "related_attack_patterns_capec": ["CAPEC-97"],
1146
+ "skills_referencing": ["crypto-codebase"],
1147
+ "evidence_cves": [],
1148
+ "framework_controls_partially_addressing": ["NIST-800-53-SC-13", "NIST-SP-800-38A"],
1149
+ "real_requirement": "Prefer AEAD modes (AES-GCM, ChaCha20-Poly1305) over CBC; if CBC is mandatory, IV from CSPRNG with no observable pattern; per-message IV uniqueness verified at encryption time.",
1150
+ "lag_notes": "SP 800-38A specifies IV requirements but auditing typically focuses on algorithm presence not IV-generation correctness. CBC misuse is a recurring source of cryptographic weakness in production codebases.",
1151
+ "last_verified": "2026-05-13"
1152
+ },
1153
+ "CWE-330": {
1154
+ "id": "CWE-330",
1155
+ "name": "Use of Insufficiently Random Values",
1156
+ "abstraction": "Class",
1157
+ "category": "Cryptography",
1158
+ "description": "The product uses values intended to be random but produced from a source that is not cryptographically secure — Math.random(), time-seeded PRNG, weak entropy source. Pillar weakness for CWE-331, -338, -339, -342.",
1159
+ "top_25_rank_2024": null,
1160
+ "top_25_rank_2025": null,
1161
+ "view_memberships": ["CWE-1000", "CWE-310"],
1162
+ "related_attack_patterns_capec": ["CAPEC-59", "CAPEC-485"],
1163
+ "skills_referencing": ["crypto-codebase"],
1164
+ "evidence_cves": [],
1165
+ "framework_controls_partially_addressing": ["NIST-800-53-SC-13", "NIST-SP-800-90A"],
1166
+ "real_requirement": "Use OS CSPRNG (getrandom(2) on Linux, BCryptGenRandom on Windows) for any security-relevant random; reject Math.random() / java.util.Random / rand() in security contexts via lint rules.",
1167
+ "lag_notes": "SP 800-90A specifies DRBG requirements at the algorithm level; codebase-level enforcement that a non-CSPRNG never reaches a security-critical path is absent from framework controls.",
1168
+ "last_verified": "2026-05-13"
1169
+ },
1170
+ "CWE-331": {
1171
+ "id": "CWE-331",
1172
+ "name": "Insufficient Entropy",
1173
+ "abstraction": "Class",
1174
+ "category": "Cryptography",
1175
+ "description": "The product uses an algorithm or scheme that produces insufficient entropy, leaving patterns or clusters of values more likely than others. Common in early-boot entropy starvation, VM clones, container snapshots, embedded devices with limited entropy sources.",
1176
+ "top_25_rank_2024": null,
1177
+ "top_25_rank_2025": null,
1178
+ "view_memberships": ["CWE-1000", "CWE-310", "CWE-330"],
1179
+ "related_attack_patterns_capec": ["CAPEC-59"],
1180
+ "skills_referencing": ["crypto-codebase"],
1181
+ "evidence_cves": [],
1182
+ "framework_controls_partially_addressing": ["NIST-800-53-SC-13", "NIST-SP-800-90B"],
1183
+ "real_requirement": "Entropy pool seeded before security-sensitive operations; getrandom(2) blocking call honored on Linux until entropy is initialized; container/VM image entropy reseed-on-boot.",
1184
+ "lag_notes": "SP 800-90B specifies entropy source requirements; supply chain attacks against entropy (e.g. predictable VM clones) are not addressed by any deployment-side framework control.",
1185
+ "last_verified": "2026-05-13"
1186
+ },
1187
+ "CWE-338": {
1188
+ "id": "CWE-338",
1189
+ "name": "Use of Cryptographically Weak Pseudo-Random Number Generator (PRNG)",
1190
+ "abstraction": "Variant",
1191
+ "category": "Cryptography",
1192
+ "description": "The product uses a non-cryptographic PRNG (linear congruential, Mersenne Twister, Math.random) in a security context where attacker prediction of subsequent values breaks the security property.",
1193
+ "top_25_rank_2024": null,
1194
+ "top_25_rank_2025": null,
1195
+ "view_memberships": ["CWE-1000", "CWE-310", "CWE-330"],
1196
+ "related_attack_patterns_capec": ["CAPEC-485"],
1197
+ "skills_referencing": ["crypto-codebase"],
1198
+ "evidence_cves": [],
1199
+ "framework_controls_partially_addressing": ["NIST-800-53-SC-13"],
1200
+ "real_requirement": "Linters that flag Math.random(), java.util.Random, rand() in security contexts; pin random-token generation to CSPRNG via type-level distinctions (e.g. SecureRandom in Java; secrets module in Python).",
1201
+ "lag_notes": "Framework controls reference 'cryptographic randomness' abstractly; static-analysis enforcement that a non-CSPRNG cannot reach a security-relevant code path is left to development teams.",
1202
+ "last_verified": "2026-05-13"
1203
+ },
1204
+ "CWE-353": {
1205
+ "id": "CWE-353",
1206
+ "name": "Missing Support for Integrity Check",
1207
+ "abstraction": "Base",
1208
+ "category": "Integrity",
1209
+ "description": "The product transmits or stores data without an integrity check, allowing modification in transit or at rest to go undetected. Common in custom binary protocols, log shippers without HMAC, package distribution without signatures.",
1210
+ "top_25_rank_2024": null,
1211
+ "top_25_rank_2025": null,
1212
+ "view_memberships": ["CWE-1000"],
1213
+ "related_attack_patterns_capec": ["CAPEC-75", "CAPEC-39"],
1214
+ "skills_referencing": ["library-author", "supply-chain-integrity"],
1215
+ "evidence_cves": [],
1216
+ "framework_controls_partially_addressing": ["NIST-800-53-SI-7", "NIST-800-53-SC-8(1)", "ISO-27001-2022-A.8.24"],
1217
+ "real_requirement": "All package distribution signed (Sigstore, in-toto, OpenPGP); HMAC on every internal RPC; SLSA L3+ provenance for shipped artifacts.",
1218
+ "lag_notes": "SI-7 covers software/firmware integrity; SLSA-style provenance is not a framework-mandated control. SC-8(1) addresses transmission integrity at the network layer, not application-layer message integrity.",
1219
+ "last_verified": "2026-05-13"
1220
+ },
1221
+ "CWE-426": {
1222
+ "id": "CWE-426",
1223
+ "name": "Untrusted Search Path",
1224
+ "abstraction": "Base",
1225
+ "category": "Privilege Management",
1226
+ "description": "The product searches for resources along a path that includes locations writable by an unprivileged actor, enabling privilege escalation or code-execution hijacks. Includes PATH-injection on setuid binaries, DLL search-path attacks, LD_LIBRARY_PATH abuse, Python sys.path injection.",
1227
+ "top_25_rank_2024": null,
1228
+ "top_25_rank_2025": null,
1229
+ "view_memberships": ["CWE-1000"],
1230
+ "related_attack_patterns_capec": ["CAPEC-38", "CAPEC-471"],
1231
+ "skills_referencing": ["kernel-lpe-triage", "hardening"],
1232
+ "evidence_cves": [],
1233
+ "framework_controls_partially_addressing": ["NIST-800-53-AC-6", "ISO-27001-2022-A.8.20"],
1234
+ "real_requirement": "Setuid binaries use absolute paths exclusively; secure_getenv() for PATH-derived lookups in libc-linked privileged binaries; Windows: SetDllDirectoryW with empty string; LSan-style search-path audit in CI.",
1235
+ "lag_notes": "AC-6 least privilege is the conceptual control; runtime evidence that no privileged binary reaches a writable-by-attacker location during search is rarely audited.",
1236
+ "last_verified": "2026-05-13"
1237
+ },
1238
+ "CWE-522": {
1239
+ "id": "CWE-522",
1240
+ "name": "Insufficiently Protected Credentials",
1241
+ "abstraction": "Class",
1242
+ "category": "Credentials Management",
1243
+ "description": "The product stores or transmits authentication credentials but uses insufficient protection — weak hashing, no encryption in transit, plaintext in logs, recoverable via password-reset enumeration. Pillar for several credential-handling weaknesses.",
1244
+ "top_25_rank_2024": null,
1245
+ "top_25_rank_2025": null,
1246
+ "view_memberships": ["CWE-1000", "CWE-1003"],
1247
+ "related_attack_patterns_capec": ["CAPEC-49", "CAPEC-555"],
1248
+ "skills_referencing": ["cred-stores", "ai-api", "identity-assurance"],
1249
+ "evidence_cves": [],
1250
+ "framework_controls_partially_addressing": ["NIST-800-53-IA-5", "ISO-27001-2022-A.5.16", "PCI-DSS-v4-8.3"],
1251
+ "real_requirement": "Argon2id/scrypt for password hashes; TLS 1.3 for credential transmission; structured logging that redacts credential fields; secret-scanning gates on commits; vendor credentials in secrets managers with rotation policy.",
1252
+ "lag_notes": "IA-5 authenticator management speaks to the lifecycle but rarely audits the actual storage cryptography. Credential leak in logs is the failure mode most often missed by compliance review.",
1253
+ "last_verified": "2026-05-13"
1254
+ },
1255
+ "CWE-759": {
1256
+ "id": "CWE-759",
1257
+ "name": "Use of a One-Way Hash without a Salt",
1258
+ "abstraction": "Variant",
1259
+ "category": "Cryptography",
1260
+ "description": "The product hashes a password or similar credential using a one-way hash without including a per-credential salt, enabling rainbow-table attacks against the resulting hash collection.",
1261
+ "top_25_rank_2024": null,
1262
+ "top_25_rank_2025": null,
1263
+ "view_memberships": ["CWE-1000", "CWE-310"],
1264
+ "related_attack_patterns_capec": ["CAPEC-55"],
1265
+ "skills_referencing": ["crypto-codebase"],
1266
+ "evidence_cves": [],
1267
+ "framework_controls_partially_addressing": ["NIST-800-53-IA-5(1)", "NIST-SP-800-63B"],
1268
+ "real_requirement": "Use Argon2id/scrypt for password hashing — salt is intrinsic to the construction; never store bare-hashed passwords; per-credential salts ≥ 128 bits.",
1269
+ "lag_notes": "SP 800-63B requires salted hashing for memorized secrets; codebase inventories rarely catch legacy unsalted hashes in long-lived tables. CWE-916 is the related insufficient-effort variant.",
1270
+ "last_verified": "2026-05-13"
1271
+ },
1272
+ "CWE-760": {
1273
+ "id": "CWE-760",
1274
+ "name": "Use of a One-Way Hash with a Predictable Salt",
1275
+ "abstraction": "Variant",
1276
+ "category": "Cryptography",
1277
+ "description": "The product hashes a password using a per-credential salt that is predictable (username-derived, timestamp-derived, counter), undermining the salt's defense against rainbow-table attacks.",
1278
+ "top_25_rank_2024": null,
1279
+ "top_25_rank_2025": null,
1280
+ "view_memberships": ["CWE-1000", "CWE-310"],
1281
+ "related_attack_patterns_capec": ["CAPEC-55"],
1282
+ "skills_referencing": ["crypto-codebase"],
1283
+ "evidence_cves": [],
1284
+ "framework_controls_partially_addressing": ["NIST-800-53-IA-5(1)", "NIST-SP-800-63B"],
1285
+ "real_requirement": "Salt generated from CSPRNG, ≥ 128 bits, stored alongside the hash; never derived from any user-controllable or deterministic input.",
1286
+ "lag_notes": "Compliance frameworks audit the presence of a salt; correctness of salt generation is rarely sampled.",
1287
+ "last_verified": "2026-05-13"
1288
+ },
1289
+ "CWE-916": {
1290
+ "id": "CWE-916",
1291
+ "name": "Use of Password Hash With Insufficient Computational Effort",
1292
+ "abstraction": "Variant",
1293
+ "category": "Cryptography",
1294
+ "description": "The product hashes a password with a fast cryptographic hash (MD5, SHA-1, single-pass SHA-256) where computational effort is not tuned to make offline cracking economically infeasible. Allows GPU-accelerated brute-force at scale.",
1295
+ "top_25_rank_2024": null,
1296
+ "top_25_rank_2025": null,
1297
+ "view_memberships": ["CWE-1000", "CWE-310"],
1298
+ "related_attack_patterns_capec": ["CAPEC-55", "CAPEC-49"],
1299
+ "skills_referencing": ["crypto-codebase", "cred-stores"],
1300
+ "evidence_cves": [],
1301
+ "framework_controls_partially_addressing": ["NIST-800-53-IA-5(1)", "NIST-SP-800-63B"],
1302
+ "real_requirement": "Argon2id (memory-hard, RFC 9106) with tuned m/t/p; scrypt as fallback; bcrypt with work factor ≥ 12 acceptable for legacy. PBKDF2 only with iteration count ≥ 600,000 (NIST SP 800-63B 2022 update).",
1303
+ "lag_notes": "SP 800-63B updated iteration guidance in 2022; many compliance attestations still cite the 2017 numbers. Argon2id is RFC-9106 (2021) but absent from FIPS-approved lists, creating policy friction in federal contexts.",
1304
+ "last_verified": "2026-05-13"
1016
1305
  }
1017
1306
  }