@blamejs/exceptd-skills 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/AGENTS.md +232 -0
  2. package/ARCHITECTURE.md +267 -0
  3. package/CHANGELOG.md +616 -0
  4. package/CONTEXT.md +203 -0
  5. package/LICENSE +200 -0
  6. package/NOTICE +82 -0
  7. package/README.md +307 -0
  8. package/SECURITY.md +73 -0
  9. package/agents/README.md +81 -0
  10. package/agents/report-generator.md +156 -0
  11. package/agents/skill-updater.md +102 -0
  12. package/agents/source-validator.md +119 -0
  13. package/agents/threat-researcher.md +149 -0
  14. package/bin/exceptd.js +183 -0
  15. package/data/_indexes/_meta.json +88 -0
  16. package/data/_indexes/activity-feed.json +362 -0
  17. package/data/_indexes/catalog-summaries.json +229 -0
  18. package/data/_indexes/chains.json +7135 -0
  19. package/data/_indexes/currency.json +359 -0
  20. package/data/_indexes/did-ladders.json +451 -0
  21. package/data/_indexes/frequency.json +2072 -0
  22. package/data/_indexes/handoff-dag.json +476 -0
  23. package/data/_indexes/jurisdiction-clocks.json +967 -0
  24. package/data/_indexes/jurisdiction-map.json +536 -0
  25. package/data/_indexes/recipes.json +319 -0
  26. package/data/_indexes/section-offsets.json +3656 -0
  27. package/data/_indexes/stale-content.json +14 -0
  28. package/data/_indexes/summary-cards.json +1736 -0
  29. package/data/_indexes/theater-fingerprints.json +381 -0
  30. package/data/_indexes/token-budget.json +2137 -0
  31. package/data/_indexes/trigger-table.json +1374 -0
  32. package/data/_indexes/xref.json +818 -0
  33. package/data/atlas-ttps.json +282 -0
  34. package/data/cve-catalog.json +496 -0
  35. package/data/cwe-catalog.json +1017 -0
  36. package/data/d3fend-catalog.json +738 -0
  37. package/data/dlp-controls.json +1039 -0
  38. package/data/exploit-availability.json +67 -0
  39. package/data/framework-control-gaps.json +1255 -0
  40. package/data/global-frameworks.json +2913 -0
  41. package/data/rfc-references.json +324 -0
  42. package/data/zeroday-lessons.json +377 -0
  43. package/keys/public.pem +3 -0
  44. package/lib/framework-gap.js +328 -0
  45. package/lib/job-queue.js +195 -0
  46. package/lib/lint-skills.js +536 -0
  47. package/lib/prefetch.js +372 -0
  48. package/lib/refresh-external.js +713 -0
  49. package/lib/schemas/cve-catalog.schema.json +151 -0
  50. package/lib/schemas/manifest.schema.json +106 -0
  51. package/lib/schemas/skill-frontmatter.schema.json +113 -0
  52. package/lib/scoring.js +149 -0
  53. package/lib/sign.js +197 -0
  54. package/lib/ttp-mapper.js +80 -0
  55. package/lib/validate-catalog-meta.js +198 -0
  56. package/lib/validate-cve-catalog.js +213 -0
  57. package/lib/validate-indexes.js +83 -0
  58. package/lib/validate-package.js +162 -0
  59. package/lib/validate-vendor.js +85 -0
  60. package/lib/verify.js +216 -0
  61. package/lib/worker-pool.js +84 -0
  62. package/manifest-snapshot.json +1833 -0
  63. package/manifest.json +2108 -0
  64. package/orchestrator/README.md +124 -0
  65. package/orchestrator/dispatcher.js +140 -0
  66. package/orchestrator/event-bus.js +146 -0
  67. package/orchestrator/index.js +874 -0
  68. package/orchestrator/pipeline.js +201 -0
  69. package/orchestrator/scanner.js +327 -0
  70. package/orchestrator/scheduler.js +137 -0
  71. package/package.json +113 -0
  72. package/sbom.cdx.json +158 -0
  73. package/scripts/audit-cross-skill.js +261 -0
  74. package/scripts/audit-perf.js +160 -0
  75. package/scripts/bootstrap.js +205 -0
  76. package/scripts/build-indexes.js +721 -0
  77. package/scripts/builders/activity-feed.js +79 -0
  78. package/scripts/builders/catalog-summaries.js +67 -0
  79. package/scripts/builders/currency.js +109 -0
  80. package/scripts/builders/cwe-chains.js +105 -0
  81. package/scripts/builders/did-ladders.js +149 -0
  82. package/scripts/builders/frequency.js +89 -0
  83. package/scripts/builders/jurisdiction-clocks.js +126 -0
  84. package/scripts/builders/recipes.js +159 -0
  85. package/scripts/builders/section-offsets.js +162 -0
  86. package/scripts/builders/stale-content.js +171 -0
  87. package/scripts/builders/summary-cards.js +166 -0
  88. package/scripts/builders/theater-fingerprints.js +198 -0
  89. package/scripts/builders/token-budget.js +96 -0
  90. package/scripts/check-manifest-snapshot.js +217 -0
  91. package/scripts/predeploy.js +267 -0
  92. package/scripts/refresh-manifest-snapshot.js +57 -0
  93. package/scripts/refresh-sbom.js +222 -0
  94. package/skills/age-gates-child-safety/skill.md +456 -0
  95. package/skills/ai-attack-surface/skill.md +282 -0
  96. package/skills/ai-c2-detection/skill.md +440 -0
  97. package/skills/ai-risk-management/skill.md +311 -0
  98. package/skills/api-security/skill.md +287 -0
  99. package/skills/attack-surface-pentest/skill.md +381 -0
  100. package/skills/cloud-security/skill.md +384 -0
  101. package/skills/compliance-theater/skill.md +365 -0
  102. package/skills/container-runtime-security/skill.md +379 -0
  103. package/skills/coordinated-vuln-disclosure/skill.md +473 -0
  104. package/skills/defensive-countermeasure-mapping/skill.md +300 -0
  105. package/skills/dlp-gap-analysis/skill.md +337 -0
  106. package/skills/email-security-anti-phishing/skill.md +206 -0
  107. package/skills/exploit-scoring/skill.md +331 -0
  108. package/skills/framework-gap-analysis/skill.md +374 -0
  109. package/skills/fuzz-testing-strategy/skill.md +313 -0
  110. package/skills/global-grc/skill.md +564 -0
  111. package/skills/identity-assurance/skill.md +272 -0
  112. package/skills/incident-response-playbook/skill.md +546 -0
  113. package/skills/kernel-lpe-triage/skill.md +303 -0
  114. package/skills/mcp-agent-trust/skill.md +326 -0
  115. package/skills/mlops-security/skill.md +325 -0
  116. package/skills/ot-ics-security/skill.md +340 -0
  117. package/skills/policy-exception-gen/skill.md +437 -0
  118. package/skills/pqc-first/skill.md +546 -0
  119. package/skills/rag-pipeline-security/skill.md +294 -0
  120. package/skills/researcher/skill.md +310 -0
  121. package/skills/sector-energy/skill.md +409 -0
  122. package/skills/sector-federal-government/skill.md +302 -0
  123. package/skills/sector-financial/skill.md +398 -0
  124. package/skills/sector-healthcare/skill.md +373 -0
  125. package/skills/security-maturity-tiers/skill.md +464 -0
  126. package/skills/skill-update-loop/skill.md +463 -0
  127. package/skills/supply-chain-integrity/skill.md +318 -0
  128. package/skills/threat-model-currency/skill.md +404 -0
  129. package/skills/threat-modeling-methodology/skill.md +312 -0
  130. package/skills/webapp-security/skill.md +281 -0
  131. package/skills/zeroday-gap-learn/skill.md +350 -0
  132. package/vendor/blamejs/LICENSE +201 -0
  133. package/vendor/blamejs/README.md +54 -0
  134. package/vendor/blamejs/_PROVENANCE.json +54 -0
  135. package/vendor/blamejs/retry.js +335 -0
  136. package/vendor/blamejs/worker-pool.js +418 -0
