SPEC-11: Vulnerability disclosure
title: "SPEC 11 — Vulnerability disclosure
number: 11
date: 2025-05-12
author:
Description
This SPEC outlines the process for vulnerability disclosure. It aims to provide clear guidelines for the identification, reporting, and remediation of security vulnerabilities within projects.
Core Project Endorsement
Ecosystem Adoption
TODO: Risks in smaller projects vs risks in larger projects. This might change strict adherence to the implementation here.
Implementation
Security vulnerabilities should be handled quickly, and sometimes privately. The primary goal of this process is to reduce the total time users are vulnerable to both publicly and privately known reports.
To achieve this goal, the project should provide well-defined ways to report vulnerabilities (e.g., special email address such as security@<project>.com
, forum, GitHub private security reporting, vulnerability reward programs). All suspected vulnerabilities should be handled in accordance with Responsible Disclosure model. The project should provide a mechanism for researchers to submit GPG encrypted vulnerability reports, for vulnerabilities with a higher degree of sensitivity.
The project should ensure that a Security Response Team (SRT) exists. This team could be shared with other projects in the same organization, or within the same ecosystem. SRT has the following responsibilities:
- Triage: assess the impact of any vulnerability. Can the vulnerability be replicated? Which projects are affected? What is the blast radius? Who is responsible for the fix? Is there a need for coordinated disclosure between multiple projects?
- Infrastructure: create security advisories, ensure teams working on fixing a vulnerability can work in private, create tests for the vulnerability and its variants.
- Disclosure: handle public messaging around the vulenrability by drafting an advisory to document the impact, how to upgrade, how to mitigate if upgrade is not possible.
- Release: create patch releases containing the fix and notify the public.
For each vulnerability, the SRT should follow these steps:
- Acknowledge the report: The SRT should respond to any report in at most 24 hours. For this, there should be inventory of all the places where vulnerabilities can be reported, and SRT should monitor all of these (via automation and dashboards where possible). The SRT will handle communication with the reporter throughout the vulnerability fixing process, updating the reporter on the disclosure timeline.
- Triage the vulnerability: The SRT should attempt to reproduce the vulnerabiltiy and analyze its impact. The SRT should rate the impact and consider coordinated disclosure based on the traffic light protocol (TLP).
- Assign the vulnerability fix to fixing team: The SRT is not responsible for fixing all vulnerabilities themselves. They should delegate to a team that has the most accurate knowledge of the involved codebase. In general, the fixing team should be formed from maintainers of the affected projects. Depending on TLP level, other members of the project could be brought in, as needed, but only after consulting the SRT.
- Prepare a disclosure timeline: Judging based on severity, complexity of the code base, development time, release work, dependencies on upstream, the SRT should create a timeline for when the vulnerability fix should be released and the public would be notified about the vulnerability. If the vulnerability has a low severity, the timeline can be extended to slow the release process to account for holidays, developer bandwidth, etc.
- Request and prepare a CVE: The SRT would prepare a security advisory in the affected repositories and obtain CVE numbers for the vulnerabilities. As many details as possible should be entered into the advisory. Each time new information is discovered, the advisory should be update. A vulnerability severity score, computed using CVSS should be added. Members of the fixing team should be added to the advisory, to contribute details.
- Create a private fork for the fixing team to fix the vulnerability in private. This is a temporary fork and should be deleted once the vulnerability is fixed. It should only be created to ensure CI can run on code fixing the vulnerability without accidentally disclosing the vulnerability.
- Plan and perform the patch release. Once the fixing team has submitted all necessary fixes for the vulnerability and its variants and the SRT has verified that the work is completed, the two teams agree on a release timeline and perform the release as well as announce the vulnerability to the public.
On the release day, the SRT and the fixing team:
- merge all the commits from the private fork into the project repository
- start patch releases for all affected versions in the supported range
- publish all release binaries and packages
- publish the security advisory
- publish an announcement that is actionable, contains mitigation steps for users that cannot upgrade to the newly released patched versions, and is distributed to a wide audience.
A template of the announcement could be:
Notes
A few days after the release, the SRT could write a retrospective of the vulnerability and fixing process, with details on everyone involved, links to PRs, and other relevant information. This is to encourage learning, preventing future similar vulnerabilities and providing opportunities for improving the disclosure process.