@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.
- package/AGENTS.md +232 -0
- package/ARCHITECTURE.md +267 -0
- package/CHANGELOG.md +616 -0
- package/CONTEXT.md +203 -0
- package/LICENSE +200 -0
- package/NOTICE +82 -0
- package/README.md +307 -0
- package/SECURITY.md +73 -0
- package/agents/README.md +81 -0
- package/agents/report-generator.md +156 -0
- package/agents/skill-updater.md +102 -0
- package/agents/source-validator.md +119 -0
- package/agents/threat-researcher.md +149 -0
- package/bin/exceptd.js +183 -0
- package/data/_indexes/_meta.json +88 -0
- package/data/_indexes/activity-feed.json +362 -0
- package/data/_indexes/catalog-summaries.json +229 -0
- package/data/_indexes/chains.json +7135 -0
- package/data/_indexes/currency.json +359 -0
- package/data/_indexes/did-ladders.json +451 -0
- package/data/_indexes/frequency.json +2072 -0
- package/data/_indexes/handoff-dag.json +476 -0
- package/data/_indexes/jurisdiction-clocks.json +967 -0
- package/data/_indexes/jurisdiction-map.json +536 -0
- package/data/_indexes/recipes.json +319 -0
- package/data/_indexes/section-offsets.json +3656 -0
- package/data/_indexes/stale-content.json +14 -0
- package/data/_indexes/summary-cards.json +1736 -0
- package/data/_indexes/theater-fingerprints.json +381 -0
- package/data/_indexes/token-budget.json +2137 -0
- package/data/_indexes/trigger-table.json +1374 -0
- package/data/_indexes/xref.json +818 -0
- package/data/atlas-ttps.json +282 -0
- package/data/cve-catalog.json +496 -0
- package/data/cwe-catalog.json +1017 -0
- package/data/d3fend-catalog.json +738 -0
- package/data/dlp-controls.json +1039 -0
- package/data/exploit-availability.json +67 -0
- package/data/framework-control-gaps.json +1255 -0
- package/data/global-frameworks.json +2913 -0
- package/data/rfc-references.json +324 -0
- package/data/zeroday-lessons.json +377 -0
- package/keys/public.pem +3 -0
- package/lib/framework-gap.js +328 -0
- package/lib/job-queue.js +195 -0
- package/lib/lint-skills.js +536 -0
- package/lib/prefetch.js +372 -0
- package/lib/refresh-external.js +713 -0
- package/lib/schemas/cve-catalog.schema.json +151 -0
- package/lib/schemas/manifest.schema.json +106 -0
- package/lib/schemas/skill-frontmatter.schema.json +113 -0
- package/lib/scoring.js +149 -0
- package/lib/sign.js +197 -0
- package/lib/ttp-mapper.js +80 -0
- package/lib/validate-catalog-meta.js +198 -0
- package/lib/validate-cve-catalog.js +213 -0
- package/lib/validate-indexes.js +83 -0
- package/lib/validate-package.js +162 -0
- package/lib/validate-vendor.js +85 -0
- package/lib/verify.js +216 -0
- package/lib/worker-pool.js +84 -0
- package/manifest-snapshot.json +1833 -0
- package/manifest.json +2108 -0
- package/orchestrator/README.md +124 -0
- package/orchestrator/dispatcher.js +140 -0
- package/orchestrator/event-bus.js +146 -0
- package/orchestrator/index.js +874 -0
- package/orchestrator/pipeline.js +201 -0
- package/orchestrator/scanner.js +327 -0
- package/orchestrator/scheduler.js +137 -0
- package/package.json +113 -0
- package/sbom.cdx.json +158 -0
- package/scripts/audit-cross-skill.js +261 -0
- package/scripts/audit-perf.js +160 -0
- package/scripts/bootstrap.js +205 -0
- package/scripts/build-indexes.js +721 -0
- package/scripts/builders/activity-feed.js +79 -0
- package/scripts/builders/catalog-summaries.js +67 -0
- package/scripts/builders/currency.js +109 -0
- package/scripts/builders/cwe-chains.js +105 -0
- package/scripts/builders/did-ladders.js +149 -0
- package/scripts/builders/frequency.js +89 -0
- package/scripts/builders/jurisdiction-clocks.js +126 -0
- package/scripts/builders/recipes.js +159 -0
- package/scripts/builders/section-offsets.js +162 -0
- package/scripts/builders/stale-content.js +171 -0
- package/scripts/builders/summary-cards.js +166 -0
- package/scripts/builders/theater-fingerprints.js +198 -0
- package/scripts/builders/token-budget.js +96 -0
- package/scripts/check-manifest-snapshot.js +217 -0
- package/scripts/predeploy.js +267 -0
- package/scripts/refresh-manifest-snapshot.js +57 -0
- package/scripts/refresh-sbom.js +222 -0
- package/skills/age-gates-child-safety/skill.md +456 -0
- package/skills/ai-attack-surface/skill.md +282 -0
- package/skills/ai-c2-detection/skill.md +440 -0
- package/skills/ai-risk-management/skill.md +311 -0
- package/skills/api-security/skill.md +287 -0
- package/skills/attack-surface-pentest/skill.md +381 -0
- package/skills/cloud-security/skill.md +384 -0
- package/skills/compliance-theater/skill.md +365 -0
- package/skills/container-runtime-security/skill.md +379 -0
- package/skills/coordinated-vuln-disclosure/skill.md +473 -0
- package/skills/defensive-countermeasure-mapping/skill.md +300 -0
- package/skills/dlp-gap-analysis/skill.md +337 -0
- package/skills/email-security-anti-phishing/skill.md +206 -0
- package/skills/exploit-scoring/skill.md +331 -0
- package/skills/framework-gap-analysis/skill.md +374 -0
- package/skills/fuzz-testing-strategy/skill.md +313 -0
- package/skills/global-grc/skill.md +564 -0
- package/skills/identity-assurance/skill.md +272 -0
- package/skills/incident-response-playbook/skill.md +546 -0
- package/skills/kernel-lpe-triage/skill.md +303 -0
- package/skills/mcp-agent-trust/skill.md +326 -0
- package/skills/mlops-security/skill.md +325 -0
- package/skills/ot-ics-security/skill.md +340 -0
- package/skills/policy-exception-gen/skill.md +437 -0
- package/skills/pqc-first/skill.md +546 -0
- package/skills/rag-pipeline-security/skill.md +294 -0
- package/skills/researcher/skill.md +310 -0
- package/skills/sector-energy/skill.md +409 -0
- package/skills/sector-federal-government/skill.md +302 -0
- package/skills/sector-financial/skill.md +398 -0
- package/skills/sector-healthcare/skill.md +373 -0
- package/skills/security-maturity-tiers/skill.md +464 -0
- package/skills/skill-update-loop/skill.md +463 -0
- package/skills/supply-chain-integrity/skill.md +318 -0
- package/skills/threat-model-currency/skill.md +404 -0
- package/skills/threat-modeling-methodology/skill.md +312 -0
- package/skills/webapp-security/skill.md +281 -0
- package/skills/zeroday-gap-learn/skill.md +350 -0
- package/vendor/blamejs/LICENSE +201 -0
- package/vendor/blamejs/README.md +54 -0
- package/vendor/blamejs/_PROVENANCE.json +54 -0
- package/vendor/blamejs/retry.js +335 -0
- package/vendor/blamejs/worker-pool.js +418 -0
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: policy-exception-gen
|
|
3
|
+
version: "1.0.0"
|
|
4
|
+
description: Generate defensible policy exceptions for architectural realities — ephemeral infra, AI pipelines, ZTA, no-reboot patching, with compensating controls and auditor-ready justification
|
|
5
|
+
triggers:
|
|
6
|
+
- policy exception
|
|
7
|
+
- exception request
|
|
8
|
+
- control exception
|
|
9
|
+
- ephemeral exception
|
|
10
|
+
- serverless exception
|
|
11
|
+
- ai pipeline exception
|
|
12
|
+
- zero trust exception
|
|
13
|
+
- compensating control
|
|
14
|
+
data_deps:
|
|
15
|
+
- framework-control-gaps.json
|
|
16
|
+
- global-frameworks.json
|
|
17
|
+
atlas_refs: []
|
|
18
|
+
attack_refs: []
|
|
19
|
+
framework_gaps: []
|
|
20
|
+
forward_watch:
|
|
21
|
+
- New ephemeral compute paradigms (WASM, MicroVMs)
|
|
22
|
+
- EU CRA exceptions for AI pipeline components
|
|
23
|
+
- NIST SP 800-204 series updates for microservices
|
|
24
|
+
- FedRAMP updates for container/serverless authorization
|
|
25
|
+
last_threat_review: "2026-05-01"
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
# Policy Exception Generation
|
|
29
|
+
|
|
30
|
+
Policy exceptions document why a standard control cannot be implemented as specified and what compensating controls provide equivalent or superior protection. A good exception is:
|
|
31
|
+
- Specific about why the standard control doesn't apply
|
|
32
|
+
- Honest about the residual risk
|
|
33
|
+
- Concrete about the compensating controls (not vague "enhanced monitoring")
|
|
34
|
+
- Time-bounded or tied to an architectural condition
|
|
35
|
+
- Signed off by a named risk owner
|
|
36
|
+
|
|
37
|
+
This skill generates exception templates for architectural realities that current frameworks don't accommodate.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Threat Context (mid-2026)
|
|
42
|
+
|
|
43
|
+
Most non-trivial mid-2026 production architectures break the literal reading of at least one major framework control. Serverless functions break asset-inventory language; immutable container images break in-place patch-window language; LLM API dependencies break change-management language; Zero Trust environments break network-segmentation language. Where the organization has no defensible exception process, only two outcomes remain: (1) the organization claims compliance falsely (theater) or (2) the audit blocks the architecture entirely.
|
|
44
|
+
|
|
45
|
+
Concrete instances:
|
|
46
|
+
|
|
47
|
+
- **NIST 800-53 SI-2 vs. ephemeral containers.** SI-2 frames patching as in-place flaw remediation within an "organizationally defined time period." Ephemeral container workloads with immutable images are not patched in place — a vulnerable image is rebuilt and redeployed. Without an exception, an auditor reading SI-2 literally would mark a correctly-operating immutable infrastructure pipeline as non-compliant.
|
|
48
|
+
- **NIST 800-53 CM-3 vs. external LLM provider updates.** CM-3 requires change review, approval, testing, and documentation for changes to production systems. OpenAI, Anthropic, and Google deploy LLM behavioral updates without operator notification or consent. Without an exception, every external model update is technically an uncontrolled production change.
|
|
49
|
+
- **PCI DSS 6.3.3 patch deadline vs. Lambda.** AWS Lambda runtime is patched by AWS on its schedule; the customer cannot apply a patch within 30 days of disclosure independent of the provider.
|
|
50
|
+
- **NIS2 Art. 21 asset register vs. autoscaled serverless.** NIS2 expects an accurate asset register; ephemeral function instances do not have persistent identifiers to register.
|
|
51
|
+
|
|
52
|
+
Concurrent with these architectural lags, real-world TTPs continue to target the underlying systems. A defensible exception is the only mechanism that lets an organization (a) acknowledge the framework lag honestly, (b) document the compensating controls that disrupt the residual TTPs, and (c) survive both the audit and the threat. An undefended exception — a sticky note that says "doesn't apply, we use Lambda" — is theater. This skill produces the defensible variant.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Framework Lag Declaration
|
|
57
|
+
|
|
58
|
+
Per-framework lag statements for each exception category in this skill:
|
|
59
|
+
|
|
60
|
+
| Framework | Control | Lag (what the control language does not accommodate) |
|
|
61
|
+
|---|---|---|
|
|
62
|
+
| NIST 800-53 | SI-2 (Flaw Remediation) | "Organizationally defined time periods" for in-place patching are architecturally impossible for ephemeral containers, immutable images, and serverless runtimes. The control assumes a persistent patchable asset. |
|
|
63
|
+
| NIST 800-53 | CM-3 / CM-8 (Configuration Change Control / Component Inventory) | CM-3 assumes the org controls all production changes; CM-8 assumes inventoriable assets. External LLM provider model updates violate CM-3; autoscaled serverless violates CM-8. |
|
|
64
|
+
| NIST 800-53 | SC-7 (Boundary Protection) | Drafted around perimeter and zone-based segmentation. Zero Trust Architecture (NIST SP 800-207) replaces perimeter segmentation with identity-centric controls; SC-7 evidence (firewall rules, zone diagrams) is not the operative control surface in ZTA. |
|
|
65
|
+
| ISO 27001:2022 | A.5.9 (Inventory of information and other associated assets) | Asset-inventory language predates serverless and autoscaled container workloads. Ephemeral function instances cannot be individually inventoried. |
|
|
66
|
+
| ISO 27001:2022 | A.8.8 (Management of Technical Vulnerabilities) | "Appropriate timescales" is undefined and does not contemplate live kernel patching as a required capability. Critical no-reboot systems require an explicit exception process. |
|
|
67
|
+
| ISO 27001:2022 | A.8.32 (Change management) | Same gap as NIST CM-3 — external LLM model updates fall outside the operator's change-management scope. |
|
|
68
|
+
| PCI DSS 4.0 | 6.3.3 (Patches) | 30-day window assumes operator control over patch application. Cloud provider runtimes (Lambda, Cloud Functions) are patched by the provider on the provider's schedule. |
|
|
69
|
+
| PCI DSS 4.0 | 12.3.4 (Inventory of system components) | Persistent-asset assumption — fails for autoscaled ephemeral compute. |
|
|
70
|
+
| PCI DSS 4.0 | 1.3 (Network segmentation) | Implicit perimeter-trust model; ZTA evidence shape does not match the language. |
|
|
71
|
+
| NIS2 | Art. 21 (Cybersecurity risk-management measures) | Asset register and patch management language predates serverless; ephemeral nodes cannot be inventoried as the article assumes. |
|
|
72
|
+
|
|
73
|
+
This skill's exceptions exist precisely because the framework language has not caught up to the architecture. The exceptions do not claim the threat goes away — they document the compensating controls that handle the residual TTPs (see TTP Mapping).
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## TTP Mapping (MITRE ATLAS v5.1.0 and ATT&CK)
|
|
78
|
+
|
|
79
|
+
A granted exception does not remove the threat — it shifts the burden onto compensating controls. For each exception in this skill, the residual TTPs the compensating controls MUST still disrupt:
|
|
80
|
+
|
|
81
|
+
| Exception | Residual TTPs the exception must still address | Compensating coverage requirement |
|
|
82
|
+
|---|---|---|
|
|
83
|
+
| Exception 1 — Ephemeral Infrastructure Asset Inventory | T1525 (Implant Internal Image), T1610 (Deploy Container), T1611 (Escape to Host), T1078.004 (Valid Cloud Accounts) | Image scanning in CI, IaC drift detection, cloud-asset-inventory API alerts on resources not in IaC registry |
|
|
84
|
+
| Exception 2 — AI Pipeline Change Management | AML.T0020 (Poison Training Data), AML.T0018 (Backdoor ML Model), AML.T0051 (LLM Prompt Injection — emergent behavior on model upgrade), AML.T0054 (Craft Adversarial Data — NLP) | Behavioral regression test suite, model version pinning, model fingerprinting on canonical prompts, provider changelog review |
|
|
85
|
+
| Exception 3 — Zero Trust Architecture Network Segmentation | T1021 (Remote Services), T1570 (Lateral Tool Transfer), T1078 (Valid Accounts), T1199 (Trusted Relationship) | Workload identity (SPIFFE/SPIRE), per-request mTLS, device-posture verification, east-west behavioral analytics |
|
|
86
|
+
| Exception 4 — Critical Systems No-Reboot Kernel Patching | T1068 (Exploitation for Privilege Escalation — Copy Fail class), T1548.001 (Setuid and Setgid), T1611 (Escape to Host) | Live kernel patch deployed and verified (`kpatch list` / `canonical-livepatch status`), eBPF/auditd exploitation-pattern rules, network-layer isolation if no live patch available, scheduled reboot window |
|
|
87
|
+
|
|
88
|
+
The TTP source-of-truth is `data/atlas-ttps.json` (MITRE ATLAS v5.1.0, November 2025) supplemented by ATT&CK Enterprise. Per Hard Rule #4, no exception in this skill is granted without an enumerated residual-TTP set; an exception with no listed residual is theater.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Exploit Availability Matrix
|
|
93
|
+
|
|
94
|
+
For each residual TTP an exception leaves in scope, the compensating control bundle must be RWEP-justified — i.e., proportionate to the public exploit availability for the associated CVE class. Pull the RWEP scoring from `data/cve-catalog.json` and `data/exploit-availability.json` before granting the exception.
|
|
95
|
+
|
|
96
|
+
| Residual TTP | Evidence CVE / class | CVSS | RWEP tier | KEV | Public PoC | AI-accelerated | Live-patchable | Implication for compensating bundle |
|
|
97
|
+
|---|---|---|---|---|---|---|---|---|
|
|
98
|
+
| T1068 (Privilege Escalation — Copy Fail class) | CVE-2026-31431 | High | Critical | Yes | Yes (732 bytes, deterministic) | Yes | Yes (kpatch/livepatch) | Live patch within 4 hours OR network isolation — anything weaker is non-defensible |
|
|
99
|
+
| T1190 (Exploit Public-Facing Application — IPsec subsystem) | CVE-2026-43284 (Dirty Frag) | High | High | Pending | Partial | No | Limited | eBPF kernel-text integrity monitoring + maintenance-window reboot SLA |
|
|
100
|
+
| AML.T0051 (LLM Prompt Injection — emergent on model upgrade) | CVE-2025-53773 | 9.6 | High | No | Yes | Yes | N/A | Behavioral regression suite + system-prompt hardening + tool allowlist |
|
|
101
|
+
| AML.T0010 (ML Supply Chain Compromise — MCP) | CVE-2026-30615 | 9.8 | Critical | No | Partial | No | N/A | MCP server allowlist + signed-manifest enforcement + per-server auth |
|
|
102
|
+
| T1525 / T1610 (Implant Internal Image / Deploy Container) | Image-supply-chain class | Varies | High | N/A | Operational | Yes | N/A (image rebuild) | CI image scanning gate at CVSS ≥ 7.0, SBOM per image, image-registry signing |
|
|
103
|
+
|
|
104
|
+
An exception that names a residual TTP without a compensating-control bundle of equal or greater RWEP-justified strength is theater. The compliance-theater skill's universal test (demand the bypassing TTP for any claimed compensating control) should be run against the bundle before the exception is approved.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Exception Template Library
|
|
109
|
+
|
|
110
|
+
### Exception 1: Ephemeral Infrastructure — Asset Inventory
|
|
111
|
+
|
|
112
|
+
**Standard control:** NIST 800-53 CM-8 / ISO 27001 A.5.9 / PCI DSS 12.3.4 / NIS2 Art. 21
|
|
113
|
+
**Control requirement:** Maintain an accurate, complete inventory of all information system components.
|
|
114
|
+
|
|
115
|
+
**Why standard control is architecturally impossible:**
|
|
116
|
+
|
|
117
|
+
Serverless functions (AWS Lambda, Azure Functions, GCP Cloud Run, Cloudflare Workers) do not have persistent identities. A Lambda function invocation exists for milliseconds to minutes. During peak load, thousands of instances may start and stop continuously. Individual instances cannot be:
|
|
118
|
+
- Scanned by vulnerability scanners (no persistent IP, no agent installation target)
|
|
119
|
+
- Listed in a CMDB (no stable identifier)
|
|
120
|
+
- Patched as individual assets (runtime is managed by the provider)
|
|
121
|
+
- Audited individually (no OS-level access)
|
|
122
|
+
|
|
123
|
+
Container workloads with Kubernetes auto-scaling have the same property: pods start and stop, have ephemeral IPs, and are indistinguishable from each other.
|
|
124
|
+
|
|
125
|
+
**Residual risk:** Traditional asset inventory enables: vulnerability scanning, configuration auditing, unauthorized asset detection, and change tracking. Each must be addressed by alternative means.
|
|
126
|
+
|
|
127
|
+
**Compensating controls:**
|
|
128
|
+
|
|
129
|
+
| Risk Area | Compensating Control |
|
|
130
|
+
|---|---|
|
|
131
|
+
| Vulnerability scanning | Container/function image scanning in CI pipeline (Trivy, Grype, Snyk) before deployment. Every image scanned before any deployment. |
|
|
132
|
+
| Configuration auditing | Infrastructure-as-Code (IaC) is the authoritative configuration source. IaC is version-controlled, reviewed, and drift-detected. Policy-as-Code (OPA, Conftest) enforces configuration standards at deployment time. |
|
|
133
|
+
| Unauthorized asset detection | Cloud asset inventory APIs (AWS Config, Azure Resource Graph, GCP Asset Inventory) list deployed functions/containers at the infrastructure level. Alerts on resources not in the IaC registry. |
|
|
134
|
+
| Change tracking | IaC commits are the change record. Every change to infrastructure is a pull request with review and approval. Runtime state drift from IaC baseline triggers alerts. |
|
|
135
|
+
| SBOM | Software Bill of Materials generated per image at build time. SBOM stored and associated with deployed image hash. |
|
|
136
|
+
|
|
137
|
+
**Exception language:**
|
|
138
|
+
```
|
|
139
|
+
CONTROL EXCEPTION REQUEST
|
|
140
|
+
|
|
141
|
+
Control: [CM-8 / A.5.9 / PCI 12.3.4]
|
|
142
|
+
System: [system name]
|
|
143
|
+
Exception Type: Architectural — ephemeral compute
|
|
144
|
+
Risk Owner: [name, title]
|
|
145
|
+
Review Date: [annual or on architecture change]
|
|
146
|
+
|
|
147
|
+
The [system name] uses serverless/container compute where individual runtime
|
|
148
|
+
instances are ephemeral and cannot be individually inventoried, scanned, or
|
|
149
|
+
patched as required by [control ID].
|
|
150
|
+
|
|
151
|
+
This exception is granted on the basis that the following compensating controls
|
|
152
|
+
provide equivalent or superior assurance:
|
|
153
|
+
|
|
154
|
+
1. Image scanning: [tool] scans all container/function images before deployment.
|
|
155
|
+
No image with CVSS ≥ 7.0 vulnerabilities deploys to production.
|
|
156
|
+
2. IaC as authoritative inventory: all infrastructure is defined in [IaC tool]
|
|
157
|
+
in [repo]. The IaC repository IS the asset inventory.
|
|
158
|
+
3. IaC drift detection: [tool] alerts within [time] of any runtime state
|
|
159
|
+
deviation from IaC-defined state.
|
|
160
|
+
4. Cloud-native asset listing: [cloud provider] asset inventory API is queried
|
|
161
|
+
daily and compared against IaC registry. Unrecognized resources trigger alerts.
|
|
162
|
+
5. SBOM per image: SBOMs are generated at build time and stored at [location].
|
|
163
|
+
|
|
164
|
+
Residual risk: Runtime configuration drift between IaC updates is detected
|
|
165
|
+
within [SLA] rather than continuously. Individual instance-level forensics
|
|
166
|
+
post-incident requires cloud provider support.
|
|
167
|
+
|
|
168
|
+
Approved by: [name]
|
|
169
|
+
Date: [date]
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
### Exception 2: AI Pipeline — Change Management
|
|
175
|
+
|
|
176
|
+
**Standard control:** NIST 800-53 CM-3 / ISO 27001 A.8.32 / SOC 2 CC8 / PCI DSS 6.5
|
|
177
|
+
**Control requirement:** All changes to information systems undergo a change management process including review, approval, testing, and documentation.
|
|
178
|
+
|
|
179
|
+
**Why standard control doesn't fully apply to LLM dependencies:**
|
|
180
|
+
|
|
181
|
+
Organizations using LLM APIs (OpenAI, Anthropic, Google, Azure OpenAI) are dependent on externally managed model updates that occur:
|
|
182
|
+
- Without operator notification or consent
|
|
183
|
+
- On the provider's schedule, not the organization's change management calendar
|
|
184
|
+
- In ways that may alter model behavior, output characteristics, and safety properties
|
|
185
|
+
- Continuously (model improvements, safety mitigations, capability changes)
|
|
186
|
+
|
|
187
|
+
The organization cannot apply its change management process to a change it does not control and is not notified of.
|
|
188
|
+
|
|
189
|
+
**What the org can control:**
|
|
190
|
+
- Model version pinning (where the API supports it)
|
|
191
|
+
- Behavioral regression testing after detected model changes
|
|
192
|
+
- System prompt stability (changes to system prompts go through change management)
|
|
193
|
+
- Application code that interfaces with the LLM API (fully under change management)
|
|
194
|
+
|
|
195
|
+
**Compensating controls:**
|
|
196
|
+
|
|
197
|
+
| Risk Area | Compensating Control |
|
|
198
|
+
|---|---|
|
|
199
|
+
| Uncontrolled behavioral changes | Pin model versions where supported (e.g., `gpt-4o-2024-11-20` not `gpt-4o`). Operator receives advance notice of version deprecation. |
|
|
200
|
+
| Behavioral regression | Automated behavioral test suite runs nightly against current model. Tests cover: safety-relevant outputs, accuracy on business-critical tasks, rejection of known adversarial prompts. Alert on regression. |
|
|
201
|
+
| Safety property changes | Weekly review of provider changelogs and safety announcements. Document any safety-relevant model changes in risk register. |
|
|
202
|
+
| Undetected changes (provider doesn't announce) | Model fingerprinting: track model response consistency on canonical test prompts. Deviation > threshold triggers review. |
|
|
203
|
+
|
|
204
|
+
**Exception language:**
|
|
205
|
+
```
|
|
206
|
+
CONTROL EXCEPTION REQUEST
|
|
207
|
+
|
|
208
|
+
Control: [CM-3 / A.8.32 / CC8]
|
|
209
|
+
System: [AI system name]
|
|
210
|
+
Exception Type: Architectural — externally managed AI model dependency
|
|
211
|
+
Risk Owner: [name, title]
|
|
212
|
+
Review Date: [annual or on provider change]
|
|
213
|
+
|
|
214
|
+
The [AI system] depends on [provider] LLM API. Model updates by [provider]
|
|
215
|
+
occur without operator advance notice or consent and cannot be subject to
|
|
216
|
+
the organization's change management process.
|
|
217
|
+
|
|
218
|
+
This exception covers: LLM model version updates made by [provider].
|
|
219
|
+
This exception does NOT cover: system prompt changes, application code changes,
|
|
220
|
+
integration changes — these remain subject to standard change management.
|
|
221
|
+
|
|
222
|
+
Compensating controls:
|
|
223
|
+
1. Model version pinning: [model ID] is pinned to [specific version].
|
|
224
|
+
Any version upgrade requires change management approval.
|
|
225
|
+
2. Behavioral regression testing: automated suite ([count] tests) runs on
|
|
226
|
+
[schedule]. Regression alerts require [process] review before continued use.
|
|
227
|
+
3. Provider changelog monitoring: [responsible role] reviews provider
|
|
228
|
+
release notes [weekly]. Safety-relevant changes logged in risk register.
|
|
229
|
+
4. Model fingerprinting: canonical prompt set tracked. Unexplained deviation
|
|
230
|
+
triggers unplanned review.
|
|
231
|
+
|
|
232
|
+
Approved by: [name]
|
|
233
|
+
Date: [date]
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
### Exception 3: Zero Trust Architecture — Network Segmentation
|
|
239
|
+
|
|
240
|
+
**Standard control:** NIST 800-53 SC-7 / ISO 27001 A.8.22 / PCI DSS 1.3
|
|
241
|
+
**Control requirement:** Implement network segmentation between security zones using firewalls, DMZs, and network access controls.
|
|
242
|
+
|
|
243
|
+
**Why standard control concept changes in ZTA:**
|
|
244
|
+
|
|
245
|
+
Zero Trust Architecture eliminates the concept of a trusted network perimeter. In a ZTA:
|
|
246
|
+
- All traffic is treated as potentially hostile regardless of network segment
|
|
247
|
+
- Network segmentation is replaced by identity-centric access controls
|
|
248
|
+
- Per-request authentication and authorization replace zone-based trust
|
|
249
|
+
- Micro-segmentation at the workload level replaces macro network zones
|
|
250
|
+
|
|
251
|
+
A traditional network segmentation audit (checking that the PCI zone is separated from the general corporate network) is not meaningful when all traffic is authenticated at the application layer and network location provides no trust signal.
|
|
252
|
+
|
|
253
|
+
**What ZTA provides instead:**
|
|
254
|
+
|
|
255
|
+
| Segmentation Control | ZTA Equivalent |
|
|
256
|
+
|---|---|
|
|
257
|
+
| Firewall between zones | Per-request mutual TLS with certificate-based workload identity |
|
|
258
|
+
| Trusted internal network | Continuous device posture verification; no implicit trust by location |
|
|
259
|
+
| DMZ | Identity and access policies at service mesh layer; all services authenticated |
|
|
260
|
+
| Network ACLs | Service-level authorization policies (SPIFFE/SPIRE, Istio, etc.) |
|
|
261
|
+
|
|
262
|
+
**Compensating controls:**
|
|
263
|
+
1. Workload identity: all services have cryptographic identities (SPIFFE SVIDs or equivalent). No service-to-service communication without mutual authentication.
|
|
264
|
+
2. Per-request authorization: every API call is authenticated and authorized. Authorization policies are version-controlled and reviewed.
|
|
265
|
+
3. Device posture: continuous assessment of device health before granting network access. Non-compliant devices blocked at identity layer.
|
|
266
|
+
4. Lateral movement monitoring: behavioral analytics on east-west traffic patterns. Anomalous service-to-service communication triggers alerts.
|
|
267
|
+
|
|
268
|
+
**Exception language:**
|
|
269
|
+
```
|
|
270
|
+
CONTROL EXCEPTION REQUEST
|
|
271
|
+
|
|
272
|
+
Control: [SC-7 / A.8.22 / PCI DSS 1.3]
|
|
273
|
+
System: [zero trust environment scope]
|
|
274
|
+
Exception Type: Architectural — Zero Trust Architecture
|
|
275
|
+
Risk Owner: [name, title]
|
|
276
|
+
Review Date: [annual or on ZTA architecture change]
|
|
277
|
+
|
|
278
|
+
The [environment] implements Zero Trust Architecture which eliminates
|
|
279
|
+
traditional network perimeter segmentation in favor of identity-centric controls.
|
|
280
|
+
|
|
281
|
+
Traditional segmentation compliance evidence (zone diagrams, firewall rule reviews)
|
|
282
|
+
is not applicable to this architecture. Alternative evidence provided:
|
|
283
|
+
|
|
284
|
+
1. Workload identity: [implementation] provides cryptographic identity for all
|
|
285
|
+
services. See [attestation/config].
|
|
286
|
+
2. Per-request authorization: all service-to-service calls authenticated via
|
|
287
|
+
[method]. Authorization policies at [location].
|
|
288
|
+
3. Device posture: [system] continuously assesses device health.
|
|
289
|
+
Non-compliant devices blocked. Policy at [location].
|
|
290
|
+
4. Lateral movement monitoring: [system] alerts on anomalous east-west traffic.
|
|
291
|
+
|
|
292
|
+
Reference: NIST SP 800-207 (Zero Trust Architecture) documents this architecture
|
|
293
|
+
as a valid implementation of layered access control.
|
|
294
|
+
|
|
295
|
+
Approved by: [name]
|
|
296
|
+
Date: [date]
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
### Exception 4: Critical Systems — No-Reboot Kernel Patching
|
|
302
|
+
|
|
303
|
+
**Standard control:** NIST 800-53 SI-2 / ISO 27001 A.8.8 / PCI DSS 6.3.3 / NIS2 Art. 21
|
|
304
|
+
**Control requirement:** Apply security patches within required timelines (30 days for Critical, or within 1 month per PCI).
|
|
305
|
+
|
|
306
|
+
**Why standard control applies but requires qualification:**
|
|
307
|
+
|
|
308
|
+
Production systems that cannot tolerate a reboot (high-availability databases, real-time processing systems, 24/7 operating environments) cannot apply kernel security patches within required timelines without service disruption. A standard "patch and reboot" process may require a maintenance window that is:
|
|
309
|
+
- Hours to days away
|
|
310
|
+
- Subject to change control that extends the timeline
|
|
311
|
+
- Contractually or legally restricted (SLAs with customers)
|
|
312
|
+
|
|
313
|
+
This is not a reason to leave systems unpatched — it is a reason to require live kernel patching as a capability. The exception documents the live patching deployment and the timeline to full patch.
|
|
314
|
+
|
|
315
|
+
**This is a time-limited exception** — once the maintenance window occurs, the full patch is applied and the exception closes.
|
|
316
|
+
|
|
317
|
+
**Compensating controls (for the period between live patch and reboot):**
|
|
318
|
+
1. Live kernel patch deployed: kpatch / livepatch / kGraft deployed and verified applied. (`kpatch list` / `canonical-livepatch status`)
|
|
319
|
+
2. Enhanced monitoring: eBPF/auditd exploitation detection rules active for the vulnerability class.
|
|
320
|
+
3. Network isolation: if live patch is not available for the specific CVE, network-level isolation of affected systems.
|
|
321
|
+
4. Maintenance window scheduled: specific date/time documented. Patch + reboot completed at that window closes the exception.
|
|
322
|
+
|
|
323
|
+
**For CISA KEV class (Copy Fail CVE-2026-31431):** This exception is only valid if live patch has been deployed. If live patch is not available and the system cannot be rebooted: isolate at the network layer until the reboot window, and escalate to risk committee as an open CISA KEV with no adequate compensating control.
|
|
324
|
+
|
|
325
|
+
**Exception language:**
|
|
326
|
+
```
|
|
327
|
+
CONTROL EXCEPTION REQUEST
|
|
328
|
+
|
|
329
|
+
Control: [SI-2 / A.8.8 / PCI 6.3.3]
|
|
330
|
+
CVE: [CVE-ID]
|
|
331
|
+
System: [system name]
|
|
332
|
+
Exception Type: Operational — maintenance window required for reboot
|
|
333
|
+
Duration: [current date] to [scheduled maintenance window date]
|
|
334
|
+
Risk Owner: [name, title]
|
|
335
|
+
|
|
336
|
+
[System name] requires a reboot to apply [CVE-ID] kernel patch. A reboot
|
|
337
|
+
requires maintenance window approval. The next approved maintenance window
|
|
338
|
+
is [date].
|
|
339
|
+
|
|
340
|
+
Live kernel patch status: [Deployed / Not available for this CVE]
|
|
341
|
+
If live patch deployed: [kpatch list output / livepatch status]
|
|
342
|
+
If live patch not available: [compensating network controls]
|
|
343
|
+
|
|
344
|
+
Detection controls active during exception period:
|
|
345
|
+
- [auditd rules for exploitation pattern]
|
|
346
|
+
- [eBPF monitoring for privilege escalation attempts]
|
|
347
|
+
- [network isolation scope if applicable]
|
|
348
|
+
|
|
349
|
+
This exception expires on [maintenance window date]. If not patched by that
|
|
350
|
+
date, escalate to [risk committee].
|
|
351
|
+
|
|
352
|
+
Approved by: [name]
|
|
353
|
+
Date: [date]
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
---
|
|
357
|
+
|
|
358
|
+
## Analysis Procedure
|
|
359
|
+
|
|
360
|
+
### Step 1: Identify the architectural reality
|
|
361
|
+
|
|
362
|
+
Determine which exception category applies:
|
|
363
|
+
- Ephemeral compute (serverless/container at scale)?
|
|
364
|
+
- Externally managed AI model dependency?
|
|
365
|
+
- Zero Trust Architecture replacing traditional segmentation?
|
|
366
|
+
- Critical system no-reboot window?
|
|
367
|
+
- Other (describe the architectural constraint)
|
|
368
|
+
|
|
369
|
+
### Step 2: Identify the specific control
|
|
370
|
+
|
|
371
|
+
Find the exact control ID and control text. Do not use paraphrases — cite the actual requirement.
|
|
372
|
+
|
|
373
|
+
### Step 3: Document why the control doesn't apply as written
|
|
374
|
+
|
|
375
|
+
Be specific. "We use serverless" is not sufficient. Explain exactly what property of the architecture makes the control unapplicable as written.
|
|
376
|
+
|
|
377
|
+
### Step 4: Define compensating controls
|
|
378
|
+
|
|
379
|
+
Each compensating control must:
|
|
380
|
+
- Address a specific risk that the standard control was designed to address
|
|
381
|
+
- Be concrete (tool name, configuration, SLA)
|
|
382
|
+
- Be independently verifiable
|
|
383
|
+
- Have a named owner
|
|
384
|
+
|
|
385
|
+
"Enhanced monitoring" without specifics is not a compensating control.
|
|
386
|
+
|
|
387
|
+
### Step 5: Assign a risk owner
|
|
388
|
+
|
|
389
|
+
The risk owner must be named and must have the organizational authority to accept the residual risk. Security team cannot be the risk owner — that's the team identifying the risk, not accepting it.
|
|
390
|
+
|
|
391
|
+
### Step 6: Set an expiration
|
|
392
|
+
|
|
393
|
+
Exceptions should expire:
|
|
394
|
+
- On a specific date (for time-limited conditions like maintenance windows)
|
|
395
|
+
- On an architectural change (for ZTA/ephemeral — review if architecture changes)
|
|
396
|
+
- Annually (minimum review cycle for standing exceptions)
|
|
397
|
+
|
|
398
|
+
---
|
|
399
|
+
|
|
400
|
+
## Output Format
|
|
401
|
+
|
|
402
|
+
Produce a complete, signed exception document using the applicable template above, populated with:
|
|
403
|
+
- Specific control ID and text
|
|
404
|
+
- Specific system or environment scope
|
|
405
|
+
- Specific architectural constraint
|
|
406
|
+
- Specific compensating controls with tool names and SLAs
|
|
407
|
+
- Residual risk statement
|
|
408
|
+
- Named risk owner
|
|
409
|
+
- Expiration date or condition
|
|
410
|
+
|
|
411
|
+
---
|
|
412
|
+
|
|
413
|
+
## Compliance Theater Check
|
|
414
|
+
|
|
415
|
+
A granted exception without a documented compensating-control bundle that is RWEP-justified against the residual TTPs is theater. The exception process becomes a rubber stamp that converts an audit blocker into a paper compliance claim with no real protection.
|
|
416
|
+
|
|
417
|
+
Run this test against the organization's exception register:
|
|
418
|
+
|
|
419
|
+
> **Pull the last 5 granted exceptions. For each exception, demand: (a) the residual attacker TTPs it leaves in scope (with ATLAS / ATT&CK IDs resolving in `data/atlas-ttps.json`), (b) the specific compensating-control bundle that disrupts each residual TTP, and (c) the RWEP-justified strength of that bundle against the public exploit availability for those TTPs (sourced from `data/cve-catalog.json` and `data/exploit-availability.json`).**
|
|
420
|
+
|
|
421
|
+
Decision rule, per exception:
|
|
422
|
+
|
|
423
|
+
- All three present → exception is defensible. Record CLEAR.
|
|
424
|
+
- Residual TTPs absent → the exception was granted without analyzing what threats it leaves in play. THEATER FLAG. Re-open the exception and require TTP enumeration.
|
|
425
|
+
- Compensating controls vague ("enhanced monitoring", "additional logging", "team awareness") → the bundle is not concrete enough to disrupt anything. THEATER FLAG. Require tool names, configuration, SLA, and a named owner.
|
|
426
|
+
- RWEP-justification absent → the bundle may exist but is unscored against current exploit availability. THEATER FLAG. The most dangerous form is a bundle that handles 2018 threat-model TTPs while the residual includes CVE-2026-31431 / 30615 / 2025-53773 class threats.
|
|
427
|
+
|
|
428
|
+
Specific high-confidence theater signals for this skill's four exception categories:
|
|
429
|
+
|
|
430
|
+
| Exception category | Theater signal | What a defensible variant looks like |
|
|
431
|
+
|---|---|---|
|
|
432
|
+
| Ephemeral Infrastructure Asset Inventory | "We use Lambda so CM-8 doesn't apply" with no IaC-as-inventory or image-scanning evidence | IaC repo named, image-scanning tool named, SBOM storage location named, cloud-asset-inventory alert rule named |
|
|
433
|
+
| AI Pipeline Change Management | "External provider, out of scope" with no model version pin, no behavioral regression suite, no changelog review | Pinned model ID, named regression suite with test count and schedule, named reviewer for provider changelogs, model-fingerprinting prompt set |
|
|
434
|
+
| Zero Trust Architecture Segmentation | "We're zero trust" with no SPIFFE/mTLS evidence and no east-west behavioral analytics | Workload identity implementation named, mTLS configuration evidence, device-posture system named, lateral-movement detection rules cited |
|
|
435
|
+
| Critical Systems No-Reboot Kernel Patching | "Can't reboot, will catch up later" with no live patch, no eBPF rules, no maintenance window | `kpatch list` / `canonical-livepatch status` output, named eBPF / auditd rules for the exploitation pattern, scheduled maintenance date, escalation contact if missed |
|
|
436
|
+
|
|
437
|
+
When this check fires on any exception, hand off to the compliance-theater skill to record the systemic finding (this is Pattern 3 / 4 / 5 / 6 territory depending on category) and to framework-gap-analysis to determine whether the framework lag warrants escalation to the global-grc skill for cross-jurisdictional review.
|