@blamejs/exceptd-skills 0.16.18 → 0.16.19

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/sbom.cdx.json CHANGED
@@ -1,23 +1,23 @@
1
1
  {
2
2
  "bomFormat": "CycloneDX",
3
3
  "specVersion": "1.6",
4
- "serialNumber": "urn:uuid:6c7238d3-3b76-45b0-a769-c339ae4e6bd7",
4
+ "serialNumber": "urn:uuid:6bc84615-0603-46c8-a498-a0dc5a399034",
5
5
  "version": 1,
6
6
  "metadata": {
7
- "timestamp": "2083-08-28T03:49:39.000Z",
7
+ "timestamp": "2083-04-21T06:00:53.000Z",
8
8
  "tools": [
9
9
  {
10
10
  "vendor": "blamejs",
11
11
  "name": "scripts/refresh-sbom.js",
12
- "version": "0.16.18"
12
+ "version": "0.16.19"
13
13
  }
14
14
  ],
15
15
  "component": {
16
- "bom-ref": "pkg:npm/@blamejs/exceptd-skills@0.16.18",
16
+ "bom-ref": "pkg:npm/@blamejs/exceptd-skills@0.16.19",
17
17
  "type": "application",
18
18
  "name": "@blamejs/exceptd-skills",
19
- "version": "0.16.18",
20
- "description": "AI security skills grounded in mid-2026 threat reality, not stale framework documentation. 50 skills, 11 catalogs (439 CVEs / 177 CWEs / 805 ATT&CK + ICS / 170 ATLAS / 468 D3FEND / 8888 RFCs), 35 jurisdictions, 10-class catalog gap detector + budget gate, real XML parser + canonical-form diff + content-pattern regression detection, Ed25519-signed.",
19
+ "version": "0.16.19",
20
+ "description": "AI security skills grounded in mid-2026 threat reality, not stale framework documentation. 51 skills, 11 catalogs (439 CVEs / 177 CWEs / 805 ATT&CK + ICS / 170 ATLAS / 468 D3FEND / 8888 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
  {
23
23
  "license": {
@@ -25,17 +25,17 @@
25
25
  }
26
26
  }
27
27
  ],
28
- "purl": "pkg:npm/%40blamejs/exceptd-skills@0.16.18",
28
+ "purl": "pkg:npm/%40blamejs/exceptd-skills@0.16.19",
29
29
  "hashes": [
30
30
  {
31
31
  "alg": "SHA-256",
32
- "content": "0e20181565be6e9177ab95e6157883529660eb0b0542deb24b612fd270fe52f9"
32
+ "content": "a3b2fa14f7bfa9c8fb46f2cde3b8d077ce5b31e87455aa938b788c7409e56def"
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.16.18"
38
+ "url": "https://www.npmjs.com/package/@blamejs/exceptd-skills/v/0.16.19"
39
39
  },
40
40
  {
41
41
  "type": "vcs",
@@ -54,7 +54,7 @@
54
54
  },
55
55
  {
56
56
  "name": "exceptd:skill:count",
57
- "value": "50"
57
+ "value": "51"
58
58
  },
59
59
  {
60
60
  "name": "exceptd:integrity:method",
@@ -86,11 +86,11 @@
86
86
  "hashes": [
87
87
  {
88
88
  "alg": "SHA-256",
89
- "content": "8a446d298a41eacd959171a497d67f6f8f5902548cbf552b8840c14b3a3b37ba"
89
+ "content": "4740bf09effd467a73a8e83ecebab2b70ef6a3c1d67bcf8ec136acb7dcb5544c"
90
90
  },
91
91
  {
92
92
  "alg": "SHA3-512",
93
- "content": "69d82952344fadd98667fbf1680aa5696c79a7e79f69a833737ef4d8cc8076bddb09dacb62ffbe2c585ca6055259ce6a53868d38a8eeb3dbe1c008275e317245"
93
+ "content": "97916b726fca2bac91639fad98c8793298259cbb7a90cf4e7afcdd5a4f9fd12b48af6520e7e7d0021fb99705c213a02cf583555c4b0aa9f091c3f5d26d12da9e"
94
94
  }
95
95
  ]
96
96
  },
@@ -116,11 +116,11 @@
116
116
  "hashes": [
117
117
  {
118
118
  "alg": "SHA-256",
119
- "content": "9a3d7f16071119255f5bfc892af21e9357770d177a71df8aff3052e30ce543f0"
119
+ "content": "ca60373ee55644311ead97a32ed797b010b27bc0965c69107bac882bec7ee569"
120
120
  },
121
121
  {
122
122
  "alg": "SHA3-512",
123
- "content": "cfbb10e0c10ff6ec6ef73342d90dae4b9bf9e7abbb4858e41cdd9a9ec0ef8b1ba0594b2d082eba9e3a5ae7c930c995c0361abc0667498b573f0e934f5678f13c"
123
+ "content": "c1afb76a548ea3a5fbc54866d15776b5501f1d04f47261491e7eeaced2945ce5e3d6977f2b3265897b3ee5bf306da2c2898e8670d0cc0f36bc0e2786dfd86139"
124
124
  }
125
125
  ]
126
126
  },
@@ -176,11 +176,11 @@
176
176
  "hashes": [
177
177
  {
178
178
  "alg": "SHA-256",
179
- "content": "ccad8930d48991c13579c7519033e58d333b2bff9787aed40636fe1a2aaad61a"
179
+ "content": "81ca9d3388220ac98069b35a594e915e6a6c95f047467f26d75d89d0c917684c"
180
180
  },
181
181
  {
182
182
  "alg": "SHA3-512",
183
- "content": "cd4421111c438bf97815873a138d5e1dba1d181b7fad8992c3b81bfb3f46379b3034ff59b4a3200850f83042b1236aa648bfae18635fd740fdd4409bcedcace9"
183
+ "content": "cd0bed4f8dd100c272b20d7aecad64d09b9d65dc07551aec2f61ee20aae55978cf1c300ede8bac15d10ed9bbf8ea180aa48dfe3d951497527ee17440da1a696f"
184
184
  }
185
185
  ]
186
186
  },
@@ -281,11 +281,11 @@
281
281
  "hashes": [
282
282
  {
283
283
  "alg": "SHA-256",
284
- "content": "e0977976ace4e9ae498b2b7a4b3c943eb2fb2eedfb19983ae38d74e1eaf628d2"
284
+ "content": "9bcb27a03b259ed458da11b2d8396a1cada67c3c5b3d258945ee2eb031dd3069"
285
285
  },
286
286
  {
287
287
  "alg": "SHA3-512",
288
- "content": "fa48b90fb049a58fd21253b0d8ce1b82de21cb1e2a853a6e89b1ff68ac2a57f0c84738d9dc4a25edc2790890fd9b21f5a8af6f29de5169c480379496bcd32d58"
288
+ "content": "08c6edcbf777a74bf40f5907a279ebbbce8a886498dfaf37700749609cae23a120061a9f86b0f700f5218d046dfed318445997099f69771ed15b40c8009536e0"
289
289
  }
290
290
  ]
291
291
  },
