@blamejs/exceptd-skills 0.13.5 → 0.13.6

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/AGENTS.md CHANGED
@@ -228,6 +228,22 @@ Recently added (use the IDs in skill prose and operator briefings; full text in
228
228
  | `NEW-CTRL-053` | MCP-SERVER-CONFIG-ALLOWLIST | `CVE-2026-30623` (Anthropic MCP SDK stdio injection) | NIST AI RMF MEASURE 2.7, OWASP LLM Top 10 2025 LLM05 |
229
229
  | `NEW-CTRL-054` | BACKUP-TIER-NETWORK-ISOLATION | `CVE-2025-59389` (QNAP Hyper Data Protector preauth RCE) | ISO-27001-2022 A.8.13, NIS2 Art.21 business-continuity |
230
230
  | `NEW-CTRL-055` | SECURITY-TOOL-INTEGRITY-VERIFICATION | `CVE-2025-11837` (QNAP Malware Remover code-injection) | NIST-800-53 SI-3, ISO-27001-2022 A.8.7, PCI-DSS 4.0 §5.1 |
231
+ | `NEW-CTRL-056` | MOBILE-ENDPOINT-MDM-ENFORCED-KEV-SLA | `CVE-2025-14174` / `CVE-2025-43529` / `CVE-2025-24201` / `CVE-2025-43300` | NIST-800-53 SI-2, ISO-27001-2022 A.8.8, CIS Benchmarks mobile-OS profiles |
232
+ | `NEW-CTRL-057` | BROWSER-MANAGED-UPDATE-NO-DEFERRAL | `CVE-2025-10585` / `CVE-2025-14174` / `CVE-2025-43529` / `CVE-2025-4919` | NIST-800-53 SI-2, CISA KEV SLA, vendor-channel security-release contracts |
233
+ | `NEW-CTRL-058` | CLOUD-CONTROL-PLANE-CROSS-TENANT-CLAIM-VALIDATION | `CVE-2025-55241` (Entra ID Actor-token impersonation) | NIST-800-53 AC-2/AU-2/AC-16, ISO-27001-2022 A.5.16, CIS Cloud Foundations |
234
+ | `NEW-CTRL-059` | SENSITIVE-DATA-IN-LOGS-LINT | `CVE-2025-21085` (Cisco Duo credential leakage) | NIST-800-53 AU-9/SI-12, ISO-27001-2022 A.8.15, PCI-DSS 4.0 §10.5 |
235
+ | `NEW-CTRL-060` | DATABASE-SERVER-SIDE-SCRIPTING-DEFAULT-DENY | `CVE-2025-49844` (Redis RediShell Lua UAF) | NIST-800-53 CM-6/CM-7, ISO-27001-2022 A.8.9, vendor secure-baseline profiles |
236
+ | `NEW-CTRL-061` | IN-MEMORY-DATASTORE-MEMORY-DISCLOSURE-NETWORK-EXPOSURE-AUDIT | `CVE-2025-14847` (MongoBleed) | NIST-800-53 SC-7/SC-28, PCI-DSS 4.0 §1.4, ISO-27001-2022 A.8.20 |
237
+ | `NEW-CTRL-062` | HTTP2-STREAM-RESET-ACCOUNTING | `CVE-2025-8671` (MadeYouReset) | NIST-800-53 SC-5, ISO-27001-2022 A.8.6, vendor HTTP/2 secure-default profiles |
238
+ | `NEW-CTRL-063` | MULTIMODAL-INFERENCE-INPUT-DECODER-ISOLATION | `CVE-2026-22778` (vLLM heap-overflow RCE) | NIST AI RMF MANAGE 4.1, NIST-800-53 SC-39, OWASP LLM Top 10 2025 LLM10 |
239
+ | `NEW-CTRL-064` | LLM-OUTPUT-DESERIALIZATION-TRUST-ZONE | `CVE-2025-68664` (LangChain LangGrinch) | NIST AI RMF MEASURE 2.7, OWASP LLM Top 10 2025 LLM03/LLM08, NIST-800-53 SI-10 |
240
+ | `NEW-CTRL-065` | AI-MODEL-SERVER-DEFAULT-AUTHENTICATION | `CVE-2026-7482` (Ollama Bleeding Llama) | NIST-800-53 IA-2/AC-3, ISO-27001-2022 A.8.5, NIST AI RMF GOVERN 5.1 |
241
+ | `NEW-CTRL-066` | AGENTIC-IDE-HOST-EXECUTION-SANDBOX | `CVE-2025-55319` (VSCode agentic-AI command-injection) | NIST AI RMF MANAGE 4.1, ISO/IEC 42001 §6.1.4, NIST-800-53 SC-39 |
242
+ | `NEW-CTRL-067` | AI-PLATFORM-CONTROL-PLANE-RBAC-OVERLAY-AUDIT | `CVE-2025-10725` (OpenShift AI privilege escalation) | NIST-800-53 AC-2/AC-6, CIS Kubernetes Benchmark §5, NIST AI RMF GOVERN 1.5 |
243
+ | `NEW-CTRL-068` | HYPERVISOR-VM-ESCAPE-TENANCY-ASSUMPTION | `CVE-2025-22224` / `CVE-2025-22225` / `CVE-2025-22226` (VMSA-2025-0004 ESXi chain) | NIST-800-53 SC-7/SI-2, ISO-27001-2022 A.8.20, CIS VMware ESXi Benchmark |
244
+ | `NEW-CTRL-069` | ECOSYSTEM-PACKAGE-TEMPORAL-TRUST-DRIFT-DETECTION | `MAL-2026-RUBYGEMS-BUFFERZONECORP-SLEEPER` | NIST-800-218 SSDF PW.4, EU CRA Annex I §1(2)(b), SLSA Build L3 |
245
+ | `NEW-CTRL-070` | TYPOSQUAT-INSTALL-TIME-NAME-CONFUSION-GUARD | `MAL-2025-PYPI-COLORAMA-SOLANA-STEALER` | NIST-800-218 SSDF PW.4, NIST-800-53 SI-7, EU CRA Annex I §1(2)(c) |
246
+ | `NEW-CTRL-071` | AI-DISCOVERY-CREDIT-IN-COMPLIANCE-EVIDENCE | `MAL-2025-AI-FOUND-FFMPEG-BIGSLEEP` + `CVE-2025-6965` + `CVE-2025-0133` + ZeroPath quartet | NIST AI RMF MEASURE 2.7, ISO/IEC 42001 §6.1.4 (records of AI use), EU AI Act Art.12 (record-keeping) |
231
247
 
232
248
  When you cite a `NEW-CTRL-*` ID in a skill body, the lint reads the upstream `zeroday-lessons.json` entry as the authoritative source for the requirement text — do not paraphrase the description in the skill body, link to the ID instead.
233
249
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.13.6 — 2026-05-18
4
+
5
+ CVE catalog expansion (38 → 67 entries) covering threat classes the catalog previously did not address, plus a `doctor` undercount fix.
6
+
7
+ ### Features
8
+
9
+ **29 new catalog entries** across the under-represented classes:
10
+
11
+ - **Browsers (4)** — Chrome V8 TAG-disclosed zero-day `CVE-2025-10585`, WebKit DarkSword chain `CVE-2025-14174` + `CVE-2025-43529`, Firefox SpiderMonkey Pwn2Own `CVE-2025-4919`.
12
+ - **Mobile OS (3)** — WebKit Glass Cage iOS chain `CVE-2025-24201`, ImageIO zero-click root `CVE-2025-43300`, Android POSIX-CPU-timer race `CVE-2025-38352`.
13
+ - **Identity providers (2)** — Entra ID cross-tenant Actor-token impersonation `CVE-2025-55241` (CVSS 10.0), Cisco Duo log credential disclosure `CVE-2025-21085`.
14
+ - **Database engines (3)** — PostgreSQL psql ACE `CVE-2025-1094` (BeyondTrust / Treasury breaches), Redis RediShell Lua UAF `CVE-2025-49844` (CVSS 10.0), MongoBleed memory disclosure `CVE-2025-14847`.
15
+ - **HTTP/2 (1)** — MadeYouReset stream-reset DoS `CVE-2025-8671` (Rapid Reset successor, 2.8M+ vulnerable instances).
16
+ - **AI model serving (4)** — vLLM heap-overflow RCE `CVE-2026-22778`, Ollama Bleeding Llama `CVE-2026-7482`, LangChain LangGrinch `CVE-2025-68664`, Big Sleep SQLite zero-day `CVE-2025-6965`.
17
+ - **VMware ESXi (3)** — `CVE-2025-22224` / `CVE-2025-22225` / `CVE-2025-22226` (VMSA-2025-0004, ransomware-active VM-escape chain).
18
+ - **Malicious packages (3)** — ultralytics XMRig `MAL-2024-PYPI-ULTRALYTICS-XMRIG` (60M-download AI library), RubyGems + Go sleeper `MAL-2026-RUBYGEMS-BUFFERZONECORP-SLEEPER`, PyPI colorama Solana stealer `MAL-2025-PYPI-COLORAMA-SOLANA-STEALER`.
19
+ - **AI-discovery anchors (6)** — XBOW Palo Alto GlobalProtect `CVE-2025-0133` (HackerOne #1 Q2 2025), ZeroPath cluster (`CVE-2025-59529` / `CVE-2025-55319` / `CVE-2025-53767` / `CVE-2025-10725`), Big Sleep FFmpeg + ImageMagick tranche `MAL-2025-AI-FOUND-FFMPEG-BIGSLEEP`.
20
+
21
+ Every entry carries the full RWEP factor set, named verification sources, vendor advisory references, and a matching `data/zeroday-lessons.json` lesson. AI-discovered rate climbs 5/38 (0.132) → 12/67 (0.179), clearing the next ladder rung toward the Hard Rule #7 target of 0.40.
22
+
23
+ **16 new control requirements** mint `NEW-CTRL-056` through `NEW-CTRL-071`, named in `AGENTS.md` with the surfacing zero-day and gap-closed framework controls. Coverage spans mobile MDM SLA enforcement, browser managed-update no-deferral, cloud-control-plane cross-tenant claim validation, sensitive-data-in-logs lint, database server-side scripting default-deny, in-memory datastore memory-disclosure exposure audit, HTTP/2 stream-reset accounting, multimodal inference decoder isolation, LLM-output deserialization trust zone, AI-model-server default auth, agentic-IDE host-execution sandbox, AI-platform control-plane RBAC overlay, hypervisor tenancy assumption, ecosystem-package temporal trust drift, typosquat install-time guard, and AI-discovery credit in compliance evidence.
24
+
25
+ **ATT&CK + ATLAS catalogs extended** to back the new entries: 8 new ATT&CK techniques (T1005, T1189, T1496, T1498, T1499.001, T1499.002, T1539, T1657) and 3 new ATLAS TTPs (AML.T0007 Discover ML Artifacts, AML.T0011 User Execution, AML.T0047 LLM Meta Prompt Extraction).
26
+
27
+ ### Bugs
28
+
29
+ **`exceptd doctor` no longer undercounts the catalog.** The prior implementation parsed `validate-cves` text output, which only counts `CVE-*` prefixes — `MAL-*` (malicious-package) entries were silently dropped from the total. An operator reading `CVE catalog: 34 entries` on a 38-entry catalog would conclude that the Shai-Hulud / TanStack worm intelligence had been removed when it was present all along. The check now reads `data/cve-catalog.json` directly and reports the combined total with the per-prefix breakdown: `CVE catalog: 67 entries (60 CVE + 7 MAL), drift 0`. The `validate-cves` text output gains a clarifying suffix noting that the count is CVE-IDs queued for NVD validation and that the combined catalog total lives under `exceptd doctor`.
30
+
3
31
  ## 0.13.5 — 2026-05-18
4
32
 
5
33
  Three new playbooks, two cross-cutting CLI behaviours, and a deterministic schema gate on `active_exploitation` vocabulary.
package/bin/exceptd.js CHANGED
@@ -5395,19 +5395,36 @@ function cmdDoctor(runner, args, runOpts, pretty) {
5395
5395
  if (runCves) {
5396
5396
  try {
5397
5397
  const orchPath = path.join(PKG_ROOT, "orchestrator", "index.js");
5398
- // validate-cves doesn't emit JSON; parse text for row count + drift.
5398
+ // validate-cves doesn't emit JSON; parse text for drift signal.
5399
5399
  const res = spawnSync(process.execPath, [orchPath, "validate-cves", "--offline"], {
5400
5400
  encoding: "utf8",
5401
5401
  cwd: PKG_ROOT,
5402
5402
  timeout: 30000,
5403
5403
  });
5404
5404
  const text = (res.stdout || "") + (res.stderr || "");
5405
- const totalMatch = text.match(/(\d+)\s+CVEs?\s+in\s+catalog/i);
5406
5405
  const driftMatch = text.match(/drift[:\s]+(\d+)/i);
5407
5406
  const ok = res.status === 0;
5407
+ // v0.13.6: total comes from the catalog file directly. The
5408
+ // validate-cves text-scrape only ever counted CVE-* prefixes, so
5409
+ // MAL-* (malicious package) entries silently dropped from the
5410
+ // doctor report — operators reading "34 entries" assumed the
5411
+ // Shai-Hulud / TanStack worm intel had been removed when it was
5412
+ // present all along. Read the catalog and report both totals.
5413
+ let total = null;
5414
+ let cve_count = null;
5415
+ let mal_count = null;
5416
+ try {
5417
+ const catalog = require(path.join(PKG_ROOT, "data", "cve-catalog.json"));
5418
+ const keys = Object.keys(catalog).filter((k) => !k.startsWith("_"));
5419
+ cve_count = keys.filter((k) => k.startsWith("CVE-")).length;
5420
+ mal_count = keys.filter((k) => k.startsWith("MAL-")).length;
5421
+ total = keys.length;
5422
+ } catch { /* fall through with nulls */ }
5408
5423
  checks.cves = {
5409
5424
  ok,
5410
- total: totalMatch ? Number(totalMatch[1]) : null,
5425
+ total,
5426
+ cve_count,
5427
+ mal_count,
5411
5428
  drift: driftMatch ? Number(driftMatch[1]) : 0,
5412
5429
  ...(ok ? {} : { exit_code: res.status, raw: text.slice(0, 500) }),
5413
5430
  };
@@ -5793,11 +5810,14 @@ function cmdDoctor(runner, args, runOpts, pretty) {
5793
5810
  ? `skill currency: all green (${c.total_skills ?? "?"} skills)`
5794
5811
  : `skill currency: ${c.stale_skills?.length || "?"} stale, ${c.critical_count ?? 0} critical`
5795
5812
  );
5796
- mark(checks.cves, c =>
5797
- c.ok
5798
- ? `CVE catalog: ${c.total ?? "?"} entries, drift ${c.drift ?? 0}`
5799
- : `CVE catalog FAILED (exit=${c.exit_code ?? "?"})`
5800
- );
5813
+ mark(checks.cves, c => {
5814
+ if (!c.ok) return `CVE catalog FAILED (exit=${c.exit_code ?? "?"})`;
5815
+ const total = c.total ?? "?";
5816
+ const breakdown = (c.cve_count != null && c.mal_count != null)
5817
+ ? ` (${c.cve_count} CVE + ${c.mal_count} MAL)`
5818
+ : "";
5819
+ return `CVE catalog: ${total} entries${breakdown}, drift ${c.drift ?? 0}`;
5820
+ });
5801
5821
  mark(checks.rfcs, c =>
5802
5822
  c.ok
5803
5823
  ? `RFC catalog: ${c.total ?? "?"} entries, drift ${c.drift ?? 0}`
@@ -1,21 +1,21 @@
1
1
  {
2
2
  "schema_version": "1.1.0",
3
- "generated_at": "2026-05-18T04:58:08.316Z",
3
+ "generated_at": "2026-05-18T07:02:32.618Z",
4
4
  "generator": "scripts/build-indexes.js",
5
5
  "source_count": 54,
6
6
  "source_hashes": {
7
- "manifest.json": "6bbf4f4d9540c2539d6f2635b39ba42f963e3a2238e9e8b6569d0cc65719b813",
8
- "data/atlas-ttps.json": "2b021f47355365d1ba59078dfa582397c7a64c2b4ebea4657ea260a66b76daf6",
9
- "data/attack-techniques.json": "76461dbec048c5e072435d57e3a04b780e3992dab9f316b1b52608e0a997e355",
10
- "data/cve-catalog.json": "4b8c05074744f9e099c776e0f9c3afd2b978fc52d702bc8805c3b5bfecdbafcb",
7
+ "manifest.json": "fac154a4d63a13c1289d3498abab8d28433c30b79393e63f49c6a2ce21f7922e",
8
+ "data/atlas-ttps.json": "c2aee9c70ec24cf48f1ea4daf170aa6e7b93292888239c46a8ec9e522ee32119",
9
+ "data/attack-techniques.json": "29cd5690040c7153dbf293b7e3a99b72fc897b0495478e369f7ce7004b8d64f4",
10
+ "data/cve-catalog.json": "b3731361d298483648264215fd8dbfca36d0f4e2ead4aebf7c49718e12038e1f",
11
11
  "data/cwe-catalog.json": "4a0036f9ec17af29e0df111ac77b94f8be6a52742bfd89ff3583096d23b75e35",
12
12
  "data/d3fend-catalog.json": "a1fc2827ceb344669e148d55197dbf1b0e5b20bcc618e90517639c17d67ee82d",
13
13
  "data/dlp-controls.json": "d2406c482dddd30e49203879999dc4b3a7fd4d0494d6a61d86b91ee76415df19",
14
14
  "data/exploit-availability.json": "ec2656f0d9a893610e27b43eb6035fe9b18e057c9f6dfaac7e7d4959bbcbb795",
15
- "data/framework-control-gaps.json": "994bf3203f3a2c80fe21194d00f67ecffa77b80193ba3f4b046e9d38e7b09f0f",
15
+ "data/framework-control-gaps.json": "d49c75de55e6e1dabec46e6e975619489a2093b0be53c2a0b654e5c1826fbe46",
16
16
  "data/global-frameworks.json": "9ba563a85f7f8d6c3c957de64945e20925a89d0ed6ea6fc561cf093811acf558",
17
17
  "data/rfc-references.json": "e253a548c8a829d178d5aea601e268724b85c936ccbfa51c2e5d80c5f8efe2b0",
18
- "data/zeroday-lessons.json": "3d4c18977f2100f200e209dc55331931a5d0adc54af35879fc58f1b43deac56f",
18
+ "data/zeroday-lessons.json": "bb3fec080f649a5968f8d0c6d69ca4d32fb120de0f7d07b1f5058184d4d3ff3a",
19
19
  "skills/kernel-lpe-triage/skill.md": "08b3e9815ba481c57c80f5fc0ccbf5bb7cbb41f570c235ba6ff9596b8c07354d",
20
20
  "skills/ai-attack-surface/skill.md": "d1361c53c8360999e1ec6a403bcbfaa53d0afc11689e8781d26081196dd079d4",
21
21
  "skills/mcp-agent-trust/skill.md": "19a6b54375808e59143070011328d8c936836845bca4a484108738bbef290694",
@@ -72,7 +72,7 @@
72
72
  "dlp_refs": 0
73
73
  },
74
74
  "trigger_table_entries": 538,
75
- "chains_cve_entries": 34,
75
+ "chains_cve_entries": 59,
76
76
  "chains_cwe_entries": 55,
77
77
  "jurisdictions_indexed": 29,
78
78
  "handoff_dag_nodes": 42,
@@ -5,6 +5,22 @@
5
5
  "event_count": 54
6
6
  },
7
7
  "events": [
8
+ {
9
+ "date": "2026-05-18",
10
+ "type": "catalog_update",
11
+ "artifact": "data/cve-catalog.json",
12
+ "path": "data/cve-catalog.json",
13
+ "schema_version": "1.0.0",
14
+ "entry_count": 67
15
+ },
16
+ {
17
+ "date": "2026-05-18",
18
+ "type": "catalog_update",
19
+ "artifact": "data/zeroday-lessons.json",
20
+ "path": "data/zeroday-lessons.json",
21
+ "schema_version": "1.1.0",
22
+ "entry_count": 67
23
+ },
8
24
  {
9
25
  "date": "2026-05-15",
10
26
  "type": "skill_review",
@@ -39,7 +55,7 @@
39
55
  "artifact": "data/atlas-ttps.json",
40
56
  "path": "data/atlas-ttps.json",
41
57
  "schema_version": "1.0.0",
42
- "entry_count": 30
58
+ "entry_count": 33
43
59
  },
44
60
  {
45
61
  "date": "2026-05-15",
@@ -47,7 +63,7 @@
47
63
  "artifact": "data/attack-techniques.json",
48
64
  "path": "data/attack-techniques.json",
49
65
  "schema_version": "1.0.0",
50
- "entry_count": 98
66
+ "entry_count": 106
51
67
  },
52
68
  {
53
69
  "date": "2026-05-15",
@@ -81,14 +97,6 @@
81
97
  "schema_version": "1.0.0",
82
98
  "entry_count": 41
83
99
  },
84
- {
85
- "date": "2026-05-15",
86
- "type": "catalog_update",
87
- "artifact": "data/zeroday-lessons.json",
88
- "path": "data/zeroday-lessons.json",
89
- "schema_version": "1.1.0",
90
- "entry_count": 38
91
- },
92
100
  {
93
101
  "date": "2026-05-15",
94
102
  "type": "manifest_review",
@@ -96,14 +104,6 @@
96
104
  "path": "manifest.json",
97
105
  "note": "manifest threat_review_date — 42 skills, 11 catalogs"
98
106
  },
99
- {
100
- "date": "2026-05-13",
101
- "type": "catalog_update",
102
- "artifact": "data/cve-catalog.json",
103
- "path": "data/cve-catalog.json",
104
- "schema_version": "1.0.0",
105
- "entry_count": 38
106
- },
107
107
  {
108
108
  "date": "2026-05-13",
109
109
  "type": "catalog_update",
@@ -18,7 +18,7 @@
18
18
  "rebuild_after_days": 365,
19
19
  "note": "Per-entry last_verified governs decay. Skills depending on this catalog must check entry freshness before high-stakes use."
20
20
  },
21
- "entry_count": 30,
21
+ "entry_count": 33,
22
22
  "sample_keys": [
23
23
  "AML.T0001",
24
24
  "AML.T0040",
@@ -40,7 +40,7 @@
40
40
  "rebuild_after_days": 365,
41
41
  "note": "Catalog must be rebuilt against the upstream ATT&CK release whenever MITRE publishes a new version. AGENTS.md external-data version-pinning rule requires the bump to be intentional, not silent. ATT&CK ships semi-annually (April + October); audit on each release for tactic moves, technique splits, and new Detection Strategies."
42
42
  },
43
- "entry_count": 98,
43
+ "entry_count": 106,
44
44
  "sample_keys": [
45
45
  "T0001",
46
46
  "T0017",
@@ -53,7 +53,7 @@
53
53
  "path": "data/cve-catalog.json",
54
54
  "purpose": "Per-CVE record (CVSS, EPSS, CISA KEV, RWEP, AI-discovery, vendor advisories, framework gaps, ATLAS/ATT&CK mappings). Cross-validated against NVD + CISA KEV + FIRST EPSS via validate-cves.",
55
55
  "schema_version": "1.0.0",
56
- "last_updated": "2026-05-13",
56
+ "last_updated": "2026-05-18",
57
57
  "tlp": "CLEAR",
58
58
  "source_confidence_default": "A1",
59
59
  "freshness_policy": {
@@ -62,7 +62,7 @@
62
62
  "rebuild_after_days": 365,
63
63
  "note": "Per-entry last_verified governs decay. Skills depending on this catalog must check entry freshness before high-stakes use."
64
64
  },
65
- "entry_count": 38,
65
+ "entry_count": 67,
66
66
  "sample_keys": [
67
67
  "CVE-2025-53773",
68
68
  "CVE-2026-30615",
@@ -229,7 +229,7 @@
229
229
  "path": "data/zeroday-lessons.json",
230
230
  "purpose": "Distilled lessons from notable zero-days and campaigns (SesameOp, Copy Fail, Dirty Frag, Copilot RCE, Windsurf MCP). Each entry: technique, distinguishing characteristic, what it means for the framework lag.",
231
231
  "schema_version": "1.1.0",
232
- "last_updated": "2026-05-15",
232
+ "last_updated": "2026-05-18",
233
233
  "tlp": "CLEAR",
234
234
  "source_confidence_default": "B2",
235
235
  "freshness_policy": {
@@ -238,7 +238,7 @@
238
238
  "rebuild_after_days": 365,
239
239
  "note": "Per-entry last_verified governs decay. Skills depending on this catalog must check entry freshness before high-stakes use."
240
240
  },
241
- "entry_count": 38,
241
+ "entry_count": 67,
242
242
  "sample_keys": [
243
243
  "CVE-2026-31431",
244
244
  "CVE-2025-53773",