Remediation Guidance
Purpose
Produce an actionable fix plan for a specific exposure or CVE — drawn primarily from the platform's own remediation content (built-in fields, mapped attributes, scanner-native fields). Web search is an opt-in enrichment, not a default step.
When to use
- "How do I fix CVE-2024-3400?"
- "Remediate exposure
exp-abc123"
- "Patch guidance for log4j"
- "What's the workaround while we can't patch?"
- "Compensating controls for this vuln"
- "Generate a ticket body for this exposure"
Pre-flight
Step 0 — Account preflight (CC-1)
See _shared/account-preflight.md. Required — remediation plans read the user's exposure records.
Before using this skill, read every file in the references folder, including the shared references/_shared/ docs.
Suggested tools
Pre-flight (CC-1, see shared doc)
getUserProfile — resolve caller's accessible accounts + user-id
getEffectiveAccess / getEffectiveAccessWorkspaces — per-resource access when needed
Read remediation content (primary)
searchExposureData (source) or exposureQuery (composite) — exposure records; this is where most remediation content lives, under exposure.mappedAttributes.* / compositeExposure.sources.mappedAttributes.* or scanner-specific fields
searchVulnerabilityData — CVE record with fixed-in version and vendor references (when available)
searchAssetData (source) or assetQuery (composite) — asset platform context (OS, version) so the fix advice is relevant
searchComponentData — installed component / package version (for package-manager style remediation)
getApiFields(entityType=['EXPOSURE'], searchText='remediation') — discover all remediation-bearing fields for this account
getApiFields(entityType=['EXPOSURE'], searchText='solution') — same for scanner-native solution fields
getApiFields(entityType=['EXPOSURE'], searchText='patch') / 'fix' — same for patch / fix-info fields
Integrations / actions
getConfiguredIntegrations — call early. Returns every configured scanner + ticketing integration with id, name, vendorName, type (SCANNER / TICKETING), and prefix (e.g. WIZ, Q-VMDR, NESSUS, SNYK, SERVICE_NOW_INCIDENT). Two uses:
- Find scanner-specific remediation fields. The
prefix maps to an integration-specific field group — pass it as fetchGroups to getApiFields(entityType=['EXPOSURE']) to retrieve that integration's remediation/solution/advisory fields (e.g., Qualys solution, Tenable solution, Rapid7 solution). Scanner-native fields often have richer vendor advisory text than the generic exposure.mappedAttributes.vendorRemediation.
- Detect ticketing handoff options. Filter
type = 'TICKETING' to find Jira / ServiceNow / ServiceNow_Incident integrations for draft ticket output.
Deep links (CC-2)
- See _shared/deep-links.md. Call
createDeepLink for every list or table of exposure / asset records you surface. Skip only for single-record drilldowns and purely conceptual responses (no customer data list). Do not fabricate or omit links for list responses.
Opt-in enrichment (after user confirms)
- Web search — vendor advisory, KB article, community workarounds. Do not run by default.
Workflow
Step 1 — Identify the subject
- Exposure-id → fetch the single exposure record.
- CVE → fetch all matching exposures in the account scope (filter
exposure.mappedAttributes.vulnerabilityIds = 'CVE-X' AND exposure.status = 'Open'). If many, ask the user whether to plan for all, a subset, or give a CVE-level summary.
- Vulnerability name (no CVE) → resolve via
searchVulnerabilityData on name/aliases; confirm with the user.
Step 2 — Read platform remediation fields first
Fetch the exposure(s) with searchExposureData. Always include at minimum:
"fields": [
"exposure.exposureId",
"exposure.title",
"exposure.scores.scoreLevel",
"exposure.scores.score",
"exposure.mappedAttributes.vulnerabilityIds",
"exposure.mappedAttributes.vendorRemediation",
"exposure.remediationTarget.status",
"exposure.remediationTarget.dueDate",
"exposure.remediationTarget.priority",
"asset.criticality",
"asset.reachability"
]
For richer coverage (account-specific integration fields), pre-discover via getApiFields(entityType=['EXPOSURE'], searchText='remediation') and append matched apiPaths.
The canonical field :
| Field |
Notes |
exposure.mappedAttributes.vendorRemediation |
Primary source of scanner-provided remediation text. Always request this field first. Example real value: (example: a vendor advisory patch instruction) |
genericExposure.vulnerability.attributes.vendorRemediation |
Alternate path on generic-connector exposures |
Secondary / structured remediation fields (also populated on most accounts):
| Field |
Type |
Use |
exposure.remediationTarget.status |
enum On Track / Overdue / Met / Missed |
SLA state |
exposure.remediationTarget.dueDate |
date |
Due date |
exposure.remediationTarget.priority |
string (P1, P2, …) |
Priority band |
exposure.remediationTarget.targetDays |
integer |
SLA target window |
exposure.scores.remediationScore |
number |
Platform-computed remediation urgency |
Account-specific integration fields may exist (Qualys, Tenable, CrowdStrike, Rapid7 — discover via getApiFields(entityType=['EXPOSURE'], searchText='remediation')). Present whatever is populated, clearly labeled with the source field.
Step 3 — Enrich with asset + vulnerability context, and discover scanner-native remediation
Run in parallel:
searchAssetData (or composite) to get the affected asset's OS, version, criticality, reachability.
searchVulnerabilityData for the CVE record if not already fetched — confirm severity, KEV, exploit status.
getConfiguredIntegrations — critical step. From the response, identify which SCANNER integration produced the exposure (match the exposure's scanner source to an integration's prefix). Then call:
getApiFields(entityType=['EXPOSURE'], fetchGroups='<PREFIX>', searchText='remediation')
getApiFields(entityType=['EXPOSURE'], fetchGroups='<PREFIX>', searchText='solution')
getApiFields(entityType=['EXPOSURE'], fetchGroups='<PREFIX>', searchText='fix')
to enumerate that scanner's remediation/solution/fix fields. Add those paths to your searchExposureData fields array to pull the scanner-native remediation text. Common integrations and their typical remediation fields:
- Qualys VMDR/EASM (
Q-VMDR, Q-EASM, Q-PC, Q-WAS) — solution field
- Tenable Nessus / IO / SC (
NESSUS, TIO_QA, TSC) — solution field
- Rapid7 InsightVM / Nexpose (
IVM, IVM_CLOUD, NEXPOSES) — solution field
- WIZ (
WIZ) — remediation steps in the finding record
- CrowdStrike Falcon Spotlight (
FS) — remediation field
- Snyk (
SNYK) — fixedIn / remediation
Ticketing integrations (type = 'TICKETING', e.g. SERVICE_NOW_INCIDENT) surface draft-ticket handoff options in Step 5.
Step 4 — Ask before web-searching
The platform remediation content is often sufficient. Before running web search, ask:
"I found remediation guidance in the platform (sources: ). Want me to also search vendor advisories / KBs on the web for more depth? (Y/n)"
If the user says yes, proceed to Step 5. If no, skip to Step 6.
Step 5 — (Opt-in) Web-search vendor advisories
Only when the user confirmed. Search for:
- The official vendor advisory for the CVE.
- KB article or release notes for the fixed version.
- Known workarounds / compensating controls.
Read the content — do not just link. Quote the specific steps. See references/patch-lookup-patterns.md.
Step 6 — Construct the fix plan
Organize findings into this structure. Fields you couldn't populate (because the platform didn't have them and web search was declined) are explicitly marked "not available".
## Remediation Plan — <CVE or exposure id>
**Subject:** <CVE> on <asset hostname>
**Severity:** <Critical/High/Medium/Low/Info> (KEV: yes/no, score: <exposure.scores.score>)
**Remediation status:** <On Track / Overdue / Met / Missed> (due <date>, priority <P1/P2/…>)
**Asset:** <hostname> — <OS + version>, criticality <numeric 1–5>, reachability <Exposed / NotExposed>
### Remediation guidance from the platform
_Source: `<field path>` (integration: `<name>`)_
> <quoted content>
_Source: `<another field>`_
> <quoted content>
### Fixed version (if known)
- <version> — source: `<field path>` or vendor advisory
### Workaround
- <quoted or "none documented in platform record">
### Compensating controls
- <quoted or "none documented; consider WAF / network segmentation">
### Pre-patch risk (from platform)
- Other open exposures on the same asset(s): <list or "none">
- Asset criticality: <>
- Reachability: <>
### Ticketing draft (copy-paste)
**Title:** Patch <CVE> on <asset>
**Body:**
> <all of the above, with platform deep link>
> — Drafted by Claude + securin-remediation-guidance. Create manually in your ticketing system (MCP M1 is read-only for write actions).
### Platform links
- Exposure record: <url>
- Vulnerability record: <url>
- All open exposures for this CVE in your account: <url>
### Additional web-sourced references (if the user opted in)
- Vendor advisory: <url> — quoted excerpt: <…>
- KB article: <url> — quoted excerpt: <…>
Handoff (draft, don't create)
If getConfiguredIntegrations shows a ticketing integration (Jira, ServiceNow) configured:
- Draft a ticket body suitable for copy-paste.
- Do not create the ticket. Write actions are out of scope for MCP Milestone 1.
See references/patch-lookup-patterns.md for platform-specific upgrade command templates and ticket boilerplate.
Edge cases
- Platform has zero remediation content for this exposure — tell the user explicitly. Offer web search as an opt-in.
- Exposure is a misconfiguration (no CVE) —
exposure.mappedAttributes.remediation or scanner-native solution is usually the best source; skip CVE queries.
- Multi-CVE exposure — pull remediation content per CVE; deduplicate if multiple CVEs share the same fix.
- True zero-day (no patch yet) — the platform likely has
vulnerabilities.tags = 'Zero Day' set; route via securin-zero-day-exposure-analysis for compensating-controls guidance.
- Asset is EOL — flag; upgrade may not be possible, recommend isolation / replacement.
Scope guard (CC-3)
- Global CVE intel (no specific fix plan) →
securin-cve-enrichment.
- Prioritization across many exposures →
securin-exposure-triage.
- "Am I affected by threat X" →
securin-threat-correlation.
- Zero-day-specific analysis →
securin-zero-day-exposure-analysis.
- Unknown platform capability → fall back to the platform's built-in
Securin__search_tools meta-tool to look up the right MCP tool by description.
Visual output (CC-4)
When this skill produces aggregated or multi-row data (counts, trends, distributions, comparisons, single-CVE reports), emit a chart/graph/infographic in the Securin brand — multi-series palette (#9C66FF / #7F30FF / #E96001 / #4D268D / #DD639C / …, assigned in order), semantic CHML severity colors (Critical #A60D08 → Info #C5CBD6), Poppins headings on DM Sans body, light theme, and the Securin logo. Use the 10-stop brand purple ramp for heatmaps/sequential scales; gradients are background decoration only — never on chart bars, lines, or slices. Full color system in _shared/brand.md. Offer customization after delivery; never default to a different brand.
References
- Patch Lookup Patterns — platform upgrade-command templates, ticket boilerplate.
- Shared: Account Preflight
- Shared: Composite vs Source
- Shared: Deep Links
- Shared: FQL Grammar
- Shared: Sorting Rules
- Shared: Brand & Visual Communication
1---2name: securin-remediation-guidance3description: Use this skill when the user asks "how do I fix this exposure", "remediate this vulnerability", "what's the fix for...", "patch guidance for CVE-XXX", "workaround for this vuln", or needs an actionable fix plan for a specific exposure or CVE. The skill reads remediation, solution, and patch fields already populated in the platform (built-in, mapped, or scanner-provided) first, and only offers a web-search enrichment after user confirmation. For prioritization across many exposures use securin-exposure-triage; for global CVE intel use securin-cve-enrichment. Requires the Securin Platform MCP server.4---56# Remediation Guidance78## Purpose910Produce an **actionable fix plan** for a specific exposure or CVE — drawn primarily from the platform's own remediation content (built-in fields, mapped attributes, scanner-native fields). Web search is an opt-in enrichment, not a default step.1112## When to use1314- "How do I fix CVE-2024-3400?"15- "Remediate exposure `exp-abc123`"16- "Patch guidance for log4j"17- "What's the workaround while we can't patch?"18- "Compensating controls for this vuln"19- "Generate a ticket body for this exposure"2021## Pre-flight2223### Step 0 — Account preflight (CC-1)2425See [_shared/account-preflight.md](references/_shared/account-preflight.md). Required — remediation plans read the user's exposure records.2627Before using this skill, read every file in the [references folder](references/), including the shared [references/_shared/](references/_shared/) docs.2829## Suggested tools3031### Pre-flight (CC-1, see shared doc)32- `getUserProfile` — resolve caller's accessible accounts + user-id33- `getEffectiveAccess` / `getEffectiveAccessWorkspaces` — per-resource access when needed3435### Read remediation content (primary)36- `searchExposureData` (source) or `exposureQuery` (composite) — exposure records; **this is where most remediation content lives**, under `exposure.mappedAttributes.*` / `compositeExposure.sources.mappedAttributes.*` or scanner-specific fields37- `searchVulnerabilityData` — CVE record with fixed-in version and vendor references (when available)38- `searchAssetData` (source) or `assetQuery` (composite) — asset platform context (OS, version) so the fix advice is relevant39- `searchComponentData` — installed component / package version (for package-manager style remediation)40- `getApiFields(entityType=['EXPOSURE'], searchText='remediation')` — discover all remediation-bearing fields for this account41- `getApiFields(entityType=['EXPOSURE'], searchText='solution')` — same for scanner-native `solution` fields42- `getApiFields(entityType=['EXPOSURE'], searchText='patch')` / `'fix'` — same for patch / fix-info fields4344### Integrations / actions45- `getConfiguredIntegrations` — **call early**. Returns every configured scanner + ticketing integration with `id`, `name`, `vendorName`, `type` (`SCANNER` / `TICKETING`), and **`prefix`** (e.g. `WIZ`, `Q-VMDR`, `NESSUS`, `SNYK`, `SERVICE_NOW_INCIDENT`). **Two uses:**46 1. **Find scanner-specific remediation fields.** The `prefix` maps to an integration-specific field group — pass it as `fetchGroups` to `getApiFields(entityType=['EXPOSURE'])` to retrieve that integration's remediation/solution/advisory fields (e.g., Qualys `solution`, Tenable `solution`, Rapid7 `solution`). Scanner-native fields often have richer vendor advisory text than the generic `exposure.mappedAttributes.vendorRemediation`.47 2. **Detect ticketing handoff options.** Filter `type = 'TICKETING'` to find Jira / ServiceNow / ServiceNow_Incident integrations for draft ticket output.4849### Deep links (CC-2)50- See [_shared/deep-links.md](references/_shared/deep-links.md). Call `createDeepLink` for every list or table of exposure / asset records you surface. Skip only for single-record drilldowns and purely conceptual responses (no customer data list). Do not fabricate or omit links for list responses.5152### Opt-in enrichment (after user confirms)53- **Web search** — vendor advisory, KB article, community workarounds. Do not run by default.5455## Workflow5657### Step 1 — Identify the subject5859- Exposure-id → fetch the single exposure record.60- CVE → fetch all matching exposures in the account scope (filter `exposure.mappedAttributes.vulnerabilityIds = 'CVE-X' AND exposure.status = 'Open'`). If many, ask the user whether to plan for all, a subset, or give a CVE-level summary.61- Vulnerability name (no CVE) → resolve via `searchVulnerabilityData` on name/aliases; confirm with the user.6263### Step 2 — Read platform remediation fields first6465Fetch the exposure(s) with `searchExposureData`. Always include at minimum:6667```json68"fields": [69 "exposure.exposureId",70 "exposure.title",71 "exposure.scores.scoreLevel",72 "exposure.scores.score",73 "exposure.mappedAttributes.vulnerabilityIds",74 "exposure.mappedAttributes.vendorRemediation",75 "exposure.remediationTarget.status",76 "exposure.remediationTarget.dueDate",77 "exposure.remediationTarget.priority",78 "asset.criticality",79 "asset.reachability"80]81```8283For richer coverage (account-specific integration fields), pre-discover via `getApiFields(entityType=['EXPOSURE'], searchText='remediation')` and append matched `apiPath`s.8485**The canonical field :**8687| Field | Notes |88|---|---|89| **`exposure.mappedAttributes.vendorRemediation`** | **Primary source of scanner-provided remediation text. Always request this field first.** Example real value: *(example: a vendor advisory patch instruction)* |90| `genericExposure.vulnerability.attributes.vendorRemediation` | Alternate path on generic-connector exposures |9192Secondary / structured remediation fields (also populated on most accounts):9394| Field | Type | Use |95|---|---|---|96| `exposure.remediationTarget.status` | enum `On Track / Overdue / Met / Missed` | SLA state |97| `exposure.remediationTarget.dueDate` | date | Due date |98| `exposure.remediationTarget.priority` | string (`P1`, `P2`, …) | Priority band |99| `exposure.remediationTarget.targetDays` | integer | SLA target window |100| `exposure.scores.remediationScore` | number | Platform-computed remediation urgency |101102Account-specific integration fields may exist (Qualys, Tenable, CrowdStrike, Rapid7 — discover via `getApiFields(entityType=['EXPOSURE'], searchText='remediation')`). Present whatever is populated, **clearly labeled with the source field**.103104### Step 3 — Enrich with asset + vulnerability context, and discover scanner-native remediation105106Run in parallel:107- `searchAssetData` (or composite) to get the affected asset's OS, version, criticality, reachability.108- `searchVulnerabilityData` for the CVE record if not already fetched — confirm severity, KEV, exploit status.109- **`getConfiguredIntegrations`** — critical step. From the response, identify which SCANNER integration produced the exposure (match the exposure's scanner source to an integration's `prefix`). Then call:110 ```text111 getApiFields(entityType=['EXPOSURE'], fetchGroups='<PREFIX>', searchText='remediation')112 getApiFields(entityType=['EXPOSURE'], fetchGroups='<PREFIX>', searchText='solution')113 getApiFields(entityType=['EXPOSURE'], fetchGroups='<PREFIX>', searchText='fix')114 ```115 to enumerate that scanner's remediation/solution/fix fields. Add those paths to your `searchExposureData` `fields` array to pull the scanner-native remediation text. Common integrations and their typical remediation fields:116 - **Qualys VMDR/EASM** (`Q-VMDR`, `Q-EASM`, `Q-PC`, `Q-WAS`) — `solution` field117 - **Tenable Nessus / IO / SC** (`NESSUS`, `TIO_QA`, `TSC`) — `solution` field118 - **Rapid7 InsightVM / Nexpose** (`IVM`, `IVM_CLOUD`, `NEXPOSES`) — `solution` field119 - **WIZ** (`WIZ`) — remediation steps in the finding record120 - **CrowdStrike Falcon Spotlight** (`FS`) — `remediation` field121 - **Snyk** (`SNYK`) — `fixedIn` / `remediation`122123 Ticketing integrations (`type = 'TICKETING'`, e.g. `SERVICE_NOW_INCIDENT`) surface draft-ticket handoff options in Step 5.124125### Step 4 — Ask before web-searching126127The platform remediation content is often sufficient. Before running web search, ask:128129> "I found remediation guidance in the platform (sources: <list>). Want me to also search vendor advisories / KBs on the web for more depth? (Y/n)"130131If the user says yes, proceed to Step 5. If no, skip to Step 6.132133### Step 5 — (Opt-in) Web-search vendor advisories134135Only when the user confirmed. Search for:1361. The official vendor advisory for the CVE.1372. KB article or release notes for the fixed version.1383. Known workarounds / compensating controls.139140Read the content — do not just link. Quote the specific steps. See [references/patch-lookup-patterns.md](references/patch-lookup-patterns.md).141142### Step 6 — Construct the fix plan143144Organize findings into this structure. Fields you couldn't populate (because the platform didn't have them and web search was declined) are explicitly marked "not available".145146```markdown147## Remediation Plan — <CVE or exposure id>148149**Subject:** <CVE> on <asset hostname>150**Severity:** <Critical/High/Medium/Low/Info> (KEV: yes/no, score: <exposure.scores.score>)151**Remediation status:** <On Track / Overdue / Met / Missed> (due <date>, priority <P1/P2/…>)152**Asset:** <hostname> — <OS + version>, criticality <numeric 1–5>, reachability <Exposed / NotExposed>153154### Remediation guidance from the platform155_Source: `<field path>` (integration: `<name>`)_156> <quoted content>157158_Source: `<another field>`_159> <quoted content>160161### Fixed version (if known)162- <version> — source: `<field path>` or vendor advisory163164### Workaround165- <quoted or "none documented in platform record">166167### Compensating controls168- <quoted or "none documented; consider WAF / network segmentation">169170### Pre-patch risk (from platform)171- Other open exposures on the same asset(s): <list or "none">172- Asset criticality: <>173- Reachability: <>174175### Ticketing draft (copy-paste)176**Title:** Patch <CVE> on <asset>177**Body:**178> <all of the above, with platform deep link>179> — Drafted by Claude + securin-remediation-guidance. Create manually in your ticketing system (MCP M1 is read-only for write actions).180181### Platform links182- Exposure record: <url>183- Vulnerability record: <url>184- All open exposures for this CVE in your account: <url>185186### Additional web-sourced references (if the user opted in)187- Vendor advisory: <url> — quoted excerpt: <…>188- KB article: <url> — quoted excerpt: <…>189```190191## Handoff (draft, don't create)192193If `getConfiguredIntegrations` shows a ticketing integration (Jira, ServiceNow) configured:194- Draft a ticket body suitable for copy-paste.195- **Do not create the ticket.** Write actions are out of scope for MCP Milestone 1.196197See [references/patch-lookup-patterns.md](references/patch-lookup-patterns.md) for platform-specific upgrade command templates and ticket boilerplate.198199## Edge cases200201- **Platform has zero remediation content for this exposure** — tell the user explicitly. Offer web search as an opt-in.202- **Exposure is a misconfiguration (no CVE)** — `exposure.mappedAttributes.remediation` or scanner-native `solution` is usually the best source; skip CVE queries.203- **Multi-CVE exposure** — pull remediation content per CVE; deduplicate if multiple CVEs share the same fix.204- **True zero-day (no patch yet)** — the platform likely has `vulnerabilities.tags = 'Zero Day'` set; route via `securin-zero-day-exposure-analysis` for compensating-controls guidance.205- **Asset is EOL** — flag; upgrade may not be possible, recommend isolation / replacement.206207## Scope guard (CC-3)208209- Global CVE intel (no specific fix plan) → `securin-cve-enrichment`.210- Prioritization across many exposures → `securin-exposure-triage`.211- "Am I affected by threat X" → `securin-threat-correlation`.212- Zero-day-specific analysis → `securin-zero-day-exposure-analysis`.213- Unknown platform capability → fall back to the platform's built-in `Securin__search_tools` meta-tool to look up the right MCP tool by description.214215## Visual output (CC-4)216217When this skill produces aggregated or multi-row data (counts, trends, distributions, comparisons, single-CVE reports), emit a chart/graph/infographic in the Securin brand — multi-series palette (`#9C66FF / #7F30FF / #E96001 / #4D268D / #DD639C / …`, assigned in order), semantic CHML severity colors (Critical `#A60D08` → Info `#C5CBD6`), Poppins headings on DM Sans body, light theme, and the Securin logo. Use the 10-stop brand purple ramp for heatmaps/sequential scales; gradients are background decoration only — never on chart bars, lines, or slices. Full color system in [_shared/brand.md](references/_shared/brand.md). Offer customization after delivery; never default to a different brand.218219## References220221- [Patch Lookup Patterns](references/patch-lookup-patterns.md) — platform upgrade-command templates, ticket boilerplate.222- [Shared: Account Preflight](references/_shared/account-preflight.md)223- [Shared: Composite vs Source](references/_shared/composite-vs-source.md)224- [Shared: Deep Links](references/_shared/deep-links.md)225- [Shared: FQL Grammar](references/_shared/fql-grammar.md)226- [Shared: Sorting Rules](references/_shared/sorting-rules.md)227- [Shared: Brand & Visual Communication](references/_shared/brand.md)