@blamejs/exceptd-skills 0.13.117 → 0.13.118

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
@@ -170,7 +170,7 @@ Cross-cutting playbook `framework` is the natural correlation layer — many pla
170
170
  | `exceptd attest show <sid>` | Print the attestation body. |
171
171
  | `exceptd doctor` | Health checks. `--signatures` verifies Ed25519 chains; `--cves` / `--rfcs` check catalog currency; `--fix` repairs recoverable state; `--ai-config` audits AI-assistant config-file permissions (`~/.claude`, `~/.cursor`, `~/.codeium`, `~/.aider`, `~/.continue`) and flags sensitive files not at mode `0o600` on POSIX (NEW-CTRL-050). |
172
172
  | `exceptd lint` | Skill format lint — frontmatter completeness, required body sections, signature presence. |
173
- | `exceptd refresh --check-advisories` | Poll 15 primary-source advisory feeds — 8 advisory/coordinated-disclosure venues (Qualys TRU, Red Hat RHSA, Ubuntu USN, ZDI, kernel.org commits, oss-security mailing list, JFrog SecOps, CISA current advisories), 4 vendor security research blogs (Microsoft Security Blog, Sysdig, Trail of Bits, Embrace the Red — added in v0.13.14 after DirtyDecrypt fell through the advisory-only set), and 3 sources added in v0.13.17 (BleepingComputer security, The Hacker News, Nightmare-Eclipse GitHub public-events tracker — closes the researcher-GitHub-drop class anchored by MiniPlasma / YellowKey / GreenPlasma / UnDefend, NEW-CTRL-073). Pairs with `lib/cve-regression-watcher.js` (NEW-CTRL-074) which cross-checks poller diffs for historical-CVE references that may indicate silent vendor regression — the class anchored by MiniPlasma re-breaking CVE-2020-17103. Report-only; emits structured `diffs[]` without mutating the catalog. Route promising IDs through `refresh --advisory <CVE-ID> --apply` to enrich. |
173
+ | `exceptd refresh --check-advisories` | Poll 15 primary-source advisory feeds — 8 advisory/coordinated-disclosure venues (Qualys TRU, Red Hat RHSA, Ubuntu USN, ZDI, kernel.org commits, oss-security mailing list, JFrog SecOps, CISA current advisories), 4 vendor security research blogs (Microsoft Security Blog, Sysdig, Trail of Bits, Embrace the Red — added in v0.13.14 after DirtyDecrypt fell through the advisory-only set), and 3 sources added in v0.13.17 (BleepingComputer security, The Hacker News, Nightmare-Eclipse GitLab activity-feed tracker, migrated from GitHub after the account was removed — closes the researcher-drop class anchored by MiniPlasma / YellowKey / GreenPlasma / UnDefend, NEW-CTRL-073). Pairs with `lib/cve-regression-watcher.js` (NEW-CTRL-074) which cross-checks poller diffs for historical-CVE references that may indicate silent vendor regression — the class anchored by MiniPlasma re-breaking CVE-2020-17103. Report-only; emits structured `diffs[]` without mutating the catalog. Route promising IDs through `refresh --advisory <CVE-ID> --apply` to enrich. |
174
174
  | `exceptd watchlist` | Default: aggregate every skill's `forward_watch` entries. `--by-skill` inverts grouping. `--alerts` switches to CVE-catalog pattern alerts (5 patterns: `kernel_lpe_with_poc`, `supply_chain_family`, `ai_discovered_kev`, `active_exploitation_unpatched`, `recent_poc_no_kev_yet`); sorts critical-first, then by RWEP. `--org-scan --org <login>` probes GitHub Search for repos matching threat-actor naming patterns ("A Gift From TeamPCP", "Shai-Hulud", "TeamPCP"); custom patterns via repeatable `--pattern <s>`; set `GITHUB_TOKEN` for private-repo + rate-limit headroom (NEW-CTRL-052). |
175
175
 
176
176
  All verbs support `--help` for per-verb usage. JSON output by default; `--pretty` for indented.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.13.118 — 2026-05-26
4
+
5
+ The researcher-handle tracker behind `refresh --check-advisories` (NEW-CTRL-073) now follows the Nightmare-Eclipse handle on its GitLab public-activity Atom feed instead of the GitHub events API — the handle's GitHub account was removed. The feed count is unchanged and the diff shape is identical: GitLab tag pushes and newly created public projects surface as `researcher-handle-drop` diffs exactly as the GitHub events did, carrying the same `researcher_handle` field. The NEW-CTRL-073 control text is now platform-agnostic (GitHub events or a GitLab activity feed).
6
+
7
+ `exceptd --help` is clearer. A Quick start block at the top shows the three commands most workflows begin with — `discover` to see what applies, `brief` to read what a playbook checks, `run` to investigate — plus the plain-language `ask` entry point for when you don't know which playbook fits. The legacy-verb section now separates the five removed verbs (`plan`, `govern`, `direct`, `look`, `ingest` — which error with a pointer to their replacement) from the deprecated aliases that still work, so the help no longer implies a removed verb is available.
8
+
3
9
  ## 0.13.117 — 2026-05-26
4
10
 
5
11
  CVE catalog — RAGFlow RAG-engine. Adds two flaws in RAGFlow (infiniflow/ragflow), a widely deployed open-source Retrieval-Augmented-Generation engine. **CVE-2024-12450** (NVD CVSS 9.8 CRITICAL; huntr CNA 6.5) — the `web_crawl` function does not filter the supplied URL, yielding full-read SSRF against internal addresses, arbitrary local file read via `file://`, and potential remote code execution through an outdated headless Chromium run with the sandbox disabled; fixed in 0.14.0. Reuses the AI-data-pipeline import SSRF control (NEW-CTRL-105) shared with the Dify `RemoteFileUploadApi` and Label Studio data-pipeline SSRFs. **CVE-2025-69286** (GitHub CNA CVSS v4.0 8.9; NVD v3.1 9.8) — the API key and the assistant/agent share token are generated with the same serializer keyed by the tenant id over a timestamp-based UUIDv1, so the two tokens are mutually derivable; an attacker who obtains a shared assistant/agent link derives the owner's personal API key and takes full control of the account (CWE-340); fixed in 0.22.0. Introduces NEW-CTRL-109: an AI app's API keys and share tokens must be generated from a CSPRNG with an unpredictable per-install secret — never derivable from a tenant id, a timestamp, or another token. Adds CWE-340 (Generation of Predictable Numbers or Identifiers) to the CWE catalog. CVE count 406 → 408.
package/README.md CHANGED
@@ -30,7 +30,7 @@ This platform surfaces what is actually happening right now. Every skill explici
30
30
 
31
31
  ## Status
32
32
 
