blob: a3d7f78874bfd68b1ea4b9e683b29d98d7809439 [file] [view]
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*
- [Security workflow skill family](#security-workflow-skill-family)
- [Skills](#skills)
- [Lifecycle skills](#lifecycle-skills)
- [Supporting tools](#supporting-tools)
- [Deep documentation](#deep-documentation)
- [Adopter contract](#adopter-contract)
- [Cross-references](#cross-references)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
<!-- SPDX-License-Identifier: Apache-2.0
https://www.apache.org/licenses/LICENSE-2.0 -->
# Security workflow skill family
End-to-end automation for an ASF project's security-issue handling
process — from inbound report on the project's `security@` mailing
list through to a published CVE record on `cve.org`. Nine skills
that compose into the canonical 16-step lifecycle, plus one
read-only supporting skill for tracker-stats dashboards.
Why a framework skill family? The 16-step process exists across
the foundation; every project's security team runs essentially
the same workflow with project-specific scope labels, mailing-list
addresses, milestone formats, and canned-response wording. Lifting
the workflow into a project-agnostic framework lets each adopter
plug their specifics into [`<project-config>/`](../../projects/_template/)
and reuse the skills verbatim.
## Skills
### Lifecycle skills
| Skill | Purpose |
|---|---|
| [`security-issue-import`](../../skills/security-issue-import/SKILL.md) | Import new reports from `<security-list>` into `<tracker>`. |
| [`security-issue-import-from-pr`](../../skills/security-issue-import-from-pr/SKILL.md) | Open a tracker for a security-relevant fix opened as a public PR. |
| [`security-issue-import-from-md`](../../skills/security-issue-import-from-md/SKILL.md) | Bulk-import findings from a markdown report. |
| [`security-issue-triage`](../../skills/security-issue-triage/SKILL.md) | Propose an initial-triage disposition (VALID / DEFENSE-IN-DEPTH / INFO-ONLY / INVALID / PROBABLE-DUP / FIX-ALREADY-PUBLIC) for each tracker still in `Needs triage`; opens a discussion comment, never flips the label. |
| [`security-issue-sync`](../../skills/security-issue-sync/SKILL.md) | Reconcile a tracker against its mail thread, fix PR, release train, and archives. |
| [`security-cve-allocate`](../../skills/security-cve-allocate/SKILL.md) | Allocate a CVE for a tracker (Vulnogram URL + paste-ready JSON). |
| [`security-issue-fix`](../../skills/security-issue-fix/SKILL.md) | Implement the fix as a public PR in `<upstream>`. |
| [`security-issue-deduplicate`](../../skills/security-issue-deduplicate/SKILL.md) | Merge two trackers describing the same root-cause vulnerability. |
| [`security-issue-invalidate`](../../skills/security-issue-invalidate/SKILL.md) | Close a tracker as invalid with a polite-but-firm reporter reply. |
### Supporting tools
| Skill | Purpose |
|---|---|
| [`security-tracker-stats-dashboard`](../../skills/security-tracker-stats-dashboard/SKILL.md) | Generate a self-contained HTML dashboard of `<tracker>` repo statistics (lifecycle bands, opened-vs-untriaged backlog, mean time to triage / first response / fix). Read-only — never modifies tracker state. |
## Deep documentation
- [**`process.md`**](process.md) — the 16-step lifecycle with
Mermaid diagram + per-step description; the label lifecycle
state diagram + label reference table. The authoritative
process reference.
- [**`roles.md`**](roles.md) — who owns which steps (issue
triager / remediation developer / release manager), the shared
conventions every role observes (keeping the reporter informed,
recording status transitions, confidentiality), and the
role-by-role workflow walkthroughs.
- [**`how-to-fix-a-security-issue.md`**](how-to-fix-a-security-issue.md) —
hands-on guide for a remediation developer picking up a
CVE-allocated tracker and shipping the fix.
- [**`new-members-onboarding.md`**](new-members-onboarding.md) —
onboarding for a new security-team member: tracker access, mail
list subscription, expected reading, first triage shadow.
- [**`threat-model.md`**](threat-model.md) — release-blocking
threat model for the security skill family: trust boundaries,
adversary personas, STRIDE matrix per skill, mitigation cross-
reference, residual risk, and the re-audit cadence.
- [**`forwarder-routing-policy.md`**](forwarder-routing-policy.md) —
when a tracker has no direct reporter contact (ASF-relay,
read-only GHSA, anonymous tip), the skills route reporter-facing
communication through the forwarder. The policy defines when
that mode applies, the milestone list (events that **do** get
relayed), and the negative list (events that don't — including
credit-confirmation questions and regular workflow status).
## Adopter contract
The skills resolve project-specific content from the security-
workflow files in
[`<project-config>/`](../../projects/_template/) — see the
adopter scaffold's
[`README.md`](../../projects/_template/README.md) for the
file-by-file index. Required at minimum:
- `project.md` — identity, repos, mailing lists, tools
- `canned-responses.md` — reporter-facing reply templates
- `scope-labels.md` — scope label → CVE product mapping
- `release-trains.md` — release-manager attribution
- `title-normalization.md` — CVE-title regex cascade
Optional but commonly needed:
`milestones.md`, `fix-workflow.md`, `security-model.md`,
`naming-conventions.md`.
## Cross-references
- [Top-level README — Adopting the framework](../../README.md#adopting-the-framework) — 3-step bootstrap.
- [`docs/prerequisites.md`](../prerequisites.md) — what a security
triager / remediation developer / release manager needs
installed before invoking any skill.