| # Handling Go Vulnerability Reports |
| |
| This document explains how we handle vulnerability issue triage in the |
| [x/vulndb issue tracker](http://github.com/golang/vulndb). |
| |
| ## Reports |
| |
| All vulnerabilities in the Go vulnerability database are currently stored as a |
| YAML file in the reports/ directory. |
| |
| Each vulnerability is given an ID with the format GO-YYYY-NNNN. |
| |
| - The YYYY component corresponds to the year in which the vulnerability was |
| published. |
| - The NNNN component is a unique ID for that vulnerability, which is generated |
| using the GitHub issue ID for that vulnerability. |
| |
| For a detailed explanation of the report format, see [doc/format.md](format.md). |
| |
| ## Issue States |
| |
| Any issue must be in one of the following states. Maintainers of the Go vulndb |
| move issues from one state to another. The intent behind these explicit states |
| is to describe the (minimum) next steps required to bring the issue to |
| resolution. |
| |
| Issues are intended to move between these states: |
| |
| ``` |
| +-------------+ |
| | | via CL |
| +------------>| NeedsReport +----------+ |
| | | | | |
| | +-------------+ | |
| +---------+--------+ v |
| | | Closed |
| New ---->|NeedsInvestigation| |
| | (optional) | +------------+ ^ |
| +----------+-------+ | | | |
| | | NotGoVuln +-----------+ |
| +----------->| | |
| +------------+ |
| ``` |
| |
| ### New |
| |
| - The issue has been filed by the vulndb worker |
| - The issue will have the title: `x/vulndb: potential Go vuln in <module/package>: <CVE ID>` |
| - To transition from this state, someone must: |
| |
| - Label the issue as NotGoVuln, and close the issue. |
| - Label the issue as NeedsReport, and make a CL |
| - Label the issue as NeedsInvestigation, and CC people who might be best to |
| investigate the issue and provide further context. |
| |
| ### Needs Investigation |
| |
| - The issue has the label `NeedsInvestigation` |
| - This state is used by the triager when it is not clear to them how to |
| proceed. Otherwise, an issue can move straight from New to one of the other |
| states. |
| - Someone (CC-ed) must examine the issue and confirm whether or not it is a Go vuln |
| |
| ### Needs Report |
| |
| - The issue has been confirmed to be a Go vulnerability, an a report needs to |
| be added to the vulndb for this CVE. |
| - The issue has the label `NeedsReport` |
| |
| ### Not Go Vuln |
| |
| - The issue has been confirmed to not be a Go vulnerability. |
| - The issue is resolved and can be closed. |
| - The `NotGoVuln` label should be applied at the time the issue is closed for |
| tracking purposes (such as data on how to improve the automatic triager). |
| |
| ## Adding a new report |
| |
| If an issue is labeled with `NeedsReport` and is not assigned to anyone, you |
| can add a new report to the database by following these steps: |
| |
| 1. Assign the issue to yourself. |
| 2. Clone the x/vulndb repository: `git clone https://go.googlesource.com/vulndb` |
| 3. Run `go run ./cmd/vulnreport create <GitHub issue number>`. (Note: You will need a |
| [GitHub access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)). |
| 4. Edit the template accordingly, and mail a CL with this commit message format: |
| |
| ``` |
| x/vulndb: add <GO Vuln ID> for <CVE ID> |
| |
| <description> |
| |
| Fixes golang/vulndb#<GitHub Issue #> |
| ``` |
| |
| vulnreport will download the github.com/CVEProject/cvelist repository and |
| create a YAML report template for the CVE at the specified GitHub issue number. |
| |
| ## Updating a report |
| |
| Occasionally, we will receive new information about a Go vulnerability and want |
| to update the existing report. |
| |
| In that case, reopen the issue for the report to discuss the change, rather |
| than create a new issue. |