33
- Pre-1.0. Latest release lives on [GitHub Releases](https://github.com/blamejs/exceptd-skills/releases) and on npm as [`@blamejs/exceptd-skills`](https://www.npmjs.com/package/@blamejs/exceptd-skills) with signed npm provenance attestation and Ed25519-signed skill bodies. The package ships 42 skills across kernel LPE, MCP supply chain, AI-as-C2, prompt injection, post-quantum crypto, SBOM integrity, identity-incident response, and 35 other AI/security domains, plus 10 intelligence catalogs (CVE / ATLAS / ATT&CK / CWE / D3FEND / DLP / RFC / framework gaps / global frameworks / zero-day lessons) covering 35 jurisdictions — the CVE catalog has grown past 400 entries, its size anchored by a v0.13.17 CISA KEV bulk-intake of `dateAdded >= 2024-01-01` actively-exploited vulnerabilities that took it from 68 to 312 in a single pass. 23 investigation playbooks (kernel, MCP, AI-API, framework, SBOM, runtime, hardening, secrets, cred-stores, containers, crypto, plus `webhook-callback-abuse`, `cicd-pipeline-compromise`, `identity-sso-compromise`, `llm-tool-use-exfil`, `post-quantum-migration`, `ai-discovered-cve-triage`, `supply-chain-recovery`, and more), a CLI for discovery and seven-phase investigation runs (`govern → direct → look → detect → analyze → validate → close`), and a nightly auto-refresh job that pulls KEV / NVD / EPSS / GHSA / OSV / IETF deltas plus 15 primary-source advisory + research-blog + tech-press feeds (Qualys TRU, Red Hat RHSA, Ubuntu USN, ZDI, kernel.org, oss-security, JFrog, CISA, Microsoft Security Blog, Sysdig, Trail of Bits, Embrace the Red, BleepingComputer security, The Hacker News, and a GitHub public-events tracker for the Nightmare-Eclipse researcher handle that anchors NEW-CTRL-073) into auto-PRs for editorial review. v0.13.17 also ships `lib/cve-regression-watcher.js` (NEW-CTRL-074) — a complementary detection method that surfaces poller-diff historical-CVE references as candidate silent-regression cases, the class anchored by MiniPlasma (a 2026 PoC drop that re-broke CVE-2020-17103 without any new ID being assigned).
33
+ Pre-1.0. Latest release lives on [GitHub Releases](https://github.com/blamejs/exceptd-skills/releases) and on npm as [`@blamejs/exceptd-skills`](https://www.npmjs.com/package/@blamejs/exceptd-skills) with signed npm provenance attestation and Ed25519-signed skill bodies. The package ships 42 skills across kernel LPE, MCP supply chain, AI-as-C2, prompt injection, post-quantum crypto, SBOM integrity, identity-incident response, and 35 other AI/security domains, plus 10 intelligence catalogs (CVE / ATLAS / ATT&CK / CWE / D3FEND / DLP / RFC / framework gaps / global frameworks / zero-day lessons) covering 35 jurisdictions — the CVE catalog has grown past 400 entries, its size anchored by a v0.13.17 CISA KEV bulk-intake of `dateAdded >= 2024-01-01` actively-exploited vulnerabilities that took it from 68 to 312 in a single pass. 23 investigation playbooks (kernel, MCP, AI-API, framework, SBOM, runtime, hardening, secrets, cred-stores, containers, crypto, plus `webhook-callback-abuse`, `cicd-pipeline-compromise`, `identity-sso-compromise`, `llm-tool-use-exfil`, `post-quantum-migration`, `ai-discovered-cve-triage`, `supply-chain-recovery`, and more), a CLI for discovery and seven-phase investigation runs (`govern → direct → look → detect → analyze → validate → close`), and a nightly auto-refresh job that pulls KEV / NVD / EPSS / GHSA / OSV / IETF deltas plus 15 primary-source advisory + research-blog + tech-press feeds (Qualys TRU, Red Hat RHSA, Ubuntu USN, ZDI, kernel.org, oss-security, JFrog, CISA, Microsoft Security Blog, Sysdig, Trail of Bits, Embrace the Red, BleepingComputer security, The Hacker News, and a GitLab activity-feed tracker for the Nightmare-Eclipse researcher handle that anchors NEW-CTRL-073) into auto-PRs for editorial review. v0.13.17 also ships `lib/cve-regression-watcher.js` (NEW-CTRL-074) — a complementary detection method that surfaces poller-diff historical-CVE references as candidate silent-regression cases, the class anchored by MiniPlasma (a 2026 PoC drop that re-broke CVE-2020-17103 without any new ID being assigned).
34
34
 
35
35
  ---
36
36
 
@@ -154,7 +154,7 @@ Air-gapped operation: run `exceptd refresh --prefetch` on a connected host, copy
154
154
 
155
155
  Fresh-disclosure workflow (v0.12.0): the nightly auto-PR job pulls KEV / NVD / EPSS / IETF / **GHSA** (added in v0.12.0) / **OSV** (added in v0.12.10). KEV typically takes days; NVD ~10 days; GHSA fires within hours of disclosure and covers npm + PyPI + Maven + Go + NuGet + …; OSV aggregates the OSSF Malicious Packages dataset (`MAL-*` keys) + Snyk + RustSec + Mageia + Ubuntu USN + Go Vuln DB + PYSEC + UVI on top of GHSA — useful for malicious-package compromises that don't have CVEs yet (`exceptd refresh --advisory MAL-2026-3083`). New IDs land as drafts (`_auto_imported: true`, `_draft: true`) that the catalog validator treats as warnings, not errors — operators get the fresh entry immediately, editorial review (framework gaps, IoCs, ATLAS/ATT&CK refs) follows via `exceptd refresh --curate <ID>`. For "I want this advisory today, not tomorrow": `exceptd refresh --advisory <CVE-or-GHSA-or-MAL-or-SNYK-or-RUSTSEC-ID> --apply`.
156
156
 
157
- Primary-source advisory polling: `exceptd refresh --check-advisories` polls 15 vendor and coordinated-disclosure feeds — 8 advisory/coordinated-disclosure venues (Qualys TRU, Red Hat RHSA, Ubuntu USN, Zero Day Initiative, kernel.org commits, oss-security mailing list, JFrog SecOps, CISA current advisories), 4 vendor security research blogs added in v0.13.14 (Microsoft Security Blog, Sysdig, Trail of Bits, Embrace the Red), and 3 additions in v0.13.17 (BleepingComputer security, The Hacker News, and a GitHub public-events tracker for the Nightmare-Eclipse researcher handle that anchors NEW-CTRL-073). Combined coverage publishes CVE IDs at T+0 to T+1 — typically 3–14 days ahead of NVD enrichment. The command is report-only: it returns a structured `diffs[]` listing each newly-seen CVE ID with its source attributions and advisory URLs, but does not mutate the catalog. v0.13.17 also adds a complementary detection method (NEW-CTRL-074 / `lib/cve-regression-watcher.js`): the watcher cross-checks poller diffs for historical-CVE references (year ≤ currentYear − 2) and surfaces candidate silent-regression cases — the class anchored by MiniPlasma (a 2026 PoC drop that re-broke CVE-2020-17103 without any new ID being assigned). Operators triage the output and route promising IDs through `exceptd refresh --advisory <CVE-ID> --apply`. Pairs naturally with the daily scheduled remote agent below.
157
+ Primary-source advisory polling: `exceptd refresh --check-advisories` polls 15 vendor and coordinated-disclosure feeds — 8 advisory/coordinated-disclosure venues (Qualys TRU, Red Hat RHSA, Ubuntu USN, Zero Day Initiative, kernel.org commits, oss-security mailing list, JFrog SecOps, CISA current advisories), 4 vendor security research blogs added in v0.13.14 (Microsoft Security Blog, Sysdig, Trail of Bits, Embrace the Red), and 3 additions in v0.13.17 (BleepingComputer security, The Hacker News, and a GitLab activity-feed tracker for the Nightmare-Eclipse researcher handle that anchors NEW-CTRL-073). Combined coverage publishes CVE IDs at T+0 to T+1 — typically 3–14 days ahead of NVD enrichment. The command is report-only: it returns a structured `diffs[]` listing each newly-seen CVE ID with its source attributions and advisory URLs, but does not mutate the catalog. v0.13.17 also adds a complementary detection method (NEW-CTRL-074 / `lib/cve-regression-watcher.js`): the watcher cross-checks poller diffs for historical-CVE references (year ≤ currentYear − 2) and surfaces candidate silent-regression cases — the class anchored by MiniPlasma (a 2026 PoC drop that re-broke CVE-2020-17103 without any new ID being assigned). Operators triage the output and route promising IDs through `exceptd refresh --advisory <CVE-ID> --apply`. Pairs naturally with the daily scheduled remote agent below.
158
158
 
159
159
  CVE-class alert surfacing: `exceptd watchlist --alerts` matches the live `cve-catalog.json` against five operational patterns (`kernel_lpe_with_poc`, `supply_chain_family`, `ai_discovered_kev`, `active_exploitation_unpatched`, `recent_poc_no_kev_yet`) and returns the matches sorted critical-severity-first, then by RWEP. Use as a fast operational triage on a refreshed catalog without scanning every entry by hand.
160
160
 
package/bin/exceptd.js CHANGED
@@ -354,6 +354,19 @@ function printHelp() {
354
354
  Usage: exceptd <command> [args]
355
355
  npx @blamejs/exceptd-skills <command> [args]
356
356
 
357
+ Quick start
358
+ ───────────
359
+
360
+ New here? These three cover most workflows:
361
+
362
+ exceptd discover Scan this directory; list the playbooks that apply.
363
+ exceptd brief <playbook> What a playbook checks — threat context + indicators.
364
+ exceptd run <playbook> Investigate it (add --ci for a pass/fail exit gate).
365
+
366
+ Not sure which playbook fits? Describe the problem in plain language:
367
+
368
+ exceptd ask "someone may have tampered with our npm packages"
369
+
357
370
  Canonical verbs
358
371
  ───────────────
359
372
 
@@ -448,18 +461,25 @@ Canonical verbs
448
461
  Sources: kev|epss|nvd|rfc|pins|ghsa (v0.12.0).
449
462
  ghsa drafts pass validator as warnings.
450
463
 
451
- v0.10.x compatibility (will be removed in v0.13)
452
- ────────────────────────────────────────────────
464
+ Removed verbs (refused these now error with a pointer to the replacement)
465
+ ───────────────────────────────────────────────────────────────────────────
466
+
467
+ Already gone. Invoking one prints a refusal naming its replacement. Listed
468
+ here so old scripts know where each moved:
469
+
470
+ [REMOVED] plan → brief --all
471
+ [REMOVED] govern <pb> → brief <pb> --phase govern
472
+ [REMOVED] direct <pb> → brief <pb> --phase direct
473
+ [REMOVED] look <pb> → brief <pb> --phase look
474
+ [REMOVED] ingest → run
475
+
476
+ Deprecated aliases (still work — prefer the canonical verb)
477
+ ───────────────────────────────────────────────────────────
453
478
 
454
- These verbs still work but emit a one-time deprecation banner. The
455
- [DEPRECATED] prefix is included so \`exceptd help | grep '^ [a-z]'\`
456
- doesn't surface them in the active-verbs list. Migrate to v0.11:
479
+ These still run but emit a one-time deprecation banner. The [DEPRECATED]
480
+ prefix keeps them out of the active-verbs list that
481
+ \`exceptd help | grep '^ [a-z]'\` surfaces. Each maps to a canonical verb:
457
482
 
458
- [DEPRECATED] plan → brief --all
459
- [DEPRECATED] govern <pb> → brief <pb> --phase govern
460
- [DEPRECATED] direct <pb> → brief <pb> --phase direct
461
- [DEPRECATED] look <pb> → brief <pb> --phase look
462
- [DEPRECATED] ingest → run
463
483
  [DEPRECATED] reattest <sid> → attest diff <sid>
464
484
  [DEPRECATED] list-attestations → attest list
465
485
  [DEPRECATED] scan → discover --scan-only
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "schema_version": "1.1.0",
3
- "generated_at": "2026-05-26T23:43:42.161Z",
3
+ "generated_at": "2026-05-27T00:21:07.706Z",
4
4
  "generator": "scripts/build-indexes.js",
5
5
  "source_count": 54,
6
6
  "source_hashes": {
7
- "manifest.json": "3388678960393068730d472d6ecf7c761caaca1de75fffc3019bf15ff157bd88",
7
+ "manifest.json": "c9b4af4a90b3da6eadec358254afe012cfd6c9a4df9944a8f15e92c52afcfd4d",
8
8
  "data/atlas-ttps.json": "8dca8b3a370632548b3d7f465686ac6b47a26920bf6f618db401e349af2a33e2",
9
9
  "data/attack-techniques.json": "5bdfa22b5a9b4880e5340e70546cd6812750fcaf19697342b0a2bc8658fb2356",
10
10
  "data/cve-catalog.json": "5b37ab9f4863738df042a6a71126d99cd403ffdf0c18b2a0ae3de8c08f98dffa",
@@ -15,7 +15,7 @@
15
15
  "data/framework-control-gaps.json": "4a0987b9646258d0fcd8df28d82f0bacd8dfb49e19faeca7a5ccd4e151c01bc1",
16
16
  "data/global-frameworks.json": "9ba563a85f7f8d6c3c957de64945e20925a89d0ed6ea6fc561cf093811acf558",
17
17
  "data/rfc-references.json": "66ef2e1f444a2cf0c2700a754f0a66030bb8a91d9e68394b9537ea1fe8b904fe",
18
- "data/zeroday-lessons.json": "0118bf69f5cab53065ade77389c13e5b20211fa20185d0786322789c9dafd7dc",
18
+ "data/zeroday-lessons.json": "b660d756c816913cfd24211b41d8b67b70881283b028d1b44b6903a6cda8b796",
19
19
  "skills/kernel-lpe-triage/skill.md": "08b3e9815ba481c57c80f5fc0ccbf5bb7cbb41f570c235ba6ff9596b8c07354d",
20
20
  "skills/ai-attack-surface/skill.md": "c4c1eb22a38ca7a959b5725222bab8fbd4f4044a548a93f3e288e6f698334b72",
21
21
  "skills/mcp-agent-trust/skill.md": "89ac89084391d2341b6513fefb1be2d36b93de1c130f057696219c1c59440f13",
@@ -6640,8 +6640,8 @@
6640
6640
  "new_control_requirements": [
6641
6641
  {
6642
6642
  "id": "NEW-CTRL-073",
6643
- "name": "RESEARCHER-HANDLE-GITHUB-RELEASE-TRACKER",
6644
- "description": "When a researcher handle is named in any catalog entry's discovery_attribution_note or poc_description, their public GitHub releases must be polled by the threat-intake pipeline. The handle becomes a known signal source after a single catalog-grade drop and warrants prioritized surfacing of subsequent drops.",
6643
+ "name": "RESEARCHER-HANDLE-ACTIVITY-TRACKER",
6644
+ "description": "When a researcher handle is named in any catalog entry's discovery_attribution_note or poc_description, their public code-platform activity (GitHub events or a GitLab activity feed) must be polled by the threat-intake pipeline. The handle becomes a known signal source after a single catalog-grade drop and warrants prioritized surfacing of subsequent drops.",
6645
6645
  "evidence": "CVE-2020-17103-REREGRESSION-2026, BUG-2026-NIGHTMARE-ECLIPSE-YELLOWKEY, BUG-2026-NIGHTMARE-ECLIPSE-GREENPLASMA, BUG-2026-NIGHTMARE-ECLIPSE-UNDEFEND all share the Nightmare-Eclipse / Chaotic Eclipse handle whose prior drop (BlueHammer / CVE-2026-33825) is already in the catalog. The 12-feed intake polled the right RSS sources but had no handle-tracker, so four catalog-grade drops accumulated unobserved over 5 weeks.",
6646
6646
  "gap_closes": [
6647
6647
  "NIST-800-53-SI-5",
@@ -6699,7 +6699,7 @@
6699
6699
  "new_control_requirements": [
6700
6700
  {
6701
6701
  "id": "NEW-CTRL-073",
6702
- "name": "RESEARCHER-HANDLE-GITHUB-RELEASE-TRACKER",
6702
+ "name": "RESEARCHER-HANDLE-ACTIVITY-TRACKER",
6703
6703
  "description": "Same handle-tracker control as MiniPlasma — Nightmare-Eclipse drop.",
6704
6704
  "evidence": "Same researcher; same intake-pipeline gap.",
6705
6705
  "gap_closes": [
@@ -6740,7 +6740,7 @@
6740
6740
  "new_control_requirements": [
6741
6741
  {
6742
6742
  "id": "NEW-CTRL-073",
6743
- "name": "RESEARCHER-HANDLE-GITHUB-RELEASE-TRACKER",
6743
+ "name": "RESEARCHER-HANDLE-ACTIVITY-TRACKER",
6744
6744
  "description": "Same handle-tracker control — Nightmare-Eclipse drop.",
6745
6745
  "evidence": "Same researcher; same intake-pipeline gap.",
6746
6746
  "gap_closes": [
@@ -6792,7 +6792,7 @@
6792
6792
  },
6793
6793
  {
6794
6794
  "id": "NEW-CTRL-073",
6795
- "name": "RESEARCHER-HANDLE-GITHUB-RELEASE-TRACKER",
6795
+ "name": "RESEARCHER-HANDLE-ACTIVITY-TRACKER",
6796
6796
  "description": "Same handle-tracker control — Nightmare-Eclipse April-cluster drop.",
6797
6797
  "evidence": "Same researcher; same intake-pipeline gap.",
6798
6798
  "gap_closes": [
@@ -169,10 +169,11 @@ const FEEDS = [
169
169
  description: 'The Hacker News RSS — canonical tech-press venue for PoC drops + zero-day weaponization writeups. Anchored MiniPlasma 2026-05-14 writeup which the 12-feed set missed. CVE-ID extraction same as bleepingcomputer-security. v0.13.17.',
170
170
  },
171
171
  {
172
- name: 'nightmare-eclipse-github',
173
- url: 'https://api.github.com/users/Nightmare-Eclipse/events/public',
174
- kind: 'github-events',
175
- description: 'GitHub public-events feed for the Nightmare-Eclipse / Chaotic Eclipse researcher handle. Anchored the BlueHammer (CVE-2026-33825) + MiniPlasma cluster — the handle is the canonical signal source for unpatched Windows LPE / BitLocker / Defender drops since April 2026. NEW-CTRL-073 handle-tracker class; additional handles registered as their drops land in the catalog. v0.13.17.',
172
+ name: 'nightmare-eclipse-gitlab',
173
+ url: 'https://gitlab.com/Nightmare-Eclipse.atom',
174
+ kind: 'gitlab-activity',
175
+ researcher_handle: 'Nightmare-Eclipse',
176
+ description: 'GitLab public-activity Atom feed for the Nightmare-Eclipse / Chaotic Eclipse researcher handle, migrated from GitHub after the account was removed. Anchored the BlueHammer (CVE-2026-33825) + MiniPlasma cluster — the handle is the canonical signal source for unpatched Windows LPE / BitLocker / Defender drops since April 2026. NEW-CTRL-073 handle-tracker class; additional handles registered as their drops land in the catalog.',
176
177
  },
177
178
  ];
178
179
 
@@ -275,6 +276,54 @@ function parseGitHubEvents(body, feed) {
275
276
  return out;
276
277
  }
277
278
 
279
+ /**
280
+ * GitLab public-activity parser — NEW-CTRL-073 researcher-handle tracker.
281
+ *
282
+ * GitLab publishes a public activity Atom feed at
283
+ * https://gitlab.com/<handle>.atom. Each <entry> describes one activity
284
+ * (pushed a tag, created a project/repository, pushed commits). We parse it
285
+ * with the shared Atom tokenizer and classify the entry title into the same
286
+ * event_type vocabulary the GitHub tracker emits, so the handle-drop diff in
287
+ * checkFeed fires identically across both sources. researcher_handle comes
288
+ * from the feed's explicit field (authoritative; the .atom URL also carries
289
+ * the handle as a fallback). This is the migration target after the handle's
290
+ * GitHub account was removed — the .atom feed needs no API token and the
291
+ * existing parseRssAtom tokenizer already handles its XML.
292
+ */
293
+ function parseGitLabActivity(body, feed) {
294
+ const errors = [];
295
+ const entries = parseRssAtom(body, errors);
296
+ const handle = feed.researcher_handle
297
+ || (feed.url.match(/gitlab\.com\/([^/.]+)\.atom/) || [])[1]
298
+ || null;
299
+ return entries.map((it) => {
300
+ const t = `${it.title || ''}`;
301
+ let event_type = 'ActivityEvent';
302
+ if (/pushed (?:new )?tag|created tag|released/i.test(t)) event_type = 'ReleaseEvent';
303
+ else if (/created (?:repository|project)|imported project/i.test(t)) event_type = 'PublicEvent';
304
+ else if (/pushed (?:new commits|to)/i.test(t)) event_type = 'PushEvent';
305
+ else if (/created branch/i.test(t)) event_type = 'CreateEvent';
306
+ // Project path: GitLab activity titles read "<handle> pushed to project
307
+ // <ns>/<repo>"; the entry link path is the secondary source.
308
+ let repo_name = '';
309
+ const titleM = t.match(/project\s+(\S+\/\S+)/i);
310
+ if (titleM) repo_name = titleM[1];
311
+ else {
312
+ const linkM = (it.link || '').match(/gitlab\.com\/([^?#]+?)(?:\/-\/|$)/);
313
+ if (linkM) repo_name = linkM[1];
314
+ }
315
+ return {
316
+ title: it.title || '',
317
+ link: it.link || feed.url,
318
+ published: it.published || '',
319
+ body: it.body || it.title || '',
320
+ researcher_handle: handle,
321
+ event_type,
322
+ repo_name,
323
+ };
324
+ });
325
+ }
326
+
278
327
  /**
279
328
  * Fetch a feed body. In fixture / cache modes, read from disk.
280
329
  */
@@ -316,6 +365,9 @@ async function checkFeed(feed, ctx) {
316
365
  } else if (feed.kind === 'github-events') {
317
366
  items = parseGitHubEvents(res.body, feed);
318
367
  items = items.map((it) => ({ ...it, cve_ids: extractCveIds(`${it.title} ${it.body} ${it.link}`) }));
368
+ } else if (feed.kind === 'gitlab-activity') {
369
+ items = parseGitLabActivity(res.body, feed);
370
+ items = items.map((it) => ({ ...it, cve_ids: extractCveIds(`${it.title} ${it.body} ${it.link}`) }));
319
371
  } else {
320
372
  items = parseRssAtom(res.body);
321
373
  items = items.map((it) => ({ ...it, cve_ids: extractCveIds(`${it.title} ${it.body} ${it.link}`) }));
@@ -352,7 +404,7 @@ async function checkFeed(feed, ctx) {
352
404
  // researcher publishes alias name, vendor advisory + CVE assignment
353
405
  // arrive days / weeks later). The diff carries handle + event_type
354
406
  // so downstream triage can prioritise without waiting for an ID.
355
- if (feed.kind === 'github-events' && it.cve_ids.length === 0 && (it.event_type === 'ReleaseEvent' || it.event_type === 'PublicEvent')) {
407
+ if ((feed.kind === 'github-events' || feed.kind === 'gitlab-activity') && it.cve_ids.length === 0 && (it.event_type === 'ReleaseEvent' || it.event_type === 'PublicEvent')) {
356
408
  diffs.push({
357
409
  id: `HANDLE:${it.researcher_handle || feed.name}:${it.repo_name || 'unknown'}@${(it.published || '').slice(0, 10)}`,
358
410
  source: feed.name,
@@ -463,6 +515,7 @@ module.exports = {
463
515
  FEEDS,
464
516
  extractCveIds,
465
517
  parseRssAtom,
518
+ parseGitLabActivity,
466
519
  parseCsafIndex,
467
520
  parseGitHubEvents,
468
521
  };
package/manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "exceptd-security",
3
- "version": "0.13.117",
3
+ "version": "0.13.118",
4
4
  "description": "AI security skills grounded in mid-2026 threat reality, not stale framework documentation",
5
5
  "homepage": "https://exceptd.com",
6
6
  "license": "Apache-2.0",
@@ -53,7 +53,7 @@
53
53
  ],
54
54
  "last_threat_review": "2026-05-15",
55
55
  "signature": "lXhZgoIrrVloO3XaTvo/43AxZn4mwErstd7DR0O/oVhD3AOGODM4HqrageYEou9WKOdMEGP5mJNTjJsXdP5NDA==",
56
- "signed_at": "2026-05-26T23:40:55.119Z",
56
+ "signed_at": "2026-05-27T00:18:18.127Z",
57
57
  "cwe_refs": [
58
58
  "CWE-125",
59
59
  "CWE-362",
@@ -123,7 +123,7 @@
123
123
  ],
124
124
  "last_threat_review": "2026-05-17",
125
125
  "signature": "ztSKk/zFMFbT12qRcEeBKpydBn7fTT86KxMmor0DTCoKQWk5fJ0fSInfP1XMSB6rFk4/SuSjKVxQRMKVJ5a+Cg==",
126
- "signed_at": "2026-05-26T23:40:55.120Z",
126
+ "signed_at": "2026-05-27T00:18:18.128Z",
127
127
  "cwe_refs": [
128
128
  "CWE-1039",
129
129
  "CWE-1426",
@@ -196,7 +196,7 @@
196
196
  ],
197
197
  "last_threat_review": "2026-05-17",
198
198
  "signature": "K6QdPHNK5c4K5QFjrW0QsUhjp71D7SOisSoulwPNSvKRdi2rY+yg0kdckijBMkLMsVPyUvcC9giu93mKJ1OZDg==",
199
- "signed_at": "2026-05-26T23:40:55.121Z",
199
+ "signed_at": "2026-05-27T00:18:18.129Z",
200
200
  "cwe_refs": [
201
201
  "CWE-22",
202
202
  "CWE-345",
@@ -248,7 +248,7 @@
248
248
  "framework_gaps": [],
249
249
  "last_threat_review": "2026-05-22",
250
250
  "signature": "Qd3SBWmUAaaT++e1Ry2wBIz/dCBmNBMl0+4Rb0etvJLES0fIBEAkU1mTbgNZnT5XOg9J5twdUpymWtmKnDDQCQ==",
251
- "signed_at": "2026-05-26T23:40:55.121Z"
251
+ "signed_at": "2026-05-27T00:18:18.129Z"
252
252
  },
253
253
  {
254
254
  "name": "compliance-theater",
@@ -279,7 +279,7 @@
279
279
  ],
280
280
  "last_threat_review": "2026-05-22",
281
281
  "signature": "F2Shxae0ua0gPtvwzTRVzzHaIgJcFDRT3/akLUAZ4aaMQhkleKkcTaTpkjp+pTVEdPfLeLGNCeAOMs+whVYOBg==",
282
- "signed_at": "2026-05-26T23:40:55.122Z"
282
+ "signed_at": "2026-05-27T00:18:18.130Z"
283
283
  },
284
284
  {
285
285
  "name": "exploit-scoring",
@@ -308,7 +308,7 @@
308
308
  ],
309
309
  "last_threat_review": "2026-05-18",
310
310
  "signature": "NA1hoQycvQhSUoG5rwlXX0mOVmGxoXRVezkELGEA2nZOdGis4gXkHT3O6Sfw7zxE4JuMrsCb65TEeOWk9WEPDg==",
311
- "signed_at": "2026-05-26T23:40:55.122Z"
311
+ "signed_at": "2026-05-27T00:18:18.130Z"
312
312
  },
313
313
  {
314
314
  "name": "rag-pipeline-security",
@@ -345,7 +345,7 @@
345
345
  ],
346
346
  "last_threat_review": "2026-05-22",
347
347
  "signature": "W3pS8lnaCP96TQzsJpG5d5yv5IwgaQyS4Z2Ctcz5BOJf6LbajSIgeDgTZ4f4Bhr5m4E7KsgWGjZS4x7Fwd33BQ==",
348
- "signed_at": "2026-05-26T23:40:55.122Z",
348
+ "signed_at": "2026-05-27T00:18:18.131Z",
349
349
  "cwe_refs": [
350
350
  "CWE-1395",
351
351
  "CWE-1426"
@@ -405,7 +405,7 @@
405
405
  ],
406
406
  "last_threat_review": "2026-05-17",
407
407
  "signature": "/WDGygh1Ck4yWlBWDGtEUVCqKB8d+UaJXoAoBXujtt+GAl8JbMNpaN1TvI0WkEltQ9dTxaAzSn20/eVDqv8iDQ==",
408
- "signed_at": "2026-05-26T23:40:55.123Z",
408
+ "signed_at": "2026-05-27T00:18:18.131Z",
409
409
  "d3fend_refs": [
410
410
  "D3-CA",
411
411
  "D3-CSPP",
@@ -440,7 +440,7 @@
440
440
  "framework_gaps": [],
441
441
  "last_threat_review": "2026-05-22",
442
442
  "signature": "za1NKBpy9LC91F/ESO/qhUfmvVr8GNItQOjR5OJLeHm+2dQ9HHiFWQK2eo53V/n/0uhubuggURA3yS6kJuWwBg==",
443
- "signed_at": "2026-05-26T23:40:55.123Z",
443
+ "signed_at": "2026-05-27T00:18:18.131Z",
444
444
  "cwe_refs": [
445
445
  "CWE-1188"
446
446
  ],
@@ -474,7 +474,7 @@
474
474
  "framework_gaps": [],
475
475
  "last_threat_review": "2026-05-18",
476
476
  "signature": "xiHAhhdufm9hCKU8PLiPE0MX65ej2F4OZwtlWLGLCiie9/km+Kiqbt192LcMvr94v83C98pb9wIaqFsFWft6AQ==",
477
- "signed_at": "2026-05-26T23:40:55.123Z",
477
+ "signed_at": "2026-05-27T00:18:18.132Z",
478
478
  "forward_watch": [
479
479
  "New AI attack classes as ATLAS v6 publishes",
480
480
  "Post-quantum adversary capability timeline",
@@ -513,7 +513,7 @@
513
513
  "framework_gaps": [],
514
514
  "last_threat_review": "2026-05-01",
515
515
  "signature": "oYsSk35N2Uzq7MRofACykylcVwkgPhI4luWZ14vmQT+gUKLyZiKVOUJbe1+7lGl6BYPRN0sUDQ0f7S5Eu5w2Ag==",
516
- "signed_at": "2026-05-26T23:40:55.124Z"
516
+ "signed_at": "2026-05-27T00:18:18.132Z"
517
517
  },
518
518
  {
519
519
  "name": "zeroday-gap-learn",
@@ -540,7 +540,7 @@
540
540
  "framework_gaps": [],
541
541
  "last_threat_review": "2026-05-18",
542
542
  "signature": "igRqYyU1unRFH40BsPyAR62SPrk8QZv8dPGb8S9O9EvLCNOZAzm3t+HdT/NKqzWHwrpomOzkkkyLfYI/0qTUDA==",
543
- "signed_at": "2026-05-26T23:40:55.124Z",
543
+ "signed_at": "2026-05-27T00:18:18.133Z",
544
544
  "forward_watch": [
545
545
  "New CISA KEV entries",
546
546
  "New ATLAS TTP additions in each ATLAS release",
@@ -604,7 +604,7 @@
604
604
  ],
605
605
  "last_threat_review": "2026-05-22",
606
606
  "signature": "i/17u4kJiSpcZAz7LnTyRePFugQOstQ1P4kVoe0oGf4E2/j8oIN9U9DccjUn/YHZhKWIJ2AILG/DMhvMrr3bBg==",
607
- "signed_at": "2026-05-26T23:40:55.124Z",
607
+ "signed_at": "2026-05-27T00:18:18.133Z",
608
608
  "cwe_refs": [
609
609
  "CWE-327"
610
610
  ],
@@ -652,7 +652,7 @@
652
652
  ],
653
653
  "last_threat_review": "2026-05-22",
654
654
  "signature": "QuOVaQ4E2Sl39TClbhZ7HA9XrYAyRrDL44HY3RTE7aWLue0hV2cxaBt40ALGmHS++631QGFDlZTLZI77Tr6nAA==",
655
- "signed_at": "2026-05-26T23:40:55.125Z"
655
+ "signed_at": "2026-05-27T00:18:18.133Z"
656
656
  },
657
657
  {
658
658
  "name": "security-maturity-tiers",
@@ -689,7 +689,7 @@
689
689
  ],
690
690
  "last_threat_review": "2026-05-01",
691
691
  "signature": "8Px1s2lDj10/Q6erwEQlXgUHM1+OTruUR8qAHPX7Oo3k/l69N6P9sm0PsafS9wDFtj9l5C/OiLiFgzMlMt6vBw==",
692
- "signed_at": "2026-05-26T23:40:55.125Z",
692
+ "signed_at": "2026-05-27T00:18:18.134Z",
693
693
  "cwe_refs": [
694
694
  "CWE-1188"
695
695
  ]
@@ -724,7 +724,7 @@
724
724
  "framework_gaps": [],
725
725
  "last_threat_review": "2026-05-11",
726
726
  "signature": "urRcataVWg6/utyEkSiOWoNxTL8sABRjPR7ShyDfZGnAozFph/yDktSoaPVxQDXwu9EfJE+qhUW5OYR/yJECBQ==",
727
- "signed_at": "2026-05-26T23:40:55.125Z"
727
+ "signed_at": "2026-05-27T00:18:18.134Z"
728
728
  },
729
729
  {
730
730
  "name": "attack-surface-pentest",
@@ -796,7 +796,7 @@
796
796
  "Pwn2Own Berlin 2026 (disclosed 2026-05-14, embargo ends 2026-08-12) — Microsoft Edge 4-bug sandbox escape by Orange Tsai (DEVCORE); forward-watch only (browser sandbox, out of current playbook scope); track Microsoft Edge security advisory and KEV add"
797
797
  ],
798
798
  "signature": "C7lv65/Ecm8JJgSKxrX5lxx0YFzKWtrIQSKp+vy50I5e8945s1JmifGUUrnQwRQhq/Pkv7EmfiH5XSO8h75bDg==",
799
- "signed_at": "2026-05-26T23:40:55.126Z"
799
+ "signed_at": "2026-05-27T00:18:18.134Z"
800
800
  },
801
801
  {
802
802
  "name": "fuzz-testing-strategy",
@@ -856,7 +856,7 @@
856
856
  "OSS-Fuzz-Gen / AI-assisted harness generation becoming the default expectation for OSS maintainers"
857
857
  ],
858
858
  "signature": "Z7ypCUnXx8JpLtgxxB6RHNi39w74AmrGY1N4ofAGCXhkuM2EaFVm1AU0dvl9UQ1bVLfHKEDGqMO/TwlIY7RABg==",
859
- "signed_at": "2026-05-26T23:40:55.126Z"
859
+ "signed_at": "2026-05-27T00:18:18.135Z"
860
860
  },
861
861
  {
862
862
  "name": "dlp-gap-analysis",
@@ -931,7 +931,7 @@
931
931
  "Quebec Law 25, India DPDPA, KSA PDPL enforcement actions naming AI-tool prompt data as in-scope personal information"
932
932
  ],
933
933
  "signature": "IgEnpHOhCftAyfUNdKsjbrd169T9pJkk/rRM2ZEna+H18y7p5x48+1kME2sJMZjJuyAdQFBJi8PJXZFwLGI+DQ==",
934
- "signed_at": "2026-05-26T23:40:55.126Z"
934
+ "signed_at": "2026-05-27T00:18:18.135Z"
935
935
  },
936
936
  {
937
937
  "name": "supply-chain-integrity",
@@ -1010,7 +1010,7 @@
1010
1010
  "Pwn2Own Berlin 2026 (disclosed 2026-05-14, embargo ends 2026-08-12) — NVIDIA Megatron Bridge path traversal by haehae; AI training-stack file-system trust boundary; track patch and SBOM-attestation impact"
1011
1011
  ],
1012
1012
  "signature": "pcLrM98A3vUSZRjwNAk0aZ9umvOwB41XCLLsCOy/IebB2F/06oIrGUKkMHtHwm4pTVPShMMcKdZQQ3jz30FnCg==",
1013
- "signed_at": "2026-05-26T23:40:55.127Z"
1013
+ "signed_at": "2026-05-27T00:18:18.135Z"
1014
1014
  },
1015
1015
  {
1016
1016
  "name": "defensive-countermeasure-mapping",
@@ -1067,7 +1067,7 @@
1067
1067
  ],
1068
1068
  "last_threat_review": "2026-05-11",
1069
1069
  "signature": "G5q5elh7Q7eu2xcwTVQJGDTGfvZR0OGQaLSLJPb2wjzCHFF8PWuZfCHZdjjqisiRzRWPyLlzgfHeMJqOdy7cBw==",
1070
- "signed_at": "2026-05-26T23:40:55.127Z"
1070
+ "signed_at": "2026-05-27T00:18:18.136Z"
1071
1071
  },
1072
1072
  {
1073
1073
  "name": "identity-assurance",
@@ -1134,7 +1134,7 @@
1134
1134
  "d3fend_refs": [],
1135
1135
  "last_threat_review": "2026-05-11",
1136
1136
  "signature": "Wv5hGMeHjlaQK1zwicVCA7AvdKgJBgvcjdpGM9Ywahh9tagAKhbkOjybowDQZzu7OZ3bDkbh6pBYc1Sdwr6NAA==",
1137
- "signed_at": "2026-05-26T23:40:55.127Z"
1137
+ "signed_at": "2026-05-27T00:18:18.136Z"
1138
1138
  },
1139
1139
  {
1140
1140
  "name": "ot-ics-security",
@@ -1190,7 +1190,7 @@
1190
1190
  "d3fend_refs": [],
1191
1191
  "last_threat_review": "2026-05-11",
1192
1192
  "signature": "8t5qKHd3yWi57dvG36YQkLN/X9bQWqtEiYjay4IfSmqhJpM/xXPaQVKNGz3wscrO8OLKUZ0OaX7Mj5kzpgBKBQ==",
1193
- "signed_at": "2026-05-26T23:40:55.127Z"
1193
+ "signed_at": "2026-05-27T00:18:18.136Z"
1194
1194
  },
1195
1195
  {
1196
1196
  "name": "coordinated-vuln-disclosure",
@@ -1242,7 +1242,7 @@
1242
1242
  "NYDFS 23 NYCRR 500 amendments potentially adding explicit CVD program requirements"
1243
1243
  ],
1244
1244
  "signature": "GDGt4UPqBa04PjlpSmpyihGzd3OgfBN7jaAK5tfwp+LRSs3ygKOdbeivUCCHNagTY1hE6hG2Ou40ADfBFuXeAg==",
1245
- "signed_at": "2026-05-26T23:40:55.128Z"
1245
+ "signed_at": "2026-05-27T00:18:18.137Z"
1246
1246
  },
1247
1247
  {
1248
1248
  "name": "threat-modeling-methodology",
@@ -1292,7 +1292,7 @@
1292
1292
  "PASTA v2 updates incorporating AI/ML application threats"
1293
1293
  ],
1294
1294
  "signature": "rFBpOQEJUPpl+v88Lw/WqVJRhTl80vy0VbPAbzQj3Q0suJRRrJg368I9uKu5LXIBKFDvKxnGIcIzbGg9NUtaCA==",
1295
- "signed_at": "2026-05-26T23:40:55.128Z"
1295
+ "signed_at": "2026-05-27T00:18:18.137Z"
1296
1296
  },
1297
1297
  {
1298
1298
  "name": "webapp-security",
@@ -1366,7 +1366,7 @@
1366
1366
  "d3fend_refs": [],
1367
1367
  "last_threat_review": "2026-05-11",
1368
1368
  "signature": "ux85YI4t2mVHOyt744Yin1HHy+z11JIFygjKfFfQOBBl5QVV3A267jeIy7utix85irMcpZm/T3yx/ooqiK2tBA==",
1369
- "signed_at": "2026-05-26T23:40:55.128Z",
1369
+ "signed_at": "2026-05-27T00:18:18.137Z",
1370
1370
  "forward_watch": [
1371
1371
  "NGINX Rift CVE-2026-42945 (disclosed 2026-05-13, source depthfirst) — KEV-watch predicted CISA KEV listing by 2026-05-29; AI-assisted discovery angle; track for active-exploitation confirmation and patch advisory affecting front-door web app deployments"
1372
1372
  ]
@@ -1419,7 +1419,7 @@
1419
1419
  "d3fend_refs": [],
1420
1420
  "last_threat_review": "2026-05-15",
1421
1421
  "signature": "IIXnkZ5ZNqFwOto5KfytADTLLZLoyXNZACD1ORZ40P1HUAQxe6u2uyXFzzsfuob4Uy06jNkRGr2FFgCphUH1Cw==",
1422
- "signed_at": "2026-05-26T23:40:55.129Z"
1422
+ "signed_at": "2026-05-27T00:18:18.138Z"
1423
1423
  },
1424
1424
  {
1425
1425
  "name": "sector-healthcare",
@@ -1479,7 +1479,7 @@
1479
1479
  "d3fend_refs": [],
1480
1480
  "last_threat_review": "2026-05-11",
1481
1481
  "signature": "AhF9KF8ZBlDteciV+F8IBSmFVYCvQOn44GmD4rZjgLoPxfIv/QE1/vSkK32zyqDKtHWkLSXExbkkPkxA/V6dDw==",
1482
- "signed_at": "2026-05-26T23:40:55.129Z"
1482
+ "signed_at": "2026-05-27T00:18:18.138Z"
1483
1483
  },
1484
1484
  {
1485
1485
  "name": "sector-financial",
@@ -1560,7 +1560,7 @@
1560
1560
  "TIBER-EU framework v2.0 alignment with DORA TLPT RTS (JC 2024/40); cross-recognition with CBEST and iCAST"
1561
1561
  ],
1562
1562
  "signature": "HQgZvb4ReziEz5rNFr8i/O8/rJEZR+iHRROT7m/D2QUqhrcNISPkYXENsUZlG8xapzy/Ik92ehkseyj4hdmhCQ==",
1563
- "signed_at": "2026-05-26T23:40:55.130Z"
1563
+ "signed_at": "2026-05-27T00:18:18.139Z"
1564
1564
  },
1565
1565
  {
1566
1566
  "name": "sector-federal-government",
@@ -1629,7 +1629,7 @@
1629
1629
  "Australia PSPF 2024 revision and ISM quarterly updates — track for Essential Eight Maturity Level requirements for federal entities"
1630
1630
  ],
1631
1631
  "signature": "linxmsXZiOYtcs71sSWgGCrvb8xQfmxmtTY5PRvZJ0/8FgJulo0tQtejzexYG775s7XhjAmGsDP238BQTQ8ADA==",
1632
- "signed_at": "2026-05-26T23:40:55.130Z"
1632
+ "signed_at": "2026-05-27T00:18:18.139Z"
1633
1633
  },
1634
1634
  {
1635
1635
  "name": "sector-energy",
@@ -1694,7 +1694,7 @@
1694
1694
  "ICS-CERT advisory feed (https://www.cisa.gov/news-events/cybersecurity-advisories/ics-advisories) for vendor CVEs in Siemens, Rockwell, Schneider Electric, ABB, GE Vernova, Hitachi Energy, AVEVA / OSIsoft PI"
1695
1695
  ],
1696
1696
  "signature": "JjBfc0ovta560Clk0x3QGRM5osFJDwcvpy3rT7QEGdCIL827jzE8QCow1C8deXq+4JhY2sA/d7/8IsxikdlkCg==",
1697
- "signed_at": "2026-05-26T23:40:55.130Z"
1697
+ "signed_at": "2026-05-27T00:18:18.140Z"
1698
1698
  },
1699
1699
  {
1700
1700
  "name": "sector-telecom",
@@ -1780,7 +1780,7 @@
1780
1780
  "O-RAN SFG / WG11 security specifications"
1781
1781
  ],
1782
1782
  "signature": "JWVxKFoKrbX4d+Tko1d4OBdwyg25MfFFKn4CT6E/CzH+YwnU3T6Y76uBQIKg3+gIGTvPduqyvQwQQ5FxKDuPBw==",
1783
- "signed_at": "2026-05-26T23:40:55.130Z"
1783
+ "signed_at": "2026-05-27T00:18:18.140Z"
1784
1784
  },
1785
1785
  {
1786
1786
  "name": "api-security",
@@ -1849,7 +1849,7 @@
1849
1849
  "d3fend_refs": [],
1850
1850
  "last_threat_review": "2026-05-18",
1851
1851
  "signature": "BmCRCestWqr55+fCynEhtAl5NWLT+xLTkpwS0Icp3SaoZOw/ce3Y6TtqjHRSKn4CBJq7YDiLRWxmhO3MStvOAA==",
1852
- "signed_at": "2026-05-26T23:40:55.131Z",
1852
+ "signed_at": "2026-05-27T00:18:18.140Z",
1853
1853
  "forward_watch": [
1854
1854
  "NGINX Rift CVE-2026-42945 (disclosed 2026-05-13, source depthfirst) — KEV-watch predicted CISA KEV listing by 2026-05-29; track for active-exploitation confirmation and patch advisory affecting API gateway / reverse-proxy deployments",
1855
1855
  "Pwn2Own Berlin 2026 (disclosed 2026-05-14, embargo ends 2026-08-12) — LiteLLM 3-bug SSRF + Code Injection chain by k3vg3n; LLM-proxy API surface; track upstream patch and CVE assignments",
@@ -1935,7 +1935,7 @@
1935
1935
  "CISA KEV additions for cloud-control-plane CVEs (IMDSv1 abuses, federation token mishandling, cross-tenant boundary failures); CISA Cybersecurity Advisories for cross-cloud advisories"
1936
1936
  ],
1937
1937
  "signature": "/DV3pmZwrRySrk1OCbyI+0BQESacjupJfUX3eC2NGtXuYOBro0vndIP+z27heFxumnjU3a9sfla7/U9X+pqnDw==",
1938
- "signed_at": "2026-05-26T23:40:55.131Z"
1938
+ "signed_at": "2026-05-27T00:18:18.141Z"
1939
1939
  },
1940
1940
  {
1941
1941
  "name": "container-runtime-security",
@@ -1997,7 +1997,7 @@
1997
1997
  "d3fend_refs": [],
1998
1998
  "last_threat_review": "2026-05-15",
1999
1999
  "signature": "E2UGSf9ATyYgzBr8uM/0ubOUmDqo1jVA7f9mVxv6LHfWGCNuQNXDyuNou9VAmUCeeXEeUYIi3AFjXkJqpOkxDA==",
2000
- "signed_at": "2026-05-26T23:40:55.131Z",
2000
+ "signed_at": "2026-05-27T00:18:18.141Z",
2001
2001
  "forward_watch": [
2002
2002
  "Pwn2Own Berlin 2026 (disclosed 2026-05-14, embargo ends 2026-08-12) — NVIDIA Container Toolkit container escape ($50K award) by chompie / IBM X-Force XOR; high-severity container/hypervisor boundary break; track patch and KEV add post-embargo"
2003
2003
  ]
@@ -2071,7 +2071,7 @@
2071
2071
  "MITRE ATLAS v5.6.0 (released May 2026) shipped the AML.T0010 sub-technique expansion this forecast tracked plus new techniques (\"Publish Poisoned AI Agent Tool\", \"Escape to Host\"); inventory now 16 tactics, 84 techniques, 56 sub-techniques. Forward watch: subsequent ATLAS minor and major releases — track next-cadence updates to agentic-AI TTPs and MLOps-pipeline-specific techniques"
2072
2072
  ],
2073
2073
  "signature": "IL+DlRCDJN/p08iiJCFkasKcoyjcB0uWrJ6ORLjQcS1HrUa5Xt62QxVjYPHzaevlm5y36ZdmfESqsZJmzK3lCg==",
2074
- "signed_at": "2026-05-26T23:40:55.132Z"
2074
+ "signed_at": "2026-05-27T00:18:18.141Z"
2075
2075
  },
2076
2076
  {
2077
2077
  "name": "incident-response-playbook",
@@ -2133,7 +2133,7 @@
2133
2133
  "NYDFS 23 NYCRR 500.17 amendments tightening ransom-payment 24h disclosure operationalization"
2134
2134
  ],
2135
2135
  "signature": "MmjLjlmOMLjhJJ4ZfR8MYlHam+ZB+eSqfh6Nv+DecaG4O5zeo9DBP/iL3cbyDVZxmhnhivgJild2ccYeWTeZAg==",
2136
- "signed_at": "2026-05-26T23:40:55.132Z"
2136
+ "signed_at": "2026-05-27T00:18:18.142Z"
2137
2137
  },
2138
2138
  {
2139
2139
  "name": "ransomware-response",
@@ -2213,7 +2213,7 @@
2213
2213
  ],
2214
2214
  "last_threat_review": "2026-05-22",
2215
2215
  "signature": "ssueL03g9fWlhXpTe+IiY5l7RqQkunN4DTN5QETKE+VOX+qggdjAR8PONxk77ol4xWYmHrM/VcH8CNtXUEvgBA==",
2216
- "signed_at": "2026-05-26T23:40:55.132Z"
2216
+ "signed_at": "2026-05-27T00:18:18.142Z"
2217
2217
  },
2218
2218
  {
2219
2219
  "name": "email-security-anti-phishing",
@@ -2266,7 +2266,7 @@
2266
2266
  "d3fend_refs": [],
2267
2267
  "last_threat_review": "2026-05-18",
2268
2268
  "signature": "rK+WnuS+9tqEABmwc0jO/PEmxcLjG1/tmUb897HsClQeKzf+TQOlwBE+OsbtuKxpjYNwur62Xxs3TxObkwm8Cw==",
2269
- "signed_at": "2026-05-26T23:40:55.133Z"
2269
+ "signed_at": "2026-05-27T00:18:18.143Z"
2270
2270
  },
2271
2271
  {
2272
2272
  "name": "age-gates-child-safety",
@@ -2334,7 +2334,7 @@
2334
2334
  "US state adult-site age-verification laws — 19+ states by mid-2026 (TX HB 18 upheld by SCOTUS June 2025 in Free Speech Coalition v. Paxton); track ongoing challenges in remaining states"
2335
2335
  ],
2336
2336
  "signature": "Rgho5TOFUL1txOzcVR0kASCNdovSU4yt99JlGilJlJRyg0A+BdeeQYrZrhPF6Vx2reUAVG0BeHfcZtSbi+cwCg==",
2337
- "signed_at": "2026-05-26T23:40:55.133Z"
2337
+ "signed_at": "2026-05-27T00:18:18.143Z"
2338
2338
  },
2339
2339
  {
2340
2340
  "name": "cloud-iam-incident",
@@ -2414,7 +2414,7 @@
2414
2414
  ],
2415
2415
  "last_threat_review": "2026-05-15",
2416
2416
  "signature": "e/kij7GtKaytROyIj7V5RH+FC9WtmVFzrmG2kIlNDNn29ep/CRNlIQKwXLpzo/81AIf634pmdr1qy/+vwIuUDA==",
2417
- "signed_at": "2026-05-26T23:40:55.133Z",
2417
+ "signed_at": "2026-05-27T00:18:18.143Z",
2418
2418
  "forward_watch": [
2419
2419
  "AWS IAM Identity Center session-policy refresh and step-up-on-admin enforcement (anticipated 2026-H2 release)",
2420
2420
  "GCP Workload Identity Federation principal-set attribute mapping tightening (post-2026 Q3 Federation hardening guide)",
@@ -2508,7 +2508,7 @@
2508
2508
  ],
2509
2509
  "last_threat_review": "2026-05-15",
2510
2510
  "signature": "ew9Kglc9fAZzbn0ZIfGP7WSK/j4eV2VhSvpy+s5bEfNEVYIMa2kZjnGBapgUsyGDLes9H9K2ovjQyX17+GKiBw==",
2511
- "signed_at": "2026-05-26T23:40:55.134Z",
2511
+ "signed_at": "2026-05-27T00:18:18.144Z",
2512
2512
  "forward_watch": [
2513
2513
  "Entra ID conditional access evolution post-Midnight Blizzard — Microsoft's 2025-2026 commitments on legacy-tenant MFA enforcement and OAuth-app consent gating",
2514
2514
  "Okta IPSIE (Interoperability Profile for Secure Identity in the Enterprise) OpenID Foundation working-group output and adoption timeline",
@@ -2526,6 +2526,6 @@
2526
2526
  ],
2527
2527
  "manifest_signature": {
2528
2528
  "algorithm": "Ed25519",
2529
- "signature_base64": "TeYunG3NTB9qu3tWHt96R4IPUQL5qxqW7Rb7qP958a8z8YQqBSJAFWAHilW0+sMoNt6f4iXSPuFWtlQrjHtTAA=="
2529
+ "signature_base64": "0Hu7OAc4qOKePF0hH8WyYUxS3id1UhN2cD6b12UytkCe76eYPXEXxQPUnB9piUKpLwYUnqbwdN7VpN0dqC67Bw=="
2530
2530
  }
2531
2531
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blamejs/exceptd-skills",
3
- "version": "0.13.117",
3
+ "version": "0.13.118",
4
4
  "description": "AI security skills grounded in mid-2026 threat reality, not stale framework documentation. 42 skills, 11 catalogs (406 CVEs / 171 CWEs / 805 ATT&CK + ICS / 170 ATLAS / 468 D3FEND / 7476 RFCs), 35 jurisdictions, 10-class catalog gap detector + budget gate, real XML parser + canonical-form diff + content-pattern regression detection, Ed25519-signed.",
5
5
  "keywords": [
6
6
  "ai-security",
package/sbom.cdx.json CHANGED
@@ -1,22 +1,22 @@
1
1
  {
2
2
  "bomFormat": "CycloneDX",
3
3
  "specVersion": "1.6",
4
- "serialNumber": "urn:uuid:22de764c-d633-46d7-a075-802b2df984fa",
4
+ "serialNumber": "urn:uuid:99b19080-e49c-4648-ab4b-e5f93aea5e54",
5
5
  "version": 1,
6
6
  "metadata": {
7
- "timestamp": "2044-07-15T21:17:00.000Z",
7
+ "timestamp": "2107-09-18T08:08:32.000Z",
8
8
  "tools": [
9
9
  {
10
10
  "vendor": "blamejs",
11
11
  "name": "scripts/refresh-sbom.js",
12
- "version": "0.13.117"
12
+ "version": "0.13.118"
13
13
  }
14
14
  ],
15
15
  "component": {
16
- "bom-ref": "pkg:npm/@blamejs/exceptd-skills@0.13.117",
16
+ "bom-ref": "pkg:npm/@blamejs/exceptd-skills@0.13.118",
17
17
  "type": "application",
18
18
  "name": "@blamejs/exceptd-skills",
19
- "version": "0.13.117",
19
+ "version": "0.13.118",
20
20
  "description": "AI security skills grounded in mid-2026 threat reality, not stale framework documentation. 42 skills, 11 catalogs (406 CVEs / 171 CWEs / 805 ATT&CK + ICS / 170 ATLAS / 468 D3FEND / 7476 RFCs), 35 jurisdictions, 10-class catalog gap detector + budget gate, real XML parser + canonical-form diff + content-pattern regression detection, Ed25519-signed.",
21
21
  "licenses": [
22
22
  {
@@ -25,17 +25,17 @@
25
25
  }
26
26
  }
27
27
  ],
28
- "purl": "pkg:npm/%40blamejs/exceptd-skills@0.13.117",
28
+ "purl": "pkg:npm/%40blamejs/exceptd-skills@0.13.118",
29
29
  "hashes": [
30
30
  {
31
31
  "alg": "SHA-256",
32
- "content": "985bf49c2172f805b97cd2fa86a392eb353fc917a7d52e1d189a28a1f63f26f8"
32
+ "content": "d51fe0ea81f881abdf08942be86da6f77b96e196e384cdea56a876d01c18b548"
33
33
  }
34
34
  ],
35
35
  "externalReferences": [
36
36
  {
37
37
  "type": "distribution",
38
- "url": "https://www.npmjs.com/package/@blamejs/exceptd-skills/v/0.13.117"
38
+ "url": "https://www.npmjs.com/package/@blamejs/exceptd-skills/v/0.13.118"
39
39
  },
40
40
  {
41
41
  "type": "vcs",
@@ -86,11 +86,11 @@
86
86
  "hashes": [
87
87
  {
88
88
  "alg": "SHA-256",
89
- "content": "76ce2fe9bafe6488775f69afae5fce015101e38b6c61c8978a196c26c6f3a63c"
89
+ "content": "0ec673f44c7b80e8b775b3e6db07a679a12177e2245a0068e393352671a5b841"
90
90
  },
91
91
  {
92
92
  "alg": "SHA3-512",
93
- "content": "5b1624ea5458aad9470b1d0696f9307b8ab964e818966b5590fd7437412e02fd88b897af0f4cc1d734590edff26c7f1ffc87597c81d82f4dcc6ee18e66b010a0"
93
+ "content": "7a6a6b8c606e30804b1e2452124b824d50a174e67c9470814f1c541c1db7cc3bd9b5f6ff03980f8c2c0add8526710a8c82654c934f1a89df608c49cd910f57b1"
94
94
  }
95
95
  ]
96
96
  },
@@ -116,11 +116,11 @@
116
116
  "hashes": [
117
117
  {
118
118
  "alg": "SHA-256",
119
- "content": "93ecf2521036c71c1e0b19dbf5c65b4fd10a5c981789e62430870c2f840fc2a4"
119
+ "content": "ffbbc1097116a155a897cadcf2c5c4b4ddcff07143d57117ba226eefe993ce12"
120
120
  },
121
121
  {
122
122
  "alg": "SHA3-512",
123
- "content": "1b865537f456a7ef482f7509cb35a5133986843d169667f9042c2874d3c95d6785d876e08f281a431d8e81313a18dd62501b297f5f7d5457c66111b3f15da129"
123
+ "content": "9ca688da9504bb80f6459c51d843c3c99b41416517a7361e2ab9ff484939190a8791d9ecb2e820bcd6e8448087f54598a70e4e6fb42dc6f5c24c805e1715ebe2"
124
124
  }
125
125
  ]
126
126
  },
@@ -176,11 +176,11 @@
176
176
  "hashes": [
177
177
  {
178
178
  "alg": "SHA-256",
179
- "content": "10c5858ec4d9cff0862651c1d876242b62ca6dd18a8d1807dce44c3aafa2303c"
179
+ "content": "2d16cbfc6ff8e1c2a435bcb3903445792a2fb794a595a63fdb9fe6ac4c1fd644"
180
180
  },
181
181
  {
182
182
  "alg": "SHA3-512",
183
- "content": "713bbf149a46a960432d1583202dbf223d0c7874f06613db109c4166adc2ec1a4523061a059ecd4c6c267cbfbb417fc95bc2a6787bb304e50a9ac8fdc326a9a9"
183
+ "content": "93b6d2a34c7560b23232e05ab349bd13c10110100cc32dc670301a9d794f247008603d9e2824541aa6b637a6e90e7e03726341e6dcad2f5a79f274676379d46d"
184
184
  }
185
185
  ]
186
186
  },
@@ -281,11 +281,11 @@
281
281
  "hashes": [
282
282
  {
283
283
  "alg": "SHA-256",
284
- "content": "5c9ce8eadb9b392d565d598bf49efadeb7e8c029c2e182ac53c9de2d8631ff3f"
284
+ "content": "80af79165a79ce43ed0acf5e9b49f0087814457d4ed486466d75c7746794ce7f"
285
285
  },
286
286
  {
287
287
  "alg": "SHA3-512",
288
- "content": "a358a3c9fdfc04c202f33568dcc3f046700f87b0210114a2cea8fe82178dc4c8f1d96301b0c6f34b01f675bfaf2d03ac36fdb96b45c26a9873006da099f4eb9c"
288
+ "content": "5e7e4f9b67c4bbb1db9435cf7af7f11b689722129768bf60320b2aea6dc072e69208733a46f043357c279bc9eb3982b0c6ad06745dab7998a96d299fcf842137"
289
289
  }
290
290
  ]
291
291
  },
@@ -791,11 +791,11 @@
791
791
  "hashes": [
792
792
  {
793
793
  "alg": "SHA-256",
794
- "content": "0118bf69f5cab53065ade77389c13e5b20211fa20185d0786322789c9dafd7dc"
794
+ "content": "b660d756c816913cfd24211b41d8b67b70881283b028d1b44b6903a6cda8b796"
795
795
  },
796
796
  {
797
797
  "alg": "SHA3-512",
798
- "content": "fd40ce3846fa1be9402d30ae9dd9f2e109f2d3e8f6d438f419168b60bc4ebb51f3df0617c57dc2f90088c87784009773e3e230cb3ab949e95cb479404adc6e93"
798
+ "content": "b6af1fbbfdd81b9557a2d86693e5b357a2b3eb8187ffab69e79b165863bc9cc33a9021117ab868715bd3fe0e349b61e2a4e79276d7204feccebdc0df20784c8e"
799
799
  }
800
800
  ]
801
801
  },
@@ -1391,11 +1391,11 @@
1391
1391
  "hashes": [
1392
1392
  {
1393
1393
  "alg": "SHA-256",
1394
- "content": "d4da578b2f7d45f3d22eac52c1c9196cd3dbaf23414b5932d1f5c52d713236b8"
1394
+ "content": "8d4b4ce296a23314d9d1fdbbd8347e2ee6752319ea09c2424ed1df011aa01544"
1395
1395
  },
1396
1396
  {
1397
1397
  "alg": "SHA3-512",
1398
- "content": "1f5add189b0d6bfd18cd85b28ff7ce64f1b52fec573098ccfbd71fc9245cbcca624a0cda515315e6881779d46eb0ca27fbefb4eda74cc5ff22c2309a1a97d5de"
1398
+ "content": "f2bb166bcea14b62f41d71744cb17569124b928b68c564e86399c58ffe20c2c8160c572642e25e5f460937b090e92e49a73b2b81ac63ea2244cbfbe914e876e4"
1399
1399
  }
1400
1400
  ]
1401
1401
  },
@@ -1661,11 +1661,11 @@
1661
1661
  "hashes": [
1662
1662
  {
1663
1663
  "alg": "SHA-256",
1664
- "content": "3388678960393068730d472d6ecf7c761caaca1de75fffc3019bf15ff157bd88"
1664
+ "content": "c9b4af4a90b3da6eadec358254afe012cfd6c9a4df9944a8f15e92c52afcfd4d"
1665
1665
  },
1666
1666
  {
1667
1667
  "alg": "SHA3-512",
1668
- "content": "e5ebb812e9cd0cf1e1e8553928176a1583318c7a61c038ce60ab7b47d072b526ffe004e71f8978b10e27ec12094c7955bcccd21526212d5fbfe01ed27d7a427d"
1668
+ "content": "05b9e9916f71b56c0527ccff3d96ea77869ebacc3a090ad237000ba111a33b561948d2de4e1024462dd967be46981236ceef9ae9838b50ad2ddf2411085c362d"
1669
1669
  }
1670
1670
  ]
1671
1671
  },