agentleFS
SkillMedevSkillMedev/security-compliance-hardening/skills/vulnerability-triage/SKILL.md

vulnerability-triage

Skill0 starsChanged 40 days agoMITView on GitHub

Prioritizes vulnerability findings from scanners, pentest reports, and bug bounty submissions by real-world exploitability rather than raw CVSS, assigning internal severity tiers with fix SLAs. Use when someone asks "which of these CVEs do we fix first", "triage this scanner report", "is this CVSS 9.8 actually critical for us", or is facing a wall of security findings and needs an actionable queue. Do NOT use for enumerating threats in a design that has not shipped - use threat-model-stride instead; for an active exploitation incident in production, use sev-triage; for reviewing the code itself, use secure-code-review.

7 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use 0-template, github-actions-builder and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • JayRHaSkill

    0-template

    Template for creating a new Agent Skill. Copy this folder, rename it to your skill's kebab-case name, and fill in every section. Use this as the starting point whenever you author a new skill for the AgentSkills library.

    Also in 3 projects that use this

  • JayRHaSkill

    github-actions-builder

    Builds reliable, fast, and secure GitHub Actions CI/CD workflows with dependency caching, build matrices, scoped secrets, concurrency control, and reusable/composite workflows. Use this skill when the user asks to "create a GitHub Actions workflow", "set up CI", "add CI/CD", "fix a flaky/slow GitHub Actions pipeline", "add a build matrix", "cache dependencies in CI", "write a reusable workflow", "configure deployment with environments and secrets", or mentions files under .github/workflows.

    Also in 3 projects that use this

  • xmqywxSkill

    meeting-summarizer

    Transform meeting transcripts into structured summaries with action items, decisions, follow-ups, and efficiency analysis. Works with any meeting format.

    Also in 3 projects that use this

  • MehdibargachSkill

    okr-writer

    Turn business goals into structured OKRs with measurable Key Results, linked initiatives, alignment check, and anti-goals. Takes a strategic priority and outputs ready-to-use OKRs.

    Also in 3 projects that use this

  • pbc-osSkill

    secrets-manager

    Set up and configure cloud secrets management for your AI agent. Guides users through platform selection (GCP, AWS, Azure, 1Password, Doppler, HashiCorp Vault), account setup, CLI configuration, and secure credential storage.

    Also in 3 projects that use this

  • +7 more from JayRHa

The file

We split this skill into the rules it gives an agent

10 rules. 0 are common, 10 are distinctive, and 0 are very specific to this project.

  • 0

    Common

    Most of the 7 edited versions we read keep these.

  • 10

    Distinctive

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Never mark a false positive on intuition.

    line 48
  2. Distinctive:

    Do not sort the queue by CVSS descending - that is the failure mode this skill exists to prevent.

    line 78
  3. Distinctive:

    Do not triage finding-by-finding before grouping by root cause.

    line 79
  4. Distinctive:

    Do not dismiss a finding as a false positive without a documented, specific reason - intuition dismissals are how real vulnerabilities get …

    line 80
  5. Distinctive:

    Do not treat "not in KEV, no public PoC" as safe.

    line 81
  6. Distinctive:

    Do not silently extend SLA deadlines.

    line 82
  7. Distinctive:

    Do not let a compensating control both downgrade a finding and go unnamed - an unnamed control cannot be verified and will eventually be …

    line 83
  8. Distinctive:

    Every finding group carries an internal severity that cites reachability, auth requirement, exploit availability, and config match - not a …

    line 87
  9. Distinctive:

    Every Critical maps to a 24-hour SLA, High to 7 days, Medium to 30 days, with a named owner each.

    line 89
  10. Distinctive:

    Every false positive has a documented reason from the accepted list, and Critical/High dismissals show a second reviewer.

    line 90

“Common” is measured: kept by at least 6 in 10 of the 7 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Vulnerability Triage

Vulnerability scanners produce volume, not priority. Effective triage cuts the list to an actionable queue engineers can work without burning out or quietly ignoring legitimate risk. The costly mistake this skill prevents is sorting by CVSS descending - which puts an unreachable library bug ahead of a trivially exploitable flaw on the public edge, and spends the team's scarce patching capacity in exactly the wrong order.

Operating procedure

Grouping comes before scoring because one root-cause fix can close ten findings; scoring before grouping wastes ten triage passes on one bug.

Step 1: Gather inputs

  • The finding list with source (scanner, pentest, bounty) and reported CVSS per item.
  • An exposure map: which services are internet-facing, which are internal-only, and what sits behind VPN, WAF, or MFA. If none exists, build a rough one from the load balancer and DNS config and label it a guess.
  • Deployed versions and configuration for the affected components - the vulnerable config often is not the deployed config.
  • Access to the CISA KEV catalog and exploit-availability data for the findings in question.
  • The team's remediation capacity, so SLAs are commitments rather than fiction.

Step 2: Deduplicate and group by root cause