@@ -341,11 +341,11 @@
341
341
  "hashes": [
342
342
  {
343
343
  "alg": "SHA-256",
344
- "content": "62d9e55c9f887047fd2781ba2e81ad98e3a08ab51e173d0cd3262aee3d5eb940"
344
+ "content": "feadd8497221c097d8237fb93d9557c4dbdd70434097da8debd6f5e50ede1b24"
345
345
  },
346
346
  {
347
347
  "alg": "SHA3-512",
348
- "content": "20d9d6754c1967c017abea1e6f7c5d4c60acbb25bbfb9f80ae6b73aaf5d2d838cfb67df680ec9012867e04466ad56ba39e09375c1d0616c6e9b46d14b855d88a"
348
+ "content": "97119842846c95f910bb1b9ef9ba9b36ebe5d9abe4461c22f9d2ccfda676082d606e2348535416da6e14841ffe4173a0b7399f64adbae9829a2e00eed32ec3c2"
349
349
  }
350
350
  ]
351
351
  },
@@ -596,11 +596,11 @@
596
596
  "hashes": [
597
597
  {
598
598
  "alg": "SHA-256",
599
- "content": "eae787bda27ade8c99e41de10181ffc8ef917661115066bb199cecc5b4a5dbf3"
599
+ "content": "6f74bc9a8b5dd04a18931644101d0860b968ba13512f7d5f6b36282b4119978d"
600
600
  },
601
601
  {
602
602
  "alg": "SHA3-512",
603
- "content": "0fbcbb7d77022fa4b7d57fdcc747d50d36d1c5403f7db18cfdb65fc491b5330c02a37e78ede6d61d37618b24ad72920e8fa7757cd3c321616503c366cb19b098"
603
+ "content": "bed2d8d1e9f210afa4ec9b101a27d9e7b7d84f4e724194bad131ef83d231c0b158c5b0dc30fcbb7415062aadd7f8568e2390c204823b8b13b96044bb324c6654"
604
604
  }
605
605
  ]
