|
| 1 | +# Node.js CVE management process |
| 2 | + |
| 3 | +The Node.js project acts as a [Common Vulnerabilities and Exposures (CVE) |
| 4 | +Numbering Authority (CNA)](https://cve.mitre.org/cve/cna.html). |
| 5 | +The current scope is for all actively developed versions of software |
| 6 | +developed under the Node.js project (ie. https://github.com/nodejs). |
| 7 | +This means that the Node.js team reviews CVE requests and if appropriate |
| 8 | +assigns CVE numbers to vulnerabilities. The scope currently **does not** |
| 9 | +include third party modules. |
| 10 | + |
| 11 | +More detailed information about the CNA program is available in |
| 12 | +[CNA_Rules_v1.1](https://cve.mitre.org/cve/cna/CNA_Rules_v1.1.pdf). |
| 13 | + |
| 14 | +## Contacts |
| 15 | + |
| 16 | +As part of the CNA program the Node.js team must provide a number |
| 17 | +of contact points. Email aliases have been setup for these as follows: |
| 18 | + |
| 19 | +* **Public contact points**. Email address to which people will be directed |
| 20 | + by Mitre when they are asked for a way to contact the Node.js team about |
| 21 | + CVE-related issues. **[email protected]** |
| 22 | + |
| 23 | +* **Private contact points**. Administrative contacts that Mitre can reach out |
| 24 | + to directly in case there are issues that require immediate attention. |
| 25 | + |
| 26 | + |
| 27 | +* **Email addresses to add to the CNA email discussion list**. This address has |
| 28 | + been added to a closed mailing list that is used for announcements, |
| 29 | + sharing documents, or discussion relevant to the CNA community. |
| 30 | + The list rarely has more than ten messages a week. |
| 31 | + |
| 32 | + |
| 33 | +## CNA management processes |
| 34 | + |
| 35 | +### CVE Block management |
| 36 | + |
| 37 | +The CNA program allows the Node.js team to request a block of CVEs in |
| 38 | +advance. These CVEs are managed in a repository within the Node.js |
| 39 | +private organization called |
| 40 | +[cve-management](https://github.com/nodejs-private/cve-management). |
| 41 | +For each year there will be a markdown file titled "cve-management-XXXX" |
| 42 | +where where XXXX is the year (for example 'cve-management-2017.md'). |
| 43 | + |
| 44 | +This file will have the following sections: |
| 45 | + |
| 46 | +* Available |
| 47 | +* Pending |
| 48 | +* Announced |
| 49 | + |
| 50 | +When a new block of CVEs is received from Mitre they will be listed under |
| 51 | +the `Available` section. |
| 52 | + |
| 53 | +These CVEs will be moved from the Available to Pending and Announced |
| 54 | +as outlined in the section titled `CVE Management process`. |
| 55 | + |
| 56 | +In addition, when moving a CVE from Available such that there are less |
| 57 | +than two remaining CVEs a new block must be requested as follows: |
| 58 | + |
| 59 | +* Use the Mitre request form https://cveform.mitre.org/ with the |
| 60 | + option `Request a Block of IDs` to request a new block. |
| 61 | +* The new block will be sent to the requester through email. |
| 62 | +* Once the new block has been received, the requester will add them |
| 63 | + to the Available list. |
| 64 | + |
| 65 | +All changes to the files for managing CVEs in a given year will |
| 66 | +be done through Pull Requests so that we have a record of how |
| 67 | +the CVEs have been assigned. |
| 68 | + |
| 69 | +CVEs are only valid for a specific year. At the beginning of each |
| 70 | +year the old CVEs should be removed from the list. A new block |
| 71 | +of CVEs should then be requested using the steps listed above. |
| 72 | + |
| 73 | +### External CVE request process |
| 74 | + |
| 75 | +When a request for a CVE is received via the [email protected] |
| 76 | +email alias the following process will be followed (likely updated |
| 77 | +after we get HackerOne up and running). |
| 78 | + |
| 79 | +* Respond to the requester indicating that we have the request |
| 80 | + and will review soon. |
| 81 | +* Open an issue in the security repo for the request. |
| 82 | +* Review the request. |
| 83 | + * If a CVE is appropriate then assign the |
| 84 | + CVE as outline in the section titled |
| 85 | + [CVE Management process for Node.js vulnerabilities](cve-management-process-for-nodejs-vulnerabilities) |
| 86 | + and return the CVE number to the requester (along with the request |
| 87 | + to keep it confidential until the vulnerability is announced) |
| 88 | + * If a CVE is not appropriate then respond to the requester |
| 89 | + with the details as to why. |
| 90 | + |
| 91 | +### Quarterly reporting |
| 92 | + |
| 93 | +* There is a requirement for quarterly reports to Mitre on CVE |
| 94 | + activity. Not sure of the specific requirements yet. Will |
| 95 | + add details on process once we've done the first one. |
| 96 | + |
| 97 | +## CVE Management process for Node.js vulnerabilities |
| 98 | + |
| 99 | +When the Node.js team is going announce a new vulnerability the |
| 100 | +following steps are used to assign, announce and report a CVE. |
| 101 | + |
| 102 | +* Select the next CVE in the block available from the CNA process as |
| 103 | + outlined in the section above. |
| 104 | +* Move the CVE from the unassigned block, to the Pending section along |
| 105 | + with a link to the issue in the security repo that is being used |
| 106 | + to discuss the vulnerability. |
| 107 | +* As part of the |
| 108 | + [security announcement process](https://github.com/nodejs/security-wg/blob/master/processes/security_annoucement_process.md), |
| 109 | + in the security issue being used to discuss the |
| 110 | + vulnerability, associate the CVE to that vulnerability. This is most |
| 111 | + commonly done by including it in the draft for the announcement that |
| 112 | + will go out once the associated security releases are available. |
| 113 | +* Once the security announcement goes out: |
| 114 | + * Use the [Mitre form](https://cveform.mitre.org/) to report the |
| 115 | + CVE details to Mitre using the `Notify CVE about a publication`. The |
| 116 | + link to the advisory will be the for the blog announcing that security |
| 117 | + releases are available. The description should be a subset of the |
| 118 | + details in that blog. |
| 119 | + |
| 120 | + Ensure that the contact address entered in the form is |
| 121 | + `[email protected]`. Anything else may require slow, manual |
| 122 | + verification of the identity of the CVE submitter. |
| 123 | + |
| 124 | + For each CVE listed, the additional data must include the following fields |
| 125 | + updated with appropriate data for the CVE |
| 126 | +```text |
| 127 | + [CVEID]: CVE-XXXX-XXXX |
| 128 | + [PRODUCT]: Node.js |
| 129 | + [VERSION]: 8.x+, 9.x+, 10.x+ |
| 130 | + [PROBLEMTYPE]: Denial of Service |
| 131 | + [REFERENCES]: Link to the blog for the final announce |
| 132 | + [DESCRIPTION]: Description from final announce |
| 133 | + [ASSIGNINGCNA]: Node.js Foundation |
| 134 | +``` |
| 135 | +* Move the CVE from the Pending section to the Announced section along |
| 136 | + with a link to the Node.js blog post announcing that releases |
| 137 | + are available. |
0 commit comments