@blamejs/exceptd-skills 0.13.2 → 0.13.3
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 +39 -0
- package/bin/exceptd.js +105 -1
- package/data/_indexes/_meta.json +12 -12
- package/data/_indexes/activity-feed.json +3 -3
- package/data/_indexes/catalog-summaries.json +3 -3
- package/data/_indexes/chains.json +125 -0
- package/data/_indexes/frequency.json +12 -0
- package/data/_indexes/section-offsets.json +88 -88
- package/data/_indexes/token-budget.json +37 -37
- package/data/attack-techniques.json +2 -0
- package/data/cve-catalog.json +96 -1
- package/data/cwe-catalog.json +1 -0
- package/data/framework-control-gaps.json +409 -0
- package/data/zeroday-lessons.json +71 -0
- package/lib/lint-skills.js +17 -13
- package/lib/source-advisories.js +26 -0
- package/manifest.json +47 -47
- package/orchestrator/index.js +147 -2
- package/package.json +1 -1
- package/sbom.cdx.json +22 -22
- package/skills/api-security/skill.md +14 -4
- package/skills/cloud-iam-incident/skill.md +1 -1
- package/skills/email-security-anti-phishing/skill.md +14 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,44 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.13.3 — 2026-05-18
|
|
4
|
+
|
|
5
|
+
Audit close-out continuation: the items the prior pass marked for follow-up. Workflow hardening, lint enforcement promoted from warning to hard error, two new operator-facing health checks for the Shai-Hulud lesson controls, and 4 more primary-source pollers covering kernel.org / oss-security / JFrog / CISA.
|
|
6
|
+
|
|
7
|
+
### Security
|
|
8
|
+
|
|
9
|
+
**`refresh.yml` split into two jobs — `refresh-data` (no write credentials) + `open-pr` (contents:write + pull-requests:write + issues:write scoped to PR creation only).** Pre-split a single `refresh` job carried write capability against the repo throughout the long-running data-parse + prefetch + apply + predeploy sequence; a compromise of any of those steps had repo-write access during the whole run. The new shape scopes write capability to the few-second PR-creation window. Data mutations flow between jobs via an upload-artifact / download-artifact bundle. The `refresh-data` checkout now uses `persist-credentials: false`.
|
|
10
|
+
|
|
11
|
+
**`lib/lint-skills.js` Hard Rule #1 body-scan flipped from warning to hard error.** v0.13.2 introduced the body-scan as a warning while the 2 pre-existing violations were triaged. Both are now resolved (`CVE-2024-21762` landed in the catalog with full Hard Rule #1 fields; the placeholder `CVE-2026-21370` reference was removed from `cloud-iam-incident`). The body-scan now errors when a skill cites a CVE not in the catalog. Draft references continue to surface as warnings.
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
**`exceptd doctor --ai-config` audits AI-assistant config-file permissions.** Implements NEW-CTRL-050 from the MAL-2026-SHAI-HULUD-OSS zeroday-lessons entry. Walks `~/.claude`, `~/.cursor`, `~/.codeium`, `~/.aider`, `~/.continue` for sensitive files (`settings.json`, `mcp.json`, `*.mcp_config.json`, `api_key*`, `*.token`, `*.credentials`) and reports any not at mode 0600 on POSIX. On Windows the mode bits aren't load-bearing; each sensitive file is flagged with an info-level "manual ACL review" note. Opt-in via `--ai-config`; doesn't run as part of the default no-flag doctor pass.
|
|
16
|
+
|
|
17
|
+
**`exceptd watchlist --org-scan` probes GitHub for threat-actor repo naming patterns.** Implements NEW-CTRL-052 from the MAL-2026-SHAI-HULUD-OSS zeroday-lessons entry. Queries the GitHub Search API for repos matching the canonical Shai-Hulud / TeamPCP patterns ("A Gift From TeamPCP", "Shai-Hulud", "TeamPCP") scoped to `--org <login>`. Custom patterns via repeatable `--pattern <s>`. Set `GITHUB_TOKEN` env var for private-repo coverage and higher rate limit; without it, public-repo search only.
|
|
18
|
+
|
|
19
|
+
**4 more primary-source advisory pollers.** `lib/source-advisories.js` `FEEDS` grew 4 → 8:
|
|
20
|
+
- `kernel-org` — torvalds/linux master commits atom feed. Catches the CVE-2026-46333 / ssh-keysign-pwn class at T+0, the moment the upstream fix lands. The v0.13.1 post-mortem identified this as the exact venue we missed.
|
|
21
|
+
- `oss-security` — openwall.com `oss-security` mailing list atom feed. Coordinated-disclosure venue; many distro advisories announce CVEs here days before NVD enrichment.
|
|
22
|
+
- `jfrog` — JFrog SecOps research blog feed. npm / PyPI / Maven supply-chain disclosures with CVE assignments (TanStack / Mini Shai-Hulud class).
|
|
23
|
+
- `cisa-current` — CISA cybersecurity advisories feed (federal-vendor coordinated disclosures, separate from KEV which captures only exploited-in-the-wild items).
|
|
24
|
+
|
|
25
|
+
### Bugs
|
|
26
|
+
|
|
27
|
+
**`CVE-2024-21762` (Fortinet FortiOS SSL-VPN preauth RCE) added to catalog.** Was cited in skill prose without a backing catalog entry — surfaced by the v0.13.2 Hard Rule #1 body-scan. Full Hard Rule #1 fields (CVSS 9.8, CISA KEV 2024-02-09, public PoC, confirmed mass exploitation across multiple APT clusters, FortiOS patch versions 7.6.2 / 7.4.7 / 7.2.11 / 7.0.17 / 6.4.16). RWEP 85. Includes the 2025-04 follow-up advisory documenting symlink persistence that survives firmware patching.
|
|
28
|
+
|
|
29
|
+
**`CVE-2026-21370` placeholder reference removed from `skills/cloud-iam-incident/skill.md`.** No record of CVE-2026-21370 in any source; was a class-marker parenthetical for the Azure managed-identity token-replay attack class. Rewritten as "design-class issue, not a single CVE" so the prose still accurately describes the IMDS-token-theft pattern without inventing threat intel.
|
|
30
|
+
|
|
31
|
+
**12 framework-gap forward-orphan references closed.** Each pre-existing orphan got a real gap entry with theater_test per Hard Rule #6: `CIS-Kubernetes-Benchmark-4.2.13`, `CIS-Kubernetes-Benchmark-5.3`, `CIS-Controls-v8-Control6`, `ISO-27001-2022-A.5.15`, `ISO-27001-2022-A.8.13`, `NIST-800-53-IA-2`, `NIST-AI-RMF-MEASURE-2.7`, `OWASP-ML-Top-10-2023-ML06`, `NIS2-Art21-network-security`, `NIS2-Art21-business-continuity`, `PCI-DSS-4.0-5.1`, `AU-ISM-1808`. Gap catalog 130 → 142 entries; orphan count for `framework-control-gaps.json` is now 0.
|
|
32
|
+
|
|
33
|
+
**2 empty-`data_deps` skills fixed.** `api-security` and `email-security-anti-phishing` previously had empty `data_deps` because the bodies referenced no catalog file by name. Each now carries 6 catalog references (atlas-ttps, attack-techniques, cwe-catalog / dlp-controls, d3fend-catalog, framework-control-gaps, rfc-references) threaded through the body in 4 new prose passages each. Every cited ID resolves to a real entry in its respective catalog. `last_threat_review` bumped to 2026-05-18.
|
|
34
|
+
|
|
35
|
+
### Internal
|
|
36
|
+
|
|
37
|
+
- 8 new tests in `tests/v0_13_3-fixes.test.js` covering all 5 phases.
|
|
38
|
+
- Test-count baseline refreshed to match the new test surface.
|
|
39
|
+
- ADVISORIES_SOURCE test-fixture extended to include the 4 new feeds.
|
|
40
|
+
- `tests/source-advisories.test.js` `FEEDS: exactly N feeds` pin updated 4 → 8.
|
|
41
|
+
|
|
3
42
|
## 0.13.2 — 2026-05-18
|
|
4
43
|
|
|
5
44
|
Audit close-out: the remaining v0.13 deferrals from the original 6-domain audit + the v0.13.1 post-mortem follow-ups. Patch-class — additive across CI hardening, lint enforcement, CLI UX, predeploy gates, catalog data cleanup, and skill metadata.
|
package/bin/exceptd.js
CHANGED
|
@@ -5205,16 +5205,24 @@ function cmdDoctor(runner, args, runOpts, pretty) {
|
|
|
5205
5205
|
|
|
5206
5206
|
// Selective subchecks. If any of the four flags is passed, run only those.
|
|
5207
5207
|
// If none are passed, run all four plus signing-status.
|
|
5208
|
+
// v0.13.3: --ai-config audits AI-assistant config-file permissions per
|
|
5209
|
+
// NEW-CTRL-050 (from the MAL-2026-SHAI-HULUD-OSS zeroday-lessons entry).
|
|
5210
|
+
// It's a separate flag because the check is opt-in — most operators
|
|
5211
|
+
// don't want their AI-config state probed by default.
|
|
5208
5212
|
const onlySigs = !!args.signatures;
|
|
5209
5213
|
const onlyCurrency = !!args.currency;
|
|
5210
5214
|
const onlyCves = !!args.cves;
|
|
5211
5215
|
const onlyRfcs = !!args.rfcs;
|
|
5212
|
-
const
|
|
5216
|
+
const onlyAiConfig = !!args["ai-config"];
|
|
5217
|
+
const anySelected = onlySigs || onlyCurrency || onlyCves || onlyRfcs || onlyAiConfig;
|
|
5213
5218
|
const runSigs = !anySelected || onlySigs;
|
|
5214
5219
|
const runCurrency = !anySelected || onlyCurrency;
|
|
5215
5220
|
const runCves = !anySelected || onlyCves;
|
|
5216
5221
|
const runRfcs = !anySelected || onlyRfcs;
|
|
5217
5222
|
const runSigning = !anySelected;
|
|
5223
|
+
// --ai-config is opt-in — never runs as part of the default no-flag
|
|
5224
|
+
// doctor pass. Operators ask for it explicitly.
|
|
5225
|
+
const runAiConfig = onlyAiConfig;
|
|
5218
5226
|
|
|
5219
5227
|
const checks = {};
|
|
5220
5228
|
const issues = [];
|
|
@@ -5453,6 +5461,102 @@ function cmdDoctor(runner, args, runOpts, pretty) {
|
|
|
5453
5461
|
}
|
|
5454
5462
|
}
|
|
5455
5463
|
|
|
5464
|
+
// v0.13.3 — AI-assistant config-file permission audit per NEW-CTRL-050
|
|
5465
|
+
// (from the MAL-2026-SHAI-HULUD-OSS zeroday-lessons entry). Walks
|
|
5466
|
+
// ~/.claude/, ~/.cursor/, ~/.codeium/, ~/.aider/, ~/.continue/ for
|
|
5467
|
+
// sensitive config files (settings.json, mcp.json, *.mcp_config.json,
|
|
5468
|
+
// api_key*, *.token, *.credentials) and reports any not at mode 0600.
|
|
5469
|
+
// The MAL-2026-SHAI-HULUD-OSS framework reads these files at
|
|
5470
|
+
// unprivileged-process scope; tightening to 0600 forces npm/node-spawned
|
|
5471
|
+
// processes that don't share UID to fail the read.
|
|
5472
|
+
//
|
|
5473
|
+
// Opt-in only — never runs as part of the default no-flag doctor pass.
|
|
5474
|
+
// Operators request it via `exceptd doctor --ai-config`.
|
|
5475
|
+
if (runAiConfig) {
|
|
5476
|
+
const os = require('os');
|
|
5477
|
+
const HOME = os.homedir();
|
|
5478
|
+
const AI_CONFIG_DIRS = [
|
|
5479
|
+
{ dir: '.claude', display: '~/.claude' },
|
|
5480
|
+
{ dir: '.cursor', display: '~/.cursor' },
|
|
5481
|
+
{ dir: '.codeium', display: '~/.codeium' },
|
|
5482
|
+
{ dir: '.aider', display: '~/.aider' },
|
|
5483
|
+
{ dir: '.continue', display: '~/.continue' },
|
|
5484
|
+
];
|
|
5485
|
+
// Files within those dirs that warrant the strict-mode check.
|
|
5486
|
+
const SENSITIVE_PATTERNS = [
|
|
5487
|
+
/^settings\.json$/,
|
|
5488
|
+
/^mcp\.json$/,
|
|
5489
|
+
/\.mcp_config\.json$/,
|
|
5490
|
+
/^api_key/,
|
|
5491
|
+
/\.token$/,
|
|
5492
|
+
/\.credentials$/,
|
|
5493
|
+
];
|
|
5494
|
+
const findings = [];
|
|
5495
|
+
let scannedDirs = 0;
|
|
5496
|
+
let scannedFiles = 0;
|
|
5497
|
+
function walk(absDir, displayRoot, rel) {
|
|
5498
|
+
if (!fs.existsSync(absDir)) return;
|
|
5499
|
+
let entries;
|
|
5500
|
+
try { entries = fs.readdirSync(absDir, { withFileTypes: true }); }
|
|
5501
|
+
catch { return; }
|
|
5502
|
+
for (const e of entries) {
|
|
5503
|
+
const childAbs = path.join(absDir, e.name);
|
|
5504
|
+
const childRel = rel ? rel + '/' + e.name : e.name;
|
|
5505
|
+
if (e.isDirectory()) {
|
|
5506
|
+
walk(childAbs, displayRoot, childRel);
|
|
5507
|
+
} else if (e.isFile()) {
|
|
5508
|
+
scannedFiles++;
|
|
5509
|
+
if (!SENSITIVE_PATTERNS.some((re) => re.test(e.name))) continue;
|
|
5510
|
+
let st;
|
|
5511
|
+
try { st = fs.statSync(childAbs); } catch { continue; }
|
|
5512
|
+
if (process.platform === 'win32') {
|
|
5513
|
+
// Windows POSIX mode bits don't carry meaningful ACL info.
|
|
5514
|
+
// Flag every sensitive file with a manual-review note rather
|
|
5515
|
+
// than emit a noisy permission claim that's likely wrong.
|
|
5516
|
+
findings.push({
|
|
5517
|
+
path: `${displayRoot}/${childRel}`,
|
|
5518
|
+
mode: null,
|
|
5519
|
+
severity: 'info',
|
|
5520
|
+
issue: 'win32_acl_check_not_implemented',
|
|
5521
|
+
hint: 'On Windows the POSIX mode bits are not load-bearing. Use icacls to confirm only the current user has read access. Tracked for v0.14+.',
|
|
5522
|
+
});
|
|
5523
|
+
continue;
|
|
5524
|
+
}
|
|
5525
|
+
const mode = st.mode & 0o777;
|
|
5526
|
+
if ((mode & 0o077) !== 0) {
|
|
5527
|
+
findings.push({
|
|
5528
|
+
path: `${displayRoot}/${childRel}`,
|
|
5529
|
+
mode: '0' + mode.toString(8),
|
|
5530
|
+
severity: 'warn',
|
|
5531
|
+
issue: 'group_or_other_readable',
|
|
5532
|
+
hint: `chmod 600 '${childAbs}' # NEW-CTRL-050: AI-assistant configs holding MCP tokens / API keys must be 0600 to defeat unprivileged exfil`,
|
|
5533
|
+
});
|
|
5534
|
+
}
|
|
5535
|
+
}
|
|
5536
|
+
}
|
|
5537
|
+
}
|
|
5538
|
+
for (const d of AI_CONFIG_DIRS) {
|
|
5539
|
+
const abs = path.join(HOME, d.dir);
|
|
5540
|
+
if (fs.existsSync(abs)) {
|
|
5541
|
+
scannedDirs++;
|
|
5542
|
+
walk(abs, d.display, '');
|
|
5543
|
+
}
|
|
5544
|
+
}
|
|
5545
|
+
const errorFindings = findings.filter((f) => f.severity === 'warn');
|
|
5546
|
+
checks.ai_config = {
|
|
5547
|
+
ok: errorFindings.length === 0,
|
|
5548
|
+
severity: errorFindings.length > 0 ? 'warn' : 'info',
|
|
5549
|
+
scanned_dirs: scannedDirs,
|
|
5550
|
+
scanned_files: scannedFiles,
|
|
5551
|
+
directories_inspected: AI_CONFIG_DIRS.map((d) => d.display),
|
|
5552
|
+
sensitive_patterns: ['settings.json', 'mcp.json', '*.mcp_config.json', 'api_key*', '*.token', '*.credentials'],
|
|
5553
|
+
findings,
|
|
5554
|
+
platform: process.platform,
|
|
5555
|
+
control_reference: 'NEW-CTRL-050 (MAL-2026-SHAI-HULUD-OSS lesson)',
|
|
5556
|
+
};
|
|
5557
|
+
if (errorFindings.length > 0) issues.push('ai_config');
|
|
5558
|
+
}
|
|
5559
|
+
|
|
5456
5560
|
// Walk every check and split: errors (severity error/missing/fail) vs warnings
|
|
5457
5561
|
// (severity warn). all_green is true ONLY when zero errors AND zero warnings.
|
|
5458
5562
|
const warnList = [];
|
package/data/_indexes/_meta.json
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": "1.1.0",
|
|
3
|
-
"generated_at": "2026-05-
|
|
3
|
+
"generated_at": "2026-05-18T03:04:24.499Z",
|
|
4
4
|
"generator": "scripts/build-indexes.js",
|
|
5
5
|
"source_count": 54,
|
|
6
6
|
"source_hashes": {
|
|
7
|
-
"manifest.json": "
|
|
7
|
+
"manifest.json": "b1b4b86879805e28975155d7aa29c1d1463ec266f2c98a1045d543ecf5acaa6c",
|
|
8
8
|
"data/atlas-ttps.json": "2b021f47355365d1ba59078dfa582397c7a64c2b4ebea4657ea260a66b76daf6",
|
|
9
|
-
"data/attack-techniques.json": "
|
|
10
|
-
"data/cve-catalog.json": "
|
|
11
|
-
"data/cwe-catalog.json": "
|
|
9
|
+
"data/attack-techniques.json": "76461dbec048c5e072435d57e3a04b780e3992dab9f316b1b52608e0a997e355",
|
|
10
|
+
"data/cve-catalog.json": "1d34601fbc4ff925ac38b8eb325375a32dc60ffaff31a23a5ca5f3e1524e88f8",
|
|
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": "003a400f5ae5b15527589571679ccdb9b3a62e60073627b5fbdeb2a9fe330a7a",
|
|
15
|
-
"data/framework-control-gaps.json": "
|
|
15
|
+
"data/framework-control-gaps.json": "ce1535f13d29ab90fac99b983f38a23dd685702b3f12ac9f2371294cb9859ecf",
|
|
16
16
|
"data/global-frameworks.json": "9ba563a85f7f8d6c3c957de64945e20925a89d0ed6ea6fc561cf093811acf558",
|
|
17
17
|
"data/rfc-references.json": "e253a548c8a829d178d5aea601e268724b85c936ccbfa51c2e5d80c5f8efe2b0",
|
|
18
|
-
"data/zeroday-lessons.json": "
|
|
18
|
+
"data/zeroday-lessons.json": "1438620d2c8b0606eac4f63e620906b9ba079c57bfa7f737ceb6a50370cdc9a5",
|
|
19
19
|
"skills/kernel-lpe-triage/skill.md": "ae4a0af924d0078ffc6cd051a3ef9fce75a6a3f9c0c15d1c07900ae5faf80502",
|
|
20
20
|
"skills/ai-attack-surface/skill.md": "dcca7d92a1ab4d1e4c46356b614a138b1c1f79b65a6a290eccf2095d8d443993",
|
|
21
21
|
"skills/mcp-agent-trust/skill.md": "6821f6d38f6e23bbed953f8f86a279597b0b95a2d0548b5383e851bca7442531",
|
|
@@ -48,15 +48,15 @@
|
|
|
48
48
|
"skills/sector-federal-government/skill.md": "a73c3f36f23c12750d369931b7e3f884edae4a8aef35fc8690d15ef4500c4dd0",
|
|
49
49
|
"skills/sector-energy/skill.md": "91f00e7a9be2608393ec8cb6d5f0c9828f81b954a12a7c9fd04bd642b9091e09",
|
|
50
50
|
"skills/sector-telecom/skill.md": "59193e39c2fd73fdd7fede38a956bc730bbe4b712d7d6020788bb4d85f001ad8",
|
|
51
|
-
"skills/api-security/skill.md": "
|
|
51
|
+
"skills/api-security/skill.md": "9fc2252cbcf6162591e70d0bf5499a430b0584495ad584ce49fb7daf070d335f",
|
|
52
52
|
"skills/cloud-security/skill.md": "c9fad9ed3663cf2faec74ad8f06d62eb86e6636f79933560d8c8d50e0e82d1da",
|
|
53
53
|
"skills/container-runtime-security/skill.md": "605a8e8eb1af09835b967ec7179456015ec116c6b9051af3a8d225866cc2f7af",
|
|
54
54
|
"skills/mlops-security/skill.md": "72429f05010accbcb191cb1544f1b88493c2f5249362846e5713ec3226b83dc2",
|
|
55
55
|
"skills/incident-response-playbook/skill.md": "2017515d899c1b2bcb878bc6731e4059623ac52345b2cebbd92204583657bf60",
|
|
56
56
|
"skills/ransomware-response/skill.md": "2e4fc488f86ed1ba7791ab0e7021160d8ca5ad33a02cdf92a5b916c8afecaa54",
|
|
57
|
-
"skills/email-security-anti-phishing/skill.md": "
|
|
57
|
+
"skills/email-security-anti-phishing/skill.md": "250f266908f51f99a4cb3aec0d5dacfcf91fac9f3d95e5a117429a40ed2ff45a",
|
|
58
58
|
"skills/age-gates-child-safety/skill.md": "51295c849bcced965b6448eb6b4bbd5caef5ba0b0cea7ce48abbacf47d331621",
|
|
59
|
-
"skills/cloud-iam-incident/skill.md": "
|
|
59
|
+
"skills/cloud-iam-incident/skill.md": "5ec3800a0049b2123aff67bfab4ff28491a86d2daeb712283e5e88b10c3d5d7b",
|
|
60
60
|
"skills/idp-incident-response/skill.md": "e67a2576e7f1c3bf89f499f5c977bc470ef29e8b3e3e45f4cb5bd45a82674282"
|
|
61
61
|
},
|
|
62
62
|
"skill_count": 42,
|
|
@@ -72,13 +72,13 @@
|
|
|
72
72
|
"dlp_refs": 0
|
|
73
73
|
},
|
|
74
74
|
"trigger_table_entries": 538,
|
|
75
|
-
"chains_cve_entries":
|
|
75
|
+
"chains_cve_entries": 35,
|
|
76
76
|
"chains_cwe_entries": 55,
|
|
77
77
|
"jurisdictions_indexed": 29,
|
|
78
78
|
"handoff_dag_nodes": 42,
|
|
79
79
|
"summary_cards": 42,
|
|
80
80
|
"section_offsets_skills": 42,
|
|
81
|
-
"token_budget_total_approx":
|
|
81
|
+
"token_budget_total_approx": 404483,
|
|
82
82
|
"recipes": 8,
|
|
83
83
|
"jurisdiction_clocks": 29,
|
|
84
84
|
"did_ladders": 8,
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"artifact": "data/framework-control-gaps.json",
|
|
64
64
|
"path": "data/framework-control-gaps.json",
|
|
65
65
|
"schema_version": "1.0.0",
|
|
66
|
-
"entry_count":
|
|
66
|
+
"entry_count": 142
|
|
67
67
|
},
|
|
68
68
|
{
|
|
69
69
|
"date": "2026-05-15",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"artifact": "data/zeroday-lessons.json",
|
|
88
88
|
"path": "data/zeroday-lessons.json",
|
|
89
89
|
"schema_version": "1.1.0",
|
|
90
|
-
"entry_count":
|
|
90
|
+
"entry_count": 39
|
|
91
91
|
},
|
|
92
92
|
{
|
|
93
93
|
"date": "2026-05-15",
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
"artifact": "data/cve-catalog.json",
|
|
103
103
|
"path": "data/cve-catalog.json",
|
|
104
104
|
"schema_version": "1.0.0",
|
|
105
|
-
"entry_count":
|
|
105
|
+
"entry_count": 40
|
|
106
106
|
},
|
|
107
107
|
{
|
|
108
108
|
"date": "2026-05-13",
|
|
@@ -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":
|
|
65
|
+
"entry_count": 40,
|
|
66
66
|
"sample_keys": [
|
|
67
67
|
"CVE-2025-53773",
|
|
68
68
|
"CVE-2026-30615",
|
|
@@ -172,7 +172,7 @@
|
|
|
172
172
|
"rebuild_after_days": 365,
|
|
173
173
|
"note": "Per-entry last_verified governs decay. Skills depending on this catalog must check entry freshness before high-stakes use."
|
|
174
174
|
},
|
|
175
|
-
"entry_count":
|
|
175
|
+
"entry_count": 142,
|
|
176
176
|
"sample_keys": [
|
|
177
177
|
"ALL-AI-PIPELINE-INTEGRITY",
|
|
178
178
|
"ALL-MCP-TOOL-TRUST",
|
|
@@ -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":
|
|
241
|
+
"entry_count": 39,
|
|
242
242
|
"sample_keys": [
|
|
243
243
|
"CVE-2026-31431",
|
|
244
244
|
"CVE-2025-53773",
|
|
@@ -7395,6 +7395,125 @@
|
|
|
7395
7395
|
]
|
|
7396
7396
|
}
|
|
7397
7397
|
},
|
|
7398
|
+
"CVE-2024-21762": {
|
|
7399
|
+
"name": "Fortinet FortiOS / FortiProxy SSL-VPN out-of-bounds write (sslvpnd preauth RCE)",
|
|
7400
|
+
"rwep": 85,
|
|
7401
|
+
"cvss": 9.8,
|
|
7402
|
+
"cisa_kev": true,
|
|
7403
|
+
"epss_score": null,
|
|
7404
|
+
"referencing_skills": [
|
|
7405
|
+
"kernel-lpe-triage",
|
|
7406
|
+
"coordinated-vuln-disclosure"
|
|
7407
|
+
],
|
|
7408
|
+
"chain": {
|
|
7409
|
+
"cwes": [
|
|
7410
|
+
{
|
|
7411
|
+
"id": "CWE-125",
|
|
7412
|
+
"name": "Out-of-bounds Read",
|
|
7413
|
+
"category": "Memory Safety"
|
|
7414
|
+
},
|
|
7415
|
+
{
|
|
7416
|
+
"id": "CWE-1357",
|
|
7417
|
+
"name": "Reliance on Insufficiently Trustworthy Component",
|
|
7418
|
+
"category": "Supply Chain"
|
|
7419
|
+
},
|
|
7420
|
+
{
|
|
7421
|
+
"id": "CWE-362",
|
|
7422
|
+
"name": "Concurrent Execution using Shared Resource with Improper Synchronization (Race Condition)",
|
|
7423
|
+
"category": "Concurrency"
|
|
7424
|
+
},
|
|
7425
|
+
{
|
|
7426
|
+
"id": "CWE-416",
|
|
7427
|
+
"name": "Use After Free",
|
|
7428
|
+
"category": "Memory Safety"
|
|
7429
|
+
},
|
|
7430
|
+
{
|
|
7431
|
+
"id": "CWE-672",
|
|
7432
|
+
"name": "Operation on a Resource after Expiration or Release",
|
|
7433
|
+
"category": "Memory Safety"
|
|
7434
|
+
},
|
|
7435
|
+
{
|
|
7436
|
+
"id": "CWE-787",
|
|
7437
|
+
"name": "Out-of-bounds Write",
|
|
7438
|
+
"category": "Memory Safety"
|
|
7439
|
+
}
|
|
7440
|
+
],
|
|
7441
|
+
"atlas": [],
|
|
7442
|
+
"d3fend": [
|
|
7443
|
+
{
|
|
7444
|
+
"id": "D3-ASLR",
|
|
7445
|
+
"name": "Address Space Layout Randomization",
|
|
7446
|
+
"tactic": "Harden"
|
|
7447
|
+
},
|
|
7448
|
+
{
|
|
7449
|
+
"id": "D3-EAL",
|
|
7450
|
+
"name": "Executable Allowlisting",
|
|
7451
|
+
"tactic": "Harden"
|
|
7452
|
+
},
|
|
7453
|
+
{
|
|
7454
|
+
"id": "D3-PHRA",
|
|
7455
|
+
"name": "Process Hardware Resource Access",
|
|
7456
|
+
"tactic": "Isolate"
|
|
7457
|
+
},
|
|
7458
|
+
{
|
|
7459
|
+
"id": "D3-PSEP",
|
|
7460
|
+
"name": "Process Segment Execution Prevention",
|
|
7461
|
+
"tactic": "Harden"
|
|
7462
|
+
}
|
|
7463
|
+
],
|
|
7464
|
+
"framework_gaps": [
|
|
7465
|
+
{
|
|
7466
|
+
"id": "CIS-Controls-v8-Control7",
|
|
7467
|
+
"framework": "CIS Controls v8",
|
|
7468
|
+
"control_name": "Continuous Vulnerability Management"
|
|
7469
|
+
},
|
|
7470
|
+
{
|
|
7471
|
+
"id": "ISO-27001-2022-A.8.8",
|
|
7472
|
+
"framework": "ISO/IEC 27001:2022",
|
|
7473
|
+
"control_name": "Management of technical vulnerabilities"
|
|
7474
|
+
},
|
|
7475
|
+
{
|
|
7476
|
+
"id": "NIS2-Art21-patch-management",
|
|
7477
|
+
"framework": "EU NIS2 Directive",
|
|
7478
|
+
"control_name": "Vulnerability handling and disclosure"
|
|
7479
|
+
},
|
|
7480
|
+
{
|
|
7481
|
+
"id": "NIST-800-218-SSDF",
|
|
7482
|
+
"framework": "NIST SP 800-218 (Secure Software Development Framework v1.1)",
|
|
7483
|
+
"control_name": "Secure Software Development Framework"
|
|
7484
|
+
},
|
|
7485
|
+
{
|
|
7486
|
+
"id": "NIST-800-53-SC-8",
|
|
7487
|
+
"framework": "NIST SP 800-53 Rev 5",
|
|
7488
|
+
"control_name": "Transmission Confidentiality and Integrity"
|
|
7489
|
+
},
|
|
7490
|
+
{
|
|
7491
|
+
"id": "NIST-800-53-SI-2",
|
|
7492
|
+
"framework": "NIST SP 800-53 Rev 5",
|
|
7493
|
+
"control_name": "Flaw Remediation"
|
|
7494
|
+
},
|
|
7495
|
+
{
|
|
7496
|
+
"id": "PCI-DSS-4.0-6.3.3",
|
|
7497
|
+
"framework": "PCI DSS 4.0",
|
|
7498
|
+
"control_name": "All system components are protected from known vulnerabilities by installing applicable security patches/updates"
|
|
7499
|
+
},
|
|
7500
|
+
{
|
|
7501
|
+
"id": "SOC2-CC9-vendor-management",
|
|
7502
|
+
"framework": "SOC 2 (AICPA Trust Services Criteria)",
|
|
7503
|
+
"control_name": "Risk Mitigation — Vendor and Business Partner Risk"
|
|
7504
|
+
}
|
|
7505
|
+
],
|
|
7506
|
+
"attack_refs": [
|
|
7507
|
+
"T1068",
|
|
7508
|
+
"T1548.001"
|
|
7509
|
+
],
|
|
7510
|
+
"rfc_refs": [
|
|
7511
|
+
"RFC-4301",
|
|
7512
|
+
"RFC-4303",
|
|
7513
|
+
"RFC-7296"
|
|
7514
|
+
]
|
|
7515
|
+
}
|
|
7516
|
+
},
|
|
7398
7517
|
"CWE-20": {
|
|
7399
7518
|
"name": "Improper Input Validation",
|
|
7400
7519
|
"category": "Validation",
|
|
@@ -8648,6 +8767,7 @@
|
|
|
8648
8767
|
},
|
|
8649
8768
|
"related_cves": [
|
|
8650
8769
|
"CVE-2023-3519",
|
|
8770
|
+
"CVE-2024-21762",
|
|
8651
8771
|
"CVE-2025-12686",
|
|
8652
8772
|
"CVE-2025-59389",
|
|
8653
8773
|
"CVE-2025-62847",
|
|
@@ -10763,6 +10883,7 @@
|
|
|
10763
10883
|
},
|
|
10764
10884
|
"related_cves": [
|
|
10765
10885
|
"CVE-2023-3519",
|
|
10886
|
+
"CVE-2024-21762",
|
|
10766
10887
|
"CVE-2025-12686",
|
|
10767
10888
|
"CVE-2025-59389",
|
|
10768
10889
|
"CVE-2025-62847",
|
|
@@ -10900,6 +11021,7 @@
|
|
|
10900
11021
|
},
|
|
10901
11022
|
"related_cves": [
|
|
10902
11023
|
"CVE-2023-3519",
|
|
11024
|
+
"CVE-2024-21762",
|
|
10903
11025
|
"CVE-2025-12686",
|
|
10904
11026
|
"CVE-2025-59389",
|
|
10905
11027
|
"CVE-2025-62847",
|
|
@@ -11820,6 +11942,7 @@
|
|
|
11820
11942
|
},
|
|
11821
11943
|
"related_cves": [
|
|
11822
11944
|
"CVE-2023-3519",
|
|
11945
|
+
"CVE-2024-21762",
|
|
11823
11946
|
"CVE-2025-12686",
|
|
11824
11947
|
"CVE-2025-59389",
|
|
11825
11948
|
"CVE-2025-62847",
|
|
@@ -12336,6 +12459,7 @@
|
|
|
12336
12459
|
"related_cves": [
|
|
12337
12460
|
"CVE-2023-3519",
|
|
12338
12461
|
"CVE-2023-43472",
|
|
12462
|
+
"CVE-2024-21762",
|
|
12339
12463
|
"CVE-2024-3094",
|
|
12340
12464
|
"CVE-2024-3154",
|
|
12341
12465
|
"CVE-2025-12686",
|
|
@@ -14064,6 +14188,7 @@
|
|
|
14064
14188
|
]
|
|
14065
14189
|
},
|
|
14066
14190
|
"related_cves": [
|
|
14191
|
+
"CVE-2024-21762",
|
|
14067
14192
|
"CVE-2024-3094",
|
|
14068
14193
|
"CVE-2026-0300",
|
|
14069
14194
|
"CVE-2026-30615",
|
|
@@ -2521,7 +2521,11 @@
|
|
|
2521
2521
|
"AU-Essential-8-MFA",
|
|
2522
2522
|
"AU-Essential-8-Patch",
|
|
2523
2523
|
"AU-ISM-1546",
|
|
2524
|
+
"AU-ISM-1808",
|
|
2524
2525
|
"CIS-Controls-v8-10.1",
|
|
2526
|
+
"CIS-Controls-v8-Control6",
|
|
2527
|
+
"CIS-Kubernetes-Benchmark-4.2.13",
|
|
2528
|
+
"CIS-Kubernetes-Benchmark-5.3",
|
|
2525
2529
|
"CIS-Kubernetes-Benchmark-5.7",
|
|
2526
2530
|
"DORA-Art-9",
|
|
2527
2531
|
"DORA-Art28",
|
|
@@ -2539,23 +2543,31 @@
|
|
|
2539
2543
|
"HIPAA-Security-Rule-2026-NPRM-164.310",
|
|
2540
2544
|
"HIPAA-Security-Rule-2026-NPRM-164.312",
|
|
2541
2545
|
"HIPAA-Security-Rule-2026-NPRM-164.314",
|
|
2546
|
+
"ISO-27001-2022-A.5.15",
|
|
2542
2547
|
"ISO-27001-2022-A.5.7",
|
|
2548
|
+
"ISO-27001-2022-A.8.13",
|
|
2543
2549
|
"ISO-27001-2022-A.8.22",
|
|
2544
2550
|
"ISO-27001-2022-A.8.7",
|
|
2551
|
+
"NIS2-Art21-business-continuity",
|
|
2545
2552
|
"NIS2-Art21-identity-management",
|
|
2546
2553
|
"NIS2-Art21-incident-handling",
|
|
2554
|
+
"NIS2-Art21-network-security",
|
|
2547
2555
|
"NIS2-Art21-supply-chain",
|
|
2548
2556
|
"NIS2-Art21-vulnerability-management",
|
|
2549
2557
|
"NIST-800-218-SSDF-PW.4",
|
|
2550
2558
|
"NIST-800-53-AC-3",
|
|
2551
2559
|
"NIST-800-53-AC-6",
|
|
2560
|
+
"NIST-800-53-IA-2",
|
|
2552
2561
|
"NIST-800-53-SC-39",
|
|
2553
2562
|
"NIST-800-53-SC-44",
|
|
2554
2563
|
"NIST-800-53-SI-10",
|
|
2555
2564
|
"NIST-800-53-SR-3",
|
|
2556
2565
|
"NIST-AI-RMF-MAP-3.4",
|
|
2566
|
+
"NIST-AI-RMF-MEASURE-2.7",
|
|
2557
2567
|
"OWASP-LLM-Top-10-2025-LLM05",
|
|
2568
|
+
"OWASP-ML-Top-10-2023-ML06",
|
|
2558
2569
|
"OWASP-Top-10-2021-A06",
|
|
2570
|
+
"PCI-DSS-4.0-5.1",
|
|
2559
2571
|
"PCI-DSS-4.0.1-11.6.1",
|
|
2560
2572
|
"PCI-DSS-4.0.1-12.10.7",
|
|
2561
2573
|
"PCI-DSS-4.0.1-12.3.3",
|