606
606
  },
@@ -784,6 +784,21 @@
784
784
  }
785
785
  ]
786
786
  },
787
+ {
788
+ "bom-ref": "file:data/playbooks/privacy-consent-ops.json",
789
+ "type": "file",
790
+ "name": "data/playbooks/privacy-consent-ops.json",
791
+ "hashes": [
792
+ {
793
+ "alg": "SHA-256",
794
+ "content": "a1545f8028ffd100d8d2ab52099196a2d200d593f07916e71ba5e5a27b817a38"
795
+ },
796
+ {
797
+ "alg": "SHA3-512",
798
+ "content": "94431fca8e351cf2af3f409c4494358500087d7baade07896d4ab2b19b3c45b74ec6e50ab2e9a79bcd3a7ab54808811669dce6d6775b8eccbf4b010960e818e1"
799
+ }
800
+ ]
801
+ },
787
802
  {
788
803
  "bom-ref": "file:data/playbooks/ransomware.json",
789
804
  "type": "file",
@@ -1841,11 +1856,11 @@
1841
1856
  "hashes": [
1842
1857
  {
1843
1858
  "alg": "SHA-256",
1844
- "content": "0a7aeedea3de4627ed5e602ad12f7ca954c29dffed57a4d7ba57f0af72410fba"
1859
+ "content": "faa01f939b1473c436cd81d614612593e92034e1119518e4e44f61e37b35de8b"
1845
1860
  },
1846
1861
  {
1847
1862
  "alg": "SHA3-512",
1848
- "content": "12838d29a8aac5fa30d23b143815362bb8852e8f3621252bf15d0eaf774f37edd4c6616f6400e66c719330605cf36e48ee5c3e7ff7960b04b7ddae70f7596983"
1863
+ "content": "5b84120225b544abcbfd2e87555b71293105c843fe2595c7b0fc4f92c78e3a39291e6a92600d1bbf0fd3ce09de9968799686a8a23555ceb63d17dd56d0162f58"
1849
1864
  }
1850
1865
  ]
1851
1866
  },
@@ -1856,11 +1871,11 @@
1856
1871
  "hashes": [
1857
1872
  {
1858
1873
  "alg": "SHA-256",
1859
- "content": "26beb1496ee222282f6c864e802848d8c9d5b4090488ee62f5f7aa2890840494"
1874
+ "content": "99279ed5a5a7ddb3f00e639b956a83bb2df492288db176f4c3d55dc498949c17"
1860
1875
  },
1861
1876
  {
1862
1877
  "alg": "SHA3-512",
1863
- "content": "67abe106be4853460aa184d0a19821438db687b80a774bda7b4dfb6d4c0392192c75b59593c1d09930629512b52c475d85297f0571b2e2614fc2af5211b1d957"
1878
+ "content": "3bb717a033303c961161784e1fd4da815da62106baaf62863c3f6e950b600cd36fb3faba663e49add7853f13137789ccad7884034a7638d11a15706548ec03a5"
1864
1879
  }
1865
1880
  ]
1866
1881
  },
@@ -1871,11 +1886,11 @@
1871
1886
  "hashes": [
1872
1887
  {
1873
1888
  "alg": "SHA-256",
1874
- "content": "2833faf5965d078166553874a1bf42b944e2ff4d1738eddf50806eaba56e1eb7"
1889
+ "content": "7b4d7758ddd3db55f2abb0b09a2985fb7f8e99e34f5bf1c90f3e4c044aa3dfab"
1875
1890
  },
1876
1891
  {
1877
1892
  "alg": "SHA3-512",
1878
- "content": "e548f6dc97746b9f842e0e3a5567b5eb42bd19cf6eae31b4817029514b0e842047c84c6c5d62d5667e80a03757230ce0e10778980bd9a1ec991e9dc9444a264d"
1893
+ "content": "2546ddb0470d1f13208d983cd7b16aafa1c28da6837200abc9abd3116200f393b03fc7fa075519235a12f0132e65530a713a908f00e922f48a9187e816839431"
1879
1894
  }
1880
1895
  ]
1881
1896
  },