Scanners report the same root cause through multiple symptoms. Group findings by shared cause (example: every XSS finding traced to the same template-engine misconfiguration) before scoring anything. One fix may close ten findings - identify these first for maximum leverage.

Step 3: Score exploitability, not just CVSS

CVSS base scores measure theoretical severity in an ideal attacker environment, not this environment. Use the standard bands only as the scanner's starting label - 9.0-10.0 Critical, 7.0-8.9 High, 4.0-6.9 Medium, 0.1-3.9 Low - then answer four questions per finding group before assigning internal priority:

  • Is the vulnerable component reachable from an untrusted input source (public internet, anonymous API, user-controlled data)?
  • Does exploitation require authentication? At what privilege level?
  • Is there a public proof-of-concept, or active in-the-wild exploitation (check the CISA KEV catalog)? KEV-listed findings on reachable components jump to the top of their tier regardless of score.
  • Does the deployed configuration match the vulnerable configuration (a path traversal in a feature the app does not use is a different conversation)?

The governing rule: a CVSS 9.8 in an internal-only admin service behind VPN with MFA is lower priority than a CVSS 6.5 on a public unauthenticated endpoint.

Step 4: Assign internal severity with SLAs

  • Critical: remotely exploitable, no auth required, leading to RCE, data exfiltration, or full account takeover. Fix within 24 hours.
  • High: exploitable with low privilege or one chaining step, significant data exposure or service disruption possible. Fix within 7 days.
  • Medium: requires significant user interaction or specific non-default config, limited impact scope. Fix within 30 days.
  • Low: defense-in-depth improvement, informational, or requires physical access. Schedule in the next sprint cycle.

Step 5: Document false positives systematically

Never mark a false positive on intuition. Record the specific reason:

  • Component not deployed in this environment.
  • Vulnerable code path is dead code - reference the specific unreachable call path.
  • A compensating control prevents exploitation - name the control and where it is enforced.

False-positive decisions on Critical and High findings require a second reviewer.

Step 6: Ticket, track, escalate

Every finding above Low gets a ticket with internal severity, finding source, assigned owner, and SLA due date. Track SLA breach rate as an engineering health metric. When a Critical or High misses its SLA, escalate to engineering leadership - never silently extend the deadline, because a slipped deadline nobody sees is a risk acceptance nobody approved.

Worked example: two findings, inverted priority

Finding AFinding B
ReportRCE in an admin service library, CVSS 9.8IDOR on a customer API endpoint, CVSS 6.5
ReachabilityInternal-only, behind VPN + MFAPublic internet, unauthenticated
Exploit statusNo public PoC, not in KEVTrivial to reproduce from the bounty report
Config matchVulnerable module loaded but feature unusedDeployed exactly as reported
Internal severityHigh - RCE still warrants urgency, but exploitation requires a VPN-compromise chain first. Fix within 7 days.Critical - anonymous access to other customers' data, live today. Fix within 24 hours.

Verdict: fix B first. Sorting by CVSS would have inverted this - the 9.8 would consume the emergency window while customer data sat exposed behind the 6.5.

Deliverable

Produce a triage queue containing: findings grouped by root cause with the leverage fixes flagged, each group's internal severity with the exploitability rationale (reachability, auth requirement, exploit availability, config match), the SLA due date and owner per group, and a false-positive log with documented reasons and second-reviewer sign-off for Critical/High dismissals.

Do NOT

  • Do not sort the queue by CVSS descending - that is the failure mode this skill exists to prevent.
  • Do not triage finding-by-finding before grouping by root cause; it burns effort and hides leverage fixes.
  • Do not dismiss a finding as a false positive without a documented, specific reason - intuition dismissals are how real vulnerabilities get archived.
  • Do not treat "not in KEV, no public PoC" as safe; it lowers urgency, it does not remove the finding.
  • Do not silently extend SLA deadlines; escalate misses so risk acceptance is explicit and owned.
  • Do not let a compensating control both downgrade a finding and go unnamed - an unnamed control cannot be verified and will eventually be removed by someone who never knew it mattered.

Quality bar

  • Every finding group carries an internal severity that cites reachability, auth requirement, exploit availability, and config match - not a copied CVSS number.
  • Root-cause groups exist, and at least the top leverage fix is identified.
  • Every Critical maps to a 24-hour SLA, High to 7 days, Medium to 30 days, with a named owner each.
  • Every false positive has a documented reason from the accepted list, and Critical/High dismissals show a second reviewer.
  • SLA breach rate is reported, not just individual ticket states.

Escalation

Evidence of active exploitation - KEV listing plus matching anomalous logs, or a bounty reporter demonstrating live access - turns triage into incident response: route to sev-triage immediately. Design-stage threat enumeration for unshipped features belongs with threat-model-stride; hands-on review of suspect code with secure-code-review; leaked credentials discovered inside findings with secrets-hygiene.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.