@@ -0,0 +1,303 @@
1
+ ---
2
+ name: kernel-lpe-triage
3
+ version: "1.0.0"
4
+ description: Assess Linux kernel LPE exposure — Copy Fail, Dirty Frag, live-patch vs. reboot remediation paths, framework gap declarations
5
+ triggers:
6
+ - kernel lpe
7
+ - privilege escalation
8
+ - copy fail
9
+ - dirty frag
10
+ - cve-2026-31431
11
+ - cve-2026-43284
12
+ - linux root
13
+ - kernel patch
14
+ - live kernel patch
15
+ data_deps:
16
+ - cve-catalog.json
17
+ - exploit-availability.json
18
+ atlas_refs: []
19
+ attack_refs:
20
+ - T1068
21
+ - T1548.001
22
+ framework_gaps:
23
+ - NIST-800-53-SI-2
24
+ - ISO-27001-2022-A.8.8
25
+ - PCI-DSS-4.0-6.3.3
26
+ - NIS2-Art21-patch-management
27
+ - NIST-800-53-SC-8
28
+ - CIS-Controls-v8-Control7
29
+ rfc_refs:
30
+ - RFC-4301
31
+ - RFC-4303
32
+ - RFC-7296
33
+ cwe_refs:
34
+ - CWE-125
35
+ - CWE-362
36
+ - CWE-416
37
+ - CWE-672
38
+ - CWE-787
39
+ d3fend_refs:
40
+ - D3-ASLR
41
+ - D3-EAL
42
+ - D3-PHRA
43
+ - D3-PSEP
44
+ last_threat_review: "2026-05-01"
45
+ ---
46
+
47
+ # Kernel LPE Triage
48
+
49
+ ## Threat Context (mid-2026)
50
+
51
+ ### Copy Fail — CVE-2026-31431
52
+
53
+ **Classification:** Local Privilege Escalation | CISA KEV | AI-Discovered
54
+ **CVSS:** 7.8 (High) | **RWEP:** 90/100
55
+
56
+ An AI system discovered this vulnerability in approximately one hour. It is a page-cache copy-on-write (CoW) primitive in the Linux kernel affecting all major distributions since kernel 4.14 (2017). Every major Linux distribution is affected: RHEL 7–9, Ubuntu 18.04–24.04, Debian 9–12, CentOS, Fedora, Amazon Linux 2/2023, SUSE 12/15, Alpine, and derivatives.
57
+
58
+ Key characteristics that make this exceptional:
59
+ - **Deterministic exploitation** — no race condition, no heap spray, no timing sensitivity
60
+ - **Single-stage** — 732-byte script achieves root from unprivileged user in one step
61
+ - **No privileges required** — accessible from any unprivileged container or local user
62
+ - **No user interaction** — fully automated
63
+ - **CISA KEV listed** — active exploitation confirmed in the wild
64
+
65
+ The attack abuses a write primitive in the copy-on-write path of the page cache. An attacker with any local code execution can reliably escalate to root. In containerized environments without proper namespace isolation, this means container escape.
66
+
67
+ **What SI-2 says:** "Identify, report, and correct information system flaws; install security-relevant software updates within organizationally defined time periods."
68
+ **Why SI-2 fails here:** The control is operationalized as a patch cycle (typically 30 days for High, 7 days for Critical). Copy Fail has a public PoC, is CISA KEV listed, and takes 732 bytes and zero expertise to exploit. The 30-day window is not a security window — it is an exploitation window.
69
+
70
+ ---
71
+
72
+ ### Dirty Frag — CVE-2026-43284 + CVE-2026-43500
73
+
74
+ **Classification:** Local Privilege Escalation Chain | Breaks IPsec Mitigations
75
+ **CVSS:** 7.8 (High) | **RWEP:** 38/100
76
+
77
+ Discovered by Hyunwoo Kim. A two-CVE chain exploiting page-cache write primitives in:
78
+ - ESP/IPsec subsystem (CVE-2026-43284)
79
+ - RxRPC subsystem (CVE-2026-43500)
80
+
81
+ Key characteristics:
82
+ - **Disclosed before patches existed** — no coordinated disclosure window observed
83
+ - **Single command** — root access via one-line invocation
84
+ - **Breaks IPsec** — the exploit path runs through the IPsec subsystem, meaning the exploit actively compromises the IPsec subsystem as it runs. Controls that rely on IPsec for network isolation cannot be considered mitigating controls for this vulnerability.
85
+ - **Chained primitive** — more sophisticated than Copy Fail; requires kernel version fingerprinting to select the right gadget chain
86
+
87
+ The IPsec dimension is critical: organizations with network segmentation controls implemented via IPsec tunnels cannot claim those controls mitigate Dirty Frag exposure. The exploitation path breaks those controls.
88
+
89
+ **What SC-8 (Transmission Confidentiality and Integrity) says:** Implement cryptographic mechanisms to prevent unauthorized disclosure during transmission.
90
+ **Why SC-8 fails here:** Dirty Frag exploits the IPsec implementation itself. SC-8 compliance via IPsec does not mitigate an LPE that runs through the IPsec subsystem.
91
+
92
+ ---
93
+
94
+ ## Framework Lag Declaration
95
+
96
+ | Framework | Control | Designed For | Fails Because |
97
+ |---|---|---|---|
98
+ | NIST 800-53 Rev 5 | SI-2 Flaw Remediation | Network-centric patch cycles, 2013–2020 era | "Timely" is undefined for instant-root deterministic LPEs with public PoC. 30-day window = exploitation window. |
99
+ | NIST 800-53 Rev 5 | SC-8, SC-28 | Network/storage encryption via standard protocols | Dirty Frag exploits IPsec implementation — SC-8 controls via IPsec are not compensating controls for CVE-2026-43284 |
100
+ | ISO 27001:2022 | A.8.8 Management of technical vulnerabilities | Patch management timelines defined by risk classification | No framework for kernel-specific live patching vs. reboot requirement. "Appropriate timescales" undefined for CISA KEV + public PoC. |
101
+ | PCI DSS 4.0 | 6.3.3 | Critical patches within 1 month, all others within 3 months | 1-month window for a 732-byte public PoC is operationally indefensible. No guidance for live kernel patching on PCI-scoped systems. |
102
+ | NIS2 Directive | Art. 21 (vulnerability handling) | Systematic patch management for essential/important entities | No guidance on live kernel patching as a required capability. "Appropriate measures" undefined for CISA KEV LPEs. |
103
+ | CIS Controls v8 | Control 7 (Continuous Vulnerability Management) | Regular vulnerability scanning and patching | IG1/IG2/IG3 all recommend "remediate within one month" for critical — same problem as PCI. No live-patch framework. |
104
+ | ASD Essential 8 | Patch Operating Systems (Maturity 1–3) | Maturity 3: "within 48 hours" for critical with public exploit | Closest to adequate. ML3 "48 hours" with public exploit is approaching the right frame. Still no live-patch operationalization. |
105
+
106
+ **Spec layer vs. implementation layer.** Dirty Frag (CVE-2026-43284, CVE-2026-43500) exploits the Linux kernel's IPsec ESP implementation, not the underlying protocol specifications. The spec layer is defined by RFC 4301 (IPsec architecture), RFC 4303 (ESP datagram format), and RFC 7296 (IKEv2) — see `data/rfc-references.json` for status and errata. NIST 800-53 SC-8 and equivalent transmission-confidentiality controls implicitly cite this RFC family but do not operationalize the gap between *spec compliance* and *kernel-implementation safety*: an IPsec deployment can be fully RFC-conformant and still expose root via the ESP path. Auditors evaluating IPsec controls must ask whether the kernel is patched against CVE-2026-43284/-43500, not just whether the spec is followed.
107
+
108
+ ---
109
+
110
+ ## TTP Mapping (MITRE ATT&CK Enterprise, mid-2026)
111
+
112
+ Each CVE class in this skill maps to ATT&CK technique IDs declared in frontmatter (`T1068`, `T1548.001`). Gap flags identify which standard controls fail against the specific TTP variant — these are the controls a compliance-passing org will rely on, and which the exploit walks past.
113
+
114
+ | CVE Class | ATT&CK Technique | Sub-Technique / Variant | Gap Flag (Controls That Fail) |
115
+ |---|---|---|---|
116
+ | CVE-2026-31431 (Copy Fail) | T1068 — Exploitation for Privilege Escalation | Page-cache CoW write primitive; deterministic, single-stage; no race | NIST 800-53 SI-2 30-day SLA (exploitation window for 732-byte public PoC); ISO 27001:2022 A.8.8 "appropriate timescales" undefined for CISA KEV; PCI DSS 4.0 6.3.3 1-month critical window is indefensible; CIS Controls v8 Control 7 IG3 "within one month" identical failure |
117
+ | CVE-2026-31431 (Copy Fail — container escape variant) | T1611 — Escape to Host | Privileged container or shared host namespace + Copy Fail = host root | NIST 800-53 SC-39 (Process Isolation) assumes kernel boundary is intact; Copy Fail breaks it. No framework requires kernel CVE status be tracked as a precondition for container isolation claims. |
118
+ | CVE-2026-43284 (Dirty Frag — ESP/IPsec) | T1068 — Exploitation for Privilege Escalation | Chained page-cache write through ESP/IPsec; requires kernel fingerprinting | NIST 800-53 SC-8 (Transmission Confidentiality) when implemented via IPsec — control runs through the vulnerable subsystem and cannot be claimed as compensating; NIS2 Art. 21 "appropriate measures" silent on crypto-subsystem-CVE → control-degradation linkage |
119
+ | CVE-2026-43500 (Dirty Frag — RxRPC) | T1068 — Exploitation for Privilege Escalation | Chain component via RxRPC subsystem | ISO 27001:2022 A.8.8 — no requirement to inventory loaded kernel modules against active CVE chains; ASD Essential 8 ML3 48h-with-exploit window still long for chained public PoC |
120
+ | Both classes (post-exploit token abuse) | T1548.001 — Abuse Elevation Control Mechanism: Setuid and Setgid | Setuid binary or capability abuse following LPE foothold | NIST 800-53 AC-6 (Least Privilege) assumes UID boundary holds; after T1068 root, AC-6 audit trail shows legitimate root actions — control surface is gone |
121
+ | Both classes (detection gap) | T1068 (detection) | auditd/eBPF coverage for `userfaultfd`, `/proc/self/mem` writes, unprivileged-userns-clone | Missing entirely — no framework (NIST, ISO, PCI, NIS2, CIS, Essential 8) requires kernel-LPE exploitation-pattern detection rules. Detection-as-compensating-control claims are unverifiable without these rules. |
122
+
123
+ Note: ATLAS refs are intentionally empty in frontmatter — these are Linux kernel LPEs, not AI/ML TTPs. Cross-cutting AI-discovery context (Copy Fail was AI-found in ~1h) is captured in the Threat Context section, not via an ATLAS TTP ID.
124
+
125
+ ---
126
+
127
+ ## Exploit Availability Matrix
128
+
129
+ | CVE | CVSS | RWEP | CISA KEV | PoC Public | AI-Discovered | Active Exploitation | Patch Available | Live Patch | Reboot Required |
130
+ |---|---|---|---|---|---|---|---|---|---|
131
+ | CVE-2026-31431 (Copy Fail) | 7.8 | 90 | Yes (2026-03-15) | Yes — 732-byte script | Yes | Confirmed | Yes | Yes (kpatch/livepatch/kGraft) | Yes |
132
+ | CVE-2026-43284 (Dirty Frag ESP) | 7.8 | 38 | No | Yes | No | Suspected | Yes | No (kpatch RHEL-only) | Yes |
133
+ | CVE-2026-43500 (Dirty Frag RxRPC) | 7.6 | 81 | No | Yes (chain component) | No | Suspected | Yes | Partial (kpatch) | Yes if no live patch |
134
+
135
+ ---
136
+
137
+ ## Analysis Procedure
138
+
139
+ When a user invokes this skill, perform this assessment in order:
140
+
141
+ ### Step 1: Inventory the environment
142
+
143
+ Ask for or assess:
144
+ - Linux distribution and version
145
+ - Kernel version (`uname -r`)
146
+ - Deployment model: bare metal / VM / container / serverless
147
+ - Existing live-patching capability: kpatch (RHEL), livepatch (Ubuntu), kGraft (SUSE), or none
148
+ - Whether IPsec is used for any network segmentation or encryption controls
149
+ - Current patch management SLA (how many days for Critical/High CVEs)
150
+ - Whether systems can tolerate a reboot (and when)
151
+
152
+ ### Step 2: Determine exposure
153
+
154
+ **Copy Fail (CVE-2026-31431):**
155
+ ```
156
+ Exposed if: kernel >= 4.14 AND kernel < [patched version for distribution]
157
+ Patched versions:
158
+ RHEL 8/9: kernel-4.18.0-553.xx.el8 / kernel-5.14.0-427.xx.el9
159
+ Ubuntu 22.04: linux-image-5.15.0-xxx (check USN-7xxx)
160
+ Ubuntu 24.04: linux-image-6.8.0-xxx (check USN-7xxx)
161
+ Debian 12: 6.1.xxx (check DSA-5xxx)
162
+ Amazon Linux 2: kernel 5.10.xxx (check ALAS-2026-xxx)
163
+ SUSE 15: kernel 5.14.xxx (check SUSE-SU-2026:xxx)
164
+ ```
165
+
166
+ **Dirty Frag (CVE-2026-43284/43500):**
167
+ ```
168
+ Exposed if: IPsec or RxRPC modules loaded AND kernel < patched version
169
+ Check: lsmod | grep -E 'esp|xfrm|rxrpc'
170
+ Additional exposure: any IPsec-based network control becomes unreliable
171
+ ```
172
+
173
+ ### Step 3: Score exposure level
174
+
175
+ | Condition | Exposure Level |
176
+ |---|---|
177
+ | Kernel unpatched + no live patch + public internet access | Critical |
178
+ | Kernel unpatched + no live patch + internal only | High |
179
+ | Kernel unpatched + live patch deployed | Medium (verify live patch applied: `kpatch list` or `canonical-livepatch status`) |
180
+ | Kernel patched but reboot pending | Medium |
181
+ | Kernel patched + rebooted | Low |
182
+ | Containerized + privileged mode or host PID namespace | Add one severity level |
183
+ | IPsec used for network controls + CVE-2026-43284 unpatched | Add: "IPsec controls not compensating for Dirty Frag" |
184
+
185
+ ### Step 4: Generate remediation path
186
+
187
+ **If live patching is available and system cannot tolerate reboot:**
188
+ 1. Deploy live kernel patch immediately (kpatch/livepatch/kGraft)
189
+ 2. Verify patch applied: `kpatch list` / `canonical-livepatch status`
190
+ 3. Schedule reboot at next maintenance window to apply full kernel update
191
+ 4. Document: "Live patch deployed YYYY-MM-DD; full patch pending reboot at [maintenance window]"
192
+
193
+ **If no live patching available and system cannot tolerate reboot:**
194
+ 1. Compensating controls (reduce blast radius, do not eliminate exposure):
195
+ - Seccomp profile restricting `userfaultfd`, `TIOCCONS`, and page-cache-adjacent syscalls
196
+ - User namespace restrictions (`sysctl -w kernel.unprivileged_userns_clone=0` where supported)
197
+ - Network-level isolation of affected hosts
198
+ - Enhanced monitoring: eBPF/auditd rules for exploitation patterns (see detection section)
199
+ 2. Document as open risk with compensating controls and reboot timeline
200
+ 3. CISA KEV listing requires documented remediation or mitigation with timeline
201
+
202
+ **If system can tolerate reboot:**
203
+ 1. Apply kernel update immediately
204
+ 2. Reboot to load new kernel
205
+ 3. Verify: `uname -r` shows patched version
206
+
207
+ **For containerized workloads:**
208
+ - The container host kernel determines exposure — container image patching is irrelevant
209
+ - Privileged containers with Copy Fail exposed = host root exposure
210
+ - Apply host kernel patch or live patch
211
+ - Remove `--privileged` and shared host namespaces from containers where possible
212
+
213
+ ### Step 5: Compliance theater check
214
+
215
+ Run this check for any org claiming patch management compliance:
216
+
217
+ > "Your patch management control (SI-2 / A.8.8 / PCI 6.3.3) documents a 30-day remediation window for Critical/High CVEs. CVE-2026-31431 (Copy Fail) is CISA KEV listed with a public 732-byte exploit script requiring no privileges. What is the actual time between CISA KEV listing (2026-03-15) and confirmed patch-or-mitigate? If it exceeds 72 hours without live patching as a deployed capability, the patch management control is theater for CISA KEV class vulnerabilities."
218
+
219
+ ### Step 6: Assess IPsec dependency
220
+
221
+ If the organization uses IPsec for any of the following, flag explicitly:
222
+ - Network segmentation between security zones
223
+ - Encryption of inter-host traffic
224
+ - VPN tunnels for site-to-site connectivity
225
+ - Compliance with SC-8 or equivalent
226
+
227
+ Flag: "Dirty Frag (CVE-2026-43284) exploits the IPsec implementation. Network controls relying on IPsec cannot be claimed as compensating controls for this vulnerability. These controls should be noted in the risk assessment as providing reduced assurance until CVE-2026-43284 is fully patched."
228
+
229
+ ---
230
+
231
+ ## Output Format
232
+
233
+ Produce this structure:
234
+
235
+ ```
236
+ ## Kernel LPE Exposure Assessment
237
+
238
+ **Assessment Date:** YYYY-MM-DD
239
+ **Kernel Version:** x.x.x
240
+ **Distribution:** [name + version]
241
+
242
+ ### Exposure Summary
243
+ | CVE | Status | Severity |
244
+ |-----|--------|----------|
245
+ | CVE-2026-31431 (Copy Fail) | [Exposed / Live-patched / Patched] | [Critical/High/Medium/Low] |
246
+ | CVE-2026-43284 (Dirty Frag ESP) | [Exposed / Patched] | [Critical/High/Medium/Low] |
247
+ | CVE-2026-43500 (Dirty Frag RxRPC) | [Exposed / Patched] | [Critical/High/Medium/Low] |
248
+
249
+ ### IPsec Control Impact
250
+ [If applicable: which network controls are affected by Dirty Frag]
251
+
252
+ ### Remediation Path
253
+ [Live patch or full patch instructions for this specific distro/version]
254
+
255
+ ### Compensating Controls (if no-reboot required)
256
+ [Specific sysctl settings, seccomp profiles, monitoring rules]
257
+
258
+ ### Framework Gap Declaration
259
+ [Per-framework statement of what the org's patch management control covers and where it falls short]
260
+
261
+ ### Compliance Theater Check Result
262
+ [Date of CISA KEV listing vs. date of remediation — theater flag if > 72h without live patch capability]
263
+
264
+ ### RWEP Scores
265
+ CVE-2026-31431: CVSS 7.8 / RWEP 90 — immediate action required (4h)
266
+ CVE-2026-43284: CVSS 7.8 / RWEP 38 — remediate within 7 days; disable RxRPC/IPsec chain if not required
267
+ CVE-2026-43500: CVSS 7.6 / RWEP 32 — remediate within 7 days; consider disabling RxRPC module
268
+ ```
269
+
270
+ ---
271
+
272
+ ## Detection Rules
273
+
274
+ If patching is delayed, deploy these detection rules:
275
+
276
+ **auditd — Copy Fail exploitation pattern:**
277
+ ```
278
+ -a always,exit -F arch=b64 -S userfaultfd -k lpe_attempt
279
+ -a always,exit -F arch=b64 -S process_vm_writev -k lpe_attempt
280
+ -w /proc/self/mem -p w -k lpe_mem_write
281
+ ```
282
+
283
+ **sysctl hardening (reduce attack surface, not a full mitigation):**
284
+ ```
285
+ kernel.unprivileged_userns_clone = 0
286
+ kernel.perf_event_paranoid = 3
287
+ kernel.kptr_restrict = 2
288
+ vm.unprivileged_userfaultfd = 0
289
+ ```
290
+
291
+ **Monitoring alert:** Any unprivileged process writing to `/proc/[pid]/mem` or invoking `userfaultfd` outside of a known application allowlist should be treated as a potential LPE attempt.
292
+
293
+ ---
294
+
295
+ ## Hand-Off / Related Skills
296
+
297
+ After producing the kernel LPE triage output, the operator should chain into the following skills. Each entry names a downstream or sibling skill and the specific reason to invoke it from this finding.
298
+
299
+ - **`exploit-scoring`** — recalculate RWEP when any of the inputs that drive the score change post-triage: a new CISA KEV listing for Dirty Frag, a public PoC for CVE-2026-43500's RxRPC leg, or an AI-discovery flag flip. RWEP, not CVSS, is the prioritisation signal — re-run scoring rather than re-reading the static value in the matrix above.
300
+ - **`defensive-countermeasure-mapping`** — map each kernel LPE finding to D3FEND counters (D3-EAL for executable allowlisting at the kernel-module layer, D3-ASLR for address-space layout randomisation hardening, D3-PSEP for process self-modification prevention, D3-PHRA for process hardening / runtime attestation) and produce the defence-in-depth, least-privilege, zero-trust layered remediation plan rather than a single-control patch ticket.
301
+ - **`attack-surface-pentest`** — verify that the kernel LPE class is in the organisation's pen-test scope (TIBER-EU / DORA TLPT for EU financial-sector orgs, CBEST for UK financial, or the equivalent red-team programme). Most 2025-vintage pen-test scopes are perimeter / web-app focused and do not exercise local LPE primitives against the patched-kernel claim.
302
+ - **`compliance-theater`** — test whether the org's SI-2 / A.8.8 / PCI 6.3.3 patch-management evidence is CVSS-anchored theater for a KEV-listed, AI-discovered, 732-byte deterministic LPE. The 30-day window is the exploitation window; if the org cannot show live-patch-within-4-hours capability or documented compensating controls, the patch-management control is theater for this CVE class.
303
+ - **`policy-exception-gen`** — generate a defensible exception for ephemeral container workloads where the 30-day patch window is architecturally impossible (per AGENTS.md rule #9): immutable image fleets, short-lived serverless functions, and Knative-style scale-to-zero workloads cannot accept a runtime patch and must instead document the compensating controls (host-kernel patched, seccomp profile, namespace isolation, unprivileged-userns disabled) as the exception evidence.
@@ -0,0 +1,326 @@
1
+ ---
2
+ name: mcp-agent-trust
3
+ version: "1.0.0"
4
+ description: Enumerate MCP trust boundary failures — tool allowlisting, signed manifests, bearer auth, zero-interaction RCE
5
+ triggers:
6
+ - mcp security
7
+ - model context protocol
8
+ - agent trust
9
+ - tool trust
10
+ - mcp rce
11
+ - cve-2026-30615
12
+ - cursor security
13
+ - windsurf security
14
+ - claude code security
15
+ - ai agent security
16
+ data_deps:
17
+ - cve-catalog.json
18
+ - atlas-ttps.json
19
+ - framework-control-gaps.json
20
+ atlas_refs:
21
+ - AML.T0010
22
+ - AML.T0016
23
+ - AML.T0096
24
+ attack_refs:
25
+ - T1195.001
26
+ - T1059
27
+ - T1190
28
+ framework_gaps:
29
+ - ALL-MCP-TOOL-TRUST
30
+ - ISO-27001-2022-A.8.30
31
+ - NIST-800-53-CM-7
32
+ - NIST-800-53-SA-12
33
+ - OWASP-LLM-Top-10-2025-LLM06
34
+ - SOC2-CC9-vendor-management
35
+ - SWIFT-CSCF-v2026-1.1
36
+ rfc_refs:
37
+ - RFC-6749
38
+ - RFC-7519
39
+ - RFC-8446
40
+ - RFC-8725
41
+ - RFC-9114
42
+ - RFC-9421
43
+ - RFC-9700
44
+ cwe_refs:
45
+ - CWE-22
46
+ - CWE-345
47
+ - CWE-352
48
+ - CWE-434
49
+ - CWE-494
50
+ - CWE-77
51
+ - CWE-918
52
+ - CWE-94
53
+ d3fend_refs:
54
+ - D3-CBAN
55
+ - D3-CSPP
56
+ - D3-EAL
57
+ - D3-EHB
58
+ - D3-MFA
59
+ last_threat_review: "2026-05-01"
60
+ ---
61
+
62
+ # MCP Agent Trust Assessment
63
+
64
+ ## Threat Context (mid-2026)
65
+
66
+ The Model Context Protocol (MCP) is an open protocol for connecting AI assistants to external tools and data sources. It is now the standard integration layer for AI coding assistants: Cursor, VS Code + GitHub Copilot, Windsurf, Claude Code, and Gemini CLI all support MCP servers.
67
+
68
+ MCP creates an architectural trust problem that no existing security framework addresses.
69
+
70
+ ### The Trust Boundary Failure
71
+
72
+ An MCP server is a process that exposes tools (functions the AI can call) and resources (data the AI can read). When an AI assistant decides to call an MCP tool, it does so based on:
73
+ 1. The tool's description (provided by the MCP server)
74
+ 2. The prompt context (which may contain adversarial instructions)
75
+ 3. The model's own judgment
76
+
77
+ There is no mandatory:
78
+ - Code signing requirement for MCP server packages
79
+ - Tool allowlist (the client allows all tools by default)
80
+ - Authentication requirement between the AI client and the MCP server
81
+ - Output sanitization before returning tool results to the model
82
+ - Permission model for what the MCP server process can access on the host
83
+
84
+ This means: a malicious or compromised MCP server can execute arbitrary code by simply returning adversarial instructions in tool responses, which the AI model then follows.
85
+
86
+ ### CVE-2026-30615 — Windsurf MCP Zero-Interaction RCE
87
+
88
+ **CVSS:** 9.8 | **RWEP:** 94/100
89
+
90
+ A vulnerability in the Windsurf MCP client that allows a malicious MCP server to achieve remote code execution without any user interaction. The user does not click anything, approve anything, or trigger any visible action. The AI assistant autonomously calls the malicious tool and the code executes.
91
+
92
+ **Affected:** Windsurf (all versions before patch), and by architectural similarity: Cursor, VS Code MCP extension, Claude Code, Gemini CLI (each has its own vulnerability profile; CVE-2026-30615 is specific to Windsurf's implementation but the attack surface is identical across clients).
93
+
94
+ **Scale:** 150M+ combined downloads across affected AI coding assistants.
95
+
96
+ **Attack path:**
97
+ 1. Attacker publishes malicious MCP server to npm or creates a typosquatting package
98
+ 2. Developer installs the package (or a legitimate package is compromised via supply chain)
99
+ 3. AI assistant starts, connects to MCP server, receives tool list
100
+ 4. At any future point: AI assistant calls a tool on the malicious server (possibly triggered by a prompt injection in a code comment, PR description, or documentation)
101
+ 5. MCP server returns a response containing adversarial instructions
102
+ 6. AI assistant follows the instructions — executes code, exfiltrates files, persists backdoor
103
+
104
+ No user interaction required after installation.
105
+
106
+ ### Supply Chain Attack Surface
107
+
108
+ Every MCP server listed in popular registries (MCP Hub, npm `@modelcontextprotocol/*`) is a potential supply chain target. Unlike npm packages where exploitation requires running arbitrary code in the package lifecycle hooks, MCP servers are explicitly *designed* to run code on behalf of the AI model. The attack surface is the entire intended functionality.
109
+
110
+ **Observed patterns:**
111
+ - Typosquatting of popular MCP servers (e.g., `@mcp/filesystem` vs `@mcpfilesystem`)
112
+ - Legitimate servers with delayed malicious payloads (time-bomb or condition-based activation)
113
+ - Dependency confusion attacks targeting MCP servers in private registries
114
+
115
+ ---
116
+
117
+ ## Framework Lag Declaration
118
+
119
+ | Framework | Control | Why It Fails for MCP |
120
+ |---|---|---|
121
+ | NIST 800-53 | SA-12 (Supply Chain Protection) | Designed for software procurement and vendor management in enterprise contexts. No guidance for developer-installed AI tool plugins that execute code on behalf of AI models. SA-12's "supply chain risk management plan" does not contemplate MCP server provenance or trust. |
122
+ | NIST 800-53 | CM-7 (Least Functionality) | "Configure systems to provide only essential capabilities." Does not address the inverted trust model where the AI assistant decides which tools to call based on model judgment, not an allowlist. |
123
+ | NIST 800-53 | CM-11 (User-Installed Software) | User-installed software policy. MCP servers are installed by developers as part of their workflow. CM-11 doesn't distinguish between a code editor plugin and an MCP server that has RCE capability. |
124
+ | ISO 27001:2022 | A.8.30 (Outsourced development) | Third-party development supplier controls. MCP servers are not "outsourced development" — they are runtime tool providers that execute in the context of the AI session. Requires new control category. |
125
+ | ISO 27001:2022 | A.5.19 (Information security in supplier relationships) | Supplier risk management. Does not contemplate AI tool plugin supply chains or MCP server trust. |
126
+ | SOC 2 | CC9 (Risk Mitigation — vendor management) | Vendor review processes. SOC 2 vendor management reviews are designed for SaaS providers with data access, not MCP servers that run local code. Audit evidence does not cover MCP server signing or allowlisting. |
127
+ | CIS Controls v8 | Control 2 (Inventory and Control of Software Assets) | Software inventory and allowlisting. Does not explicitly cover MCP servers. AI coding assistant MCP configs are not in scope for most enterprise software inventory processes. |
128
+ | PCI DSS 4.0 | 12.3.4 | Review and manage third-party service providers. Scoped to service providers with access to cardholder data. An MCP server running on a developer workstation accessing a PCI-scoped codebase is not clearly in scope and would not appear in vendor management reviews. |
129
+ | SWIFT CSCF v2026 | 1.1 (SWIFT Environment Protection — allowlisted software inside the secure zone) | Mandates allowlisted software and protected operator-PC posture for the SWIFT secure zone. The control's allowlist concept is the closest existing analogue to MCP tool allowlisting, but CSCF 1.1 was written for traditional middleware and does not contemplate MCP servers, agent-mediated tool calls, or model-judgment-as-authorization on operator workstations adjacent to the SWIFT zone. |
130
+
131
+ **Fundamental gap:** No current framework has a control category for "AI tool trust boundaries" — the concept that an AI model can be the authorization mechanism for code execution, and that this creates a new class of supply chain and access control risk.
132
+
133
+ **Underlying RFC stack and its gaps.** MCP HTTP transport rides on RFC 9114 (HTTP/3) and/or RFC 9112 (HTTP/1.1). Server-to-agent authenticity claims rely on bearer tokens defined by RFC 7519 (JWT) — and MUST follow RFC 8725 (BCP 225, JWT Best Current Practices) to avoid `alg=none`, `kid` traversal, and audience-confusion attack classes. OAuth 2.0 (RFC 6749) is the typical authorization layer; operators should track RFC 9700 (OAuth 2.0 Security Best Current Practice, January 2025) rather than the original RFC 6749 threat model. For per-request integrity, RFC 9421 (HTTP Message Signatures, published 2024-02) is the current standard, but the MCP specification does not yet mandate it — a documented gap that lets a network-positioned attacker tamper with or replay tool responses even when the transport is TLS-terminated at a reverse proxy. Reference `data/rfc-references.json` rather than restating content here.
134
+
135
+ ---
136
+
137
+ ## TTP Mapping
138
+
139
+ | ATLAS/ATT&CK ID | Technique | MCP Relevance | Gap |
140
+ |---|---|---|---|
141
+ | AML.T0010 | ML Supply Chain Compromise | Direct: malicious MCP server in public registry compromises AI assistant's tool execution | ATLAS covers this conceptually; no framework has a technical control |
142
+ | AML.T0054 | Craft Adversarial Data — NLP | Indirect: adversarial prompt in tool response triggers AI to call next malicious action | No framework control |
143
+ | AML.T0096 | LLM Integration Abuse | AI assistant is the integration point being abused — MCP tool calls are the mechanism | Not in ATT&CK; only in ATLAS v5.1.0 |
144
+ | T1195.001 | Supply Chain Compromise: Compromise Software Dependencies | MCP server package as supply chain attack target | ATT&CK covers but enterprise controls don't reach developer MCP configs |
145
+ | T1059 | Command and Script Interpreter | MCP server causes shell command execution via model-mediated tool call | Standard SI-3/EDR doesn't attribute this to the MCP server as origin |
146
+ | T1190 | Exploit Public-Facing Application | CVE-2026-30615: MCP client vulnerability exploited by server | Standard vuln management covers client; MCP server trust is unaddressed |
147
+
148
+ ---
149
+
150
+ ## Exploit Availability Matrix
151
+
152
+ Sourced from `data/cve-catalog.json` and `data/exploit-availability.json` as of 2026-05-11.
153
+
154
+ | Threat | CVSS | RWEP | PoC Public? | CISA KEV? | AI-Accelerated Weaponization? | Patch Available? | Reboot / Version Bump Required? |
155
+ |---|---|---|---|---|---|---|---|
156
+ | CVE-2026-30615 (Windsurf MCP zero-interaction RCE) | 9.8 | 35 | Partial — conceptual exploit demonstrated; weaponization stage `partial` | No (architectural class; not in KEV catalog as of 2026-05) | No direct AI-assisted weaponization recorded; the attack vector itself rides on the AI agent's tool-call autonomy | Yes — vendor IDE update | IDE update / version bump required (no reboot); `live_patch_available: true` via vendor channel |
157
+ | MCP supply chain compromise — typosquatting / dependency confusion (ATLAS AML.T0010) | N/A (technique, not vendor CVE) | N/A | Yes — public typosquatting incidents in `@modelcontextprotocol/*` namespace observed | No (technique class) | Yes — AI assistants accelerate writing of convincing malicious tool descriptions | Mitigation only: pin versions, verify npm provenance attestation, enforce allowlist | Re-install / pin to known-good version |
158
+ | Adversarial tool response → indirect prompt injection (ATLAS AML.T0054 in MCP context) | N/A (technique, not vendor CVE) | N/A | Yes — public research demonstrations; weaponizable wherever output is unsanitized | No | Yes — adversarial instruction crafting is a documented AI-accelerated capability | Mitigation only: output sanitization, system-prompt authority hierarchy, tool allowlisting | Client configuration change; no version bump strictly required |
159
+ | AML.T0096 — MCP tool call as covert C2 conduit | N/A (technique) | N/A | Yes — SesameOp-class techniques apply when an MCP tool call is the relay | No | Yes — see `data/atlas-ttps.json` AML.T0096 real-world instances | Mitigation only: process-level AI/MCP egress monitoring | Configuration / monitoring change |
160
+
161
+ **Interpretation:** CVE-2026-30615 has a vendor patch and live-update path — verify Windsurf clients are on the patched version. The remaining rows are technique classes with no vendor CVE; mitigation is configurational (signed manifests, tool allowlists, bearer auth, output sanitization, version pinning) and cannot be "patched away" by a single vendor release.
162
+
163
+ ---
164
+
165
+ ## Analysis Procedure
166
+
167
+ ### Step 1: Inventory installed MCP servers
168
+
169
+ For each developer workstation or shared AI system:
170
+
171
+ ```bash
172
+ # AI coding assistant MCP configs (check all that are installed):
173
+ cat ~/.claude/settings.json | jq '.mcpServers'
174
+ cat ~/.cursor/mcp.json
175
+ cat ~/.windsurf/mcp.json
176
+ cat ~/.gemini/settings.json
177
+ cat ~/.vscode/settings.json | grep -A 20 '"mcp"'
178
+ ```
179
+
180
+ For each server found, record:
181
+ - Package name and version
182
+ - Installation source (npm, local path, custom registry)
183
+ - What tools it exposes
184
+ - What filesystem/network/process permissions it requires
185
+ - Whether an explicit tool allowlist exists
186
+
187
+ ### Step 2: Verify package provenance
188
+
189
+ For each npm-installed MCP server:
190
+ ```bash
191
+ npm pack --dry-run <package-name>
192
+ npm audit <package-name>
193
+ # Check: is the package signed? (npm provenance)
194
+ npm view <package-name> dist.integrity
195
+ # Check: does it match the expected hash?
196
+ ```
197
+
198
+ Red flags:
199
+ - Recent publication (< 30 days) with high download counts
200
+ - Package name close to a well-known server (typosquatting)
201
+ - Dependencies with postinstall scripts
202
+ - No npm provenance attestation
203
+
204
+ ### Step 3: Assess trust configuration
205
+
206
+ For each MCP client configuration, check:
207
+
208
+ **Tool allowlisting:**
209
+ - Is there an explicit `allowed_tools` list? (restricts which tools the AI can call)
210
+ - If no allowlist: the AI can call any tool the server exposes, including tools added after installation
211
+ - Risk: server can add new malicious tools in an update, no re-consent required
212
+
213
+ **Authentication:**
214
+ - Does the MCP server require authentication (bearer token, mTLS)?
215
+ - If no auth: any local process can connect to the MCP server and impersonate the AI client
216
+ - Applies particularly to MCP servers that listen on a local port
217
+
218
+ **Output trust:**
219
+ - Are MCP server responses treated as trusted (passed directly to model context)?
220
+ - If yes: adversarial instructions in tool responses execute in model context
221
+
222
+ **Process isolation:**
223
+ - Does the MCP server process run with the same privileges as the AI client?
224
+ - Does it have filesystem access beyond its stated scope?
225
+ - Does it have network access?
226
+
227
+ ### Step 4: Score MCP trust posture
228
+
229
+ | Factor | Risk Score |
230
+ |---|---|
231
+ | No tool allowlist | +High |
232
+ | No package signing verification | +High |
233
+ | No authentication required by server | +Medium |
234
+ | Server has filesystem read/write access | +High |
235
+ | Server has shell/process execution access | +Critical |
236
+ | Server has network access | +Medium |
237
+ | Outputs not sanitized | +High |
238
+ | Server was installed from public registry without audit | +Medium |
239
+ | Server version was auto-updated | +Medium |
240
+ | No MCP server activity logging | +High |
241
+
242
+ ### Step 5: Generate remediation
243
+
244
+ **Immediate (regardless of risk posture):**
245
+ 1. Audit all installed MCP servers — full inventory
246
+ 2. Remove any servers that cannot be verified by provenance
247
+ 3. Pin all MCP server versions (no auto-update)
248
+ 4. Enable logging for all MCP tool calls (what tool was called, what arguments, what response)
249
+
250
+ **Configuration hardening:**
251
+ ```json
252
+ {
253
+ "mcpServers": {
254
+ "filesystem": {
255
+ "command": "npx",
256
+ "args": ["-y", "@modelcontextprotocol/server-filesystem@1.2.3"],
257
+ "allowed_tools": ["read_file", "list_directory"],
258
+ "env": {}
259
+ }
260
+ }
261
+ }
262
+ ```
263
+
264
+ **Trust tier model:**
265
+ - Tier 0 (no install): MCP servers with shell/process execution, network exfil capability, unsigned
266
+ - Tier 1 (audited, pinned, allowlisted): Standard workspace MCP servers (filesystem, git, DB read-only)
267
+ - Tier 2 (monitored): Any server with write access — every tool call logged and alertable
268
+
269
+ **For organizational deployments:**
270
+ - Maintain an approved MCP server registry (name, version, hash, approved scopes)
271
+ - Distribute approved MCP configs via MDM/endpoint management
272
+ - Block unapproved MCP server installations on managed workstations
273
+ - Monitor for new MCP server additions in endpoint config files
274
+
275
+ ---
276
+
277
+ ## Output Format
278
+
279
+ ```
280
+ ## MCP Trust Assessment
281
+
282
+ **Assessment Date:** YYYY-MM-DD
283
+ **Scope:** [workstations / AI systems assessed]
284
+
285
+ ### Installed MCP Server Inventory
286
+ | Server | Version | Source | Tools Exposed | Filesystem | Network | Shell | Auth Required | Allowlist |
287
+ |--------|---------|--------|---------------|------------|---------|-------|---------------|-----------|
288
+
289
+ ### CVE-2026-30615 Exposure
290
+ [Windsurf version check — patched/unpatched]
291
+
292
+ ### Trust Posture Score
293
+ [Per server: Critical/High/Medium/Low with factor breakdown]
294
+
295
+ ### Immediate Actions Required
296
+ [Servers to remove, versions to pin, configs to lock]
297
+
298
+ ### Hardened Configuration
299
+ [Ready-to-use JSON config for each AI client in scope]
300
+
301
+ ### Framework Gap Declaration
302
+ [Per-framework: what control nominally applies, why it doesn't cover MCP trust, what a real control requires]
303
+
304
+ ### Organizational Policy Requirements
305
+ [If org-level deployment: approved registry, MDM config, monitoring requirements]
306
+ ```
307
+
308
+ ---
309
+
310
+ ## Hand-Off / Related Skills
311
+
312
+ After producing the MCP trust assessment output, the operator should chain into the following skills. Each entry is specific to a finding class this skill produces.
313
+
314
+ - **`supply-chain-integrity`** — MCP servers are software supply chain artifacts. For every server in the inventory, produce SLSA-level attestation, Sigstore signature verification, and in-toto provenance. The MCP ecosystem ships overwhelmingly via npm without provenance; this is the artefact-level control that the vendor-management gap above implicitly delegates to.
315
+ - **`defensive-countermeasure-mapping`** — map MCP trust failures to D3FEND counters: D3-EHB (hash-based executable allowlisting for the MCP server binary), D3-CBAN (certificate-based authentication between client and server), D3-MFA (multi-factor authentication on the MCP control plane where remote), D3-CSPP (client-server payload profiling on tool call / tool response shapes). The trust-tier model in Step 5 above is operationalised through these counters.
316
+ - **`attack-surface-pentest`** — explicitly include each installed MCP server in the in-scope target list for pen-testing and adversary emulation. 2025-vintage pen-test scopes overwhelmingly omit MCP servers; this is the single biggest assumed-out-of-scope gap discovered during this skill's analysis.
317
+ - **`dlp-gap-analysis`** — MCP tool arguments are a DLP egress channel. Verify that SDK-level prompt logging captures tool-arg egress (filenames, file contents, credential strings passed as arguments) and that DLP classifiers run on the tool-call payload, not just on file/email egress. Without this, an MCP server with filesystem read access is a fully invisible exfiltration path.
318
+ - **`framework-gap-analysis`** — when the MCP trust gap fails a specific framework control (NIST-800-53-CM-7 / ISO-27001-2022-A.8.30 / SOC2-CC9 vendor management), invoke this skill to produce the formal gap declaration tied to the organisation's compliance scope and jurisdiction, including the EU NIS2 / DORA / AU Essential 8 mappings per AGENTS.md rule #5.
319
+
320
+ For ephemeral / serverless AI-pipeline contexts (per AGENTS.md rule #9): live SLSA-attestation verification at runtime is architecturally impossible for inline-pulled MCP servers in serverless functions. The scoped alternative is build-time attestation pinning baked into the function image, with the runtime fetch path disabled at the network layer.
321
+
322
+ ---
323
+
324
+ ## Compliance Theater Check
325
+
326
+ > "Your vendor management control (CC9 / SA-12 / A.5.19) documents a review process for third-party software with access to sensitive systems. Enumerate the MCP servers installed on developer workstations that have access to production codebases or credentials. How many of those MCP servers went through your vendor review process? If the answer is zero, the vendor management control is theater for the attack surface where AI-assisted supply chain attacks are actually occurring."