@@ -3169,6 +3184,21 @@
3169
3184
  }
3170
3185
  ]
3171
3186
  },
3187
+ {
3188
+ "bom-ref": "file:skills/privacy-consent-ops/skill.md",
3189
+ "type": "file",
3190
+ "name": "skills/privacy-consent-ops/skill.md",
3191
+ "hashes": [
3192
+ {
3193
+ "alg": "SHA-256",
3194
+ "content": "6c14052577178f0cffc943c2d7f1ac2aca6704cca912ce7492d9eac88a1c6d88"
3195
+ },
3196
+ {
3197
+ "alg": "SHA3-512",
3198
+ "content": "8f39f408d80a2ee83d874c50308facb8722f57c8be26b01255e032949f7e40d41ce2464dd48f1b9b99adad9006c22c0254338faf6a41ee17c4fa054dee60a304"
3199
+ }
3200
+ ]
3201
+ },
3172
3202
  {
3173
3203
  "bom-ref": "file:skills/rag-pipeline-security/skill.md",
3174
3204
  "type": "file",
@@ -0,0 +1,80 @@
1
+ ---
2
+ name: privacy-consent-ops
3
+ version: "1.0.0"
4
+ description: Privacy, consent, and sanctions operational integrity for mid-2026 — confusable/homoglyph normalization before sanctions screening, integrity-bound and re-validated consent records, evidence-gated and downstream-propagated DSR erasure, and ROPA reconciliation against actual processing
5
+ triggers:
6
+ - privacy operations
7
+ - consent integrity
8
+ - sanctions screening
9
+ - ofac screening
10
+ - homoglyph evasion
11
+ - confusable normalization
12
+ - iab tcf
13
+ - mspa
14
+ - consent string
15
+ - dsr
16
+ - right to erasure
17
+ - right to be forgotten
18
+ - gdpr article 17
19
+ - ropa
20
+ - record of processing
21
+ - data subject request
22
+ discovery_mode: standalone
23
+ data_deps:
24
+ - cve-catalog.json
25
+ - atlas-ttps.json
26
+ - attack-techniques.json
27
+ - framework-control-gaps.json
28
+ - cwe-catalog.json
29
+ - rfc-references.json
30
+ atlas_refs: []
31
+ attack_refs:
32
+ - T1036
33
+ - T1565.001
34
+ - T1070
35
+ framework_gaps:
36
+ - NIST-800-53-SI-2
37
+ - NIS2-Art21-network-security
38
+ - UK-CAF-B4
39
+ - AU-ISM-1556
40
+ cwe_refs:
41
+ - CWE-807
42
+ - CWE-345
43
+ - CWE-778
44
+ - CWE-672
45
+ last_threat_review: "2026-06-02"
46
+ ---
47
+
48
+ # Privacy / Consent / Sanctions Operational Integrity
49
+
50
+ ## Threat Context (mid-2026)
51
+
52
+ Privacy and sanctions controls fail operationally even when they exist on paper. A sanctions screen that compares raw strings is evaded by a listed name spelled with confusable Unicode (Cyrillic/Latin lookalikes, combining marks, zero-width characters) — or simply by an alias or transliteration the screen does not cover. A consent signal (IAB TCF / MSPA or first-party) trusted from the client with no integrity binding to a server-side consent_log is forgeable and stale-by-default, and continuing to process on a cached signal after withdrawal is unlawful. A data-subject erasure marked "completed" without per-store proof, and not propagated to backups, indexes, warehouses, and processors, leaves live personal data behind while the organisation asserts compliance. A ROPA that drifts from actual processing hides flows that escape the consent/retention/DSR analysis entirely.
53
+
54
+ ## Framework Lag Declaration
55
+
56
+ Organisational privacy and sanctions controls are attested by having the process — a screening vendor, a consent banner, a DSR queue, a ROPA document. NIST 800-53 SI-10 (input validation) does not require Unicode confusable normalization before a sanctions-screening decision. ISO 27001 A.5.34 (privacy / PII) is met by having consent and DSR processes and does not require the consent signal be integrity-bound or the erasure be evidence-backed and propagated. A clean "we screen against OFAC, capture consent, complete DSRs, and maintain a ROPA" audit is therefore NON-EVIDENCE for operational integrity; it confirms the processes exist, not that screening normalizes confusables, consent is server-bound and re-validated, erasure is evidence-gated and propagated, and the ROPA matches reality.
57
+
58
+ ## TTP Mapping
59
+
60
+ The privacy/sanctions failures map to MITRE ATT&CK: **T1036 (Masquerading)** for a prohibited party spelling a sanctioned name with homoglyphs or an uncovered alias to evade screening; **T1565.001 (Stored Data Manipulation)** for forging or replaying a consent signal with no authoritative record, and for an erasure status falsely marked "completed"; and **T1070 (Indicator Removal)** for claiming erasure that removes the compliance indicator while live copies survive downstream. The weakness classes are CWE-807 (reliance on untrusted inputs in a security decision — unnormalized screening input), CWE-345 (insufficient verification of data authenticity — unbound consent), CWE-778 (insufficient logging — unevidenced erasure / drifted ROPA), and CWE-672 (operation on a resource after expiration — processing on withdrawn/expired consent).
61
+
62
+ ## Exploit Availability Matrix
63
+
64
+ These are operational-integrity gaps, so the exploit is the absent control, reproduced with trivial means. A homoglyph-spelled sanctioned name is a copy-paste with lookalike code points; an alias variant is in the sanction list's own alias data. A forged consent string is a crafted request when no server record reconciles it. A falsely-completed erasure needs no attacker at all — it surfaces on audit or a re-request. The real-world priority is set by whether a prohibited party can clear screening on a live onboarding/payment path (regulatory + legal exposure) or whether personal data is systemically unlawfully processed or un-erased across the data estate (false compliance at scale).
65
+
66
+ ## Analysis Procedure
67
+
68
+ 1. Inspect the sanctions screen: does it normalize to a confusable-folded skeleton (NFKC + Unicode confusable folding) and apply the list's aliases + transliteration + bounded fuzzy match before deciding? 2. Inspect consent: is the signal integrity-bound to a server-side consent_log and re-validated (purpose, expiry, withdrawal) at processing time, not just capture? 3. Inspect DSR erasure: is "completed" gated on per-store deletion evidence, and is erasure propagated to every downstream copy and processor on a maintained data-map? 4. Inspect the ROPA: is it reconciled against actual data flows / processors on a cadence? Run the `privacy-consent-ops` playbook to execute these as detect indicators with false-positive checks, then score by prohibited-party admission risk and the breadth of unlawful / un-erased processing.
69
+
70
+ ## Output Format
71
+
72
+ Report per control (sanctions screening, consent, DSR erasure, ROPA), marking each enforced / missing / inconclusive (visibility gap). For every missing control, state whether a prohibited party could clear screening, whether personal data is unlawfully processed or un-erased, and the affected population. Distinguish a control enforced by a dedicated layer (a confusable-folding screen, a consent platform, an evidence-gated workflow) from an absent one. Provide the prioritised remediation (normalize + alias/fuzzy screen, server-bind + re-validate consent, evidence-gate + propagate erasure, reconcile ROPA) and the negative validation tests (homoglyph name screened, forged consent rejected, erasure-completion gated) plus a functional test that legitimate parties, consents, and erasures proceed.
73
+
74
+ ## Compliance Theater Check
75
+
76
+ The recurring theater is "we screen all parties against OFAC," "we capture user consent," and "erasure requests are completed." The distinguishing tests: submit a Cyrillic-lookalike spelling of a listed name (if it passes, the screen compares raw strings without confusable normalization); ask whether the consent signal is server-bound and re-validated (a client-presented string with no record is forgeable and stale); ask for the per-store erasure evidence and the downstream-propagation map (a "completed" flag with no proof leaves records live in indexes, backups, and processors). If any control reports success while the obligation is unmet, the process is paper and the verdict is theater.
77
+
78
+ ## Defensive Countermeasure Mapping
79
+
80
+ Map findings to MITRE D3FEND: confusable-folding + alias/fuzzy screening realises Input Normalization and Identifier Reputation Analysis (countering T1036 evasion); server-bound + re-validated consent realises Authentication-Token Verification and Stored-Record Integrity (countering T1565.001 forged/stale consent); evidence-gated + propagated erasure realises Verifiable Deletion and Data-Inventory Mapping (countering T1070 false-erasure claims); ROPA reconciliation realises Asset/Processing Inventory accuracy. The sanctions-normalization control reuses the vendored Unicode confusable / codepoint-class tooling. The residual risk is a novel transliteration the alias list does not cover and a processor retaining data outside the data-map, accepted at the CISO level with periodic re-reconciliation.