blob: ed7dfd71a3c2af3246fb296f1d5b19c74978b262 [file] [log] [blame] [view]
# 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. You will need a
[GitHub access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)
with scope `repo: public_repo`.
Run `export VULN_GITHUB_ACCESS_TOKEN=<Github access token>`
4. Run `go run ./cmd/vulnreport create <GitHub issue number>`.
vulnreport will download the github.com/CVEProject/cvelist repository and
create a YAML report template for the CVE at the specified GitHub issue
number.
5. Edit the report file template.
6. Run `go run ./cmd/vulnreport commit <report file>`. This will lint the
report and commit it with a standard commit message.
### Standard Library Reports
When adding a vulnerability report about the standard library, ensure that the links section
follows this format:
```
- links:
- pr:
- https://go.dev/cl/<#>
- commit:
- https://go.googlesource.com/<repo>/+/<commit>
- context:
- https://go.dev/issue/<#>
- golang-announce@ email
```
You can find these links in the golang-announce@ email for the security release fixing this vulnerability.
**PR:** The PR will be a go.dev/cl/<#> link, found as a gopherbot comment on the issue for the vulnerability.
**Commit:** The commit is a go.googlesource.com link, which can be found on the CL page (see
[screenshot](https://user-images.githubusercontent.com/51683211/156475820-f671bcf5-d21e-4a25-ad3c-ee047ac91b91.png)).
**Issue:** The issue will be listed in the golang-announce@ email.
## 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.