You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This is one of the initiatives we agree on for 2023. We all know how hard and time-consuming is to perform a security release. However, some of the 42 steps can be easily handled by automation. This initiative aims to improve this process using the well-known CLI (git node).
@RafaelGSS There's already a git node release --security, which is intended for use by releasers when preparing security releases (it automatically adds "This is a security release." to the changelog entry). I would keep this existing command for releasers and have a separate command for the release steward's steps automation.
@RafaelGSS There's already a git node release --security, which is intended for use by releasers when preparing security releases (it automatically adds "This is a security release." to the changelog entry).
In the context of that tool and this initiative, it may be worth exploring extending it to encourage a standard structure/template for the security release 'Notable changes' entries too. Example:
### Notable Changes
* **CVE-2021-3672/CVE-2021-22931**: Improper handling of untypical characters in domain names (High)
* Node.js was vulnerable to Remote Code Execution, XSS, application crashes due to missing input validation of hostnames returned by Domain Name Servers in the Node.js DNS library which can lead to the output of wrong hostnames (leading to Domain Hijacking) and injection vulnerabilities in applications using the library. You can read more about it at <https://nvd.nist.gov/vuln/detail/CVE-2021-22931>.
...
At times we have just referenced the post-release blog post, but it's probably useful to always include details of the CVEs in the changelogs.
I am guessing it will not be easy to automate the population of all of the CVE details (as I don't think they are available in a structured format at the point of preparing the release*). But, I still think it'd be useful to have a default template/structure placeholder agreed so our security release changelogs can start to detail the vulnerabilities in a consistent format.
Structure to be discussed/agreed, but even something like:
### Notable Changes
The following CVEs are fixed in this release:
* **<CVE-ID>**: <CVE-TITLE> (<CVE-SEVERITY>)
* <CVE-DESCRIPTION>
...
*At a minimum, we should be able to determine and populate the unique CVE IDs from the CVE-ID: metadata on the commits in the proposal.
The most error prone step is generating CVEs with all the correct metadata associated. I think we should change how we do it, avoid filling the details twice.
Ideally, we should have a process that allows those to be reviewed in a PR, and not with a one-man step.
I couldn't find it. Can we ask them to add one for us? The need to automate this step might get us back to issuing our CVEs instead of relying on H1 to do it for us.
This issue is stale because it has been open many days with no activity. It will be closed soon unless the stale label is removed or a comment is made.
Since the OSSF Funding was approved for this work, I'll summarize the work in progress, and the remaining steps to this action, so whoever takes this task will be able to help me in this journey.
First of all, there are 3 fronts in this work:
Security Release Stewards automation
(Security) Release proposal automation
Automating release promotion
All those can be delivered in parallel, however, I recommend working on the last step (3. Automating release promotion) in the end.
Security Release Stewards automation
This is a work in progress and the first pull request created was:
Generally speaking, there are 4 major steps for a security release steward:
Create the GitHub issue and list all the HackerOne reports being addressed by that release
Prepare the announcement (one week prior to the release)
Request CVEs for all reports
Create a security release announcement in nodejs.org. This post should contain which active release lines are affected and the severity scores.
Announce it on twitter (ping #nodejs-social on OpenJS Foundation slack)
Announce it via nodejs-sec email
Notify affected teams through github issues: nodejs/build and nodejs/docker-node
Integration
Ask to releasers to start integrating their proposals (overlaps with front 2: (Security) Release proposal automation)
Lock CI
Pos Release
Unlock CI
Create a pos release announcement
1. Publish an update to the security release blog post including the CVEs and details
2. Close issues created (nodejs/build, nodejs/docker-node)
3. Announce it on twitter
4. Announce it via nodejs-sec email
5. Close HackerOne reports as solved
That said, this work is about promoting and signing releases remotely in a Node.js specific machine, so reducing the work by the releasers + endorsing security practices since all the next releases will be signed by a unique trust machine. This work will need to align with @nodejs/releasers and @nodejs/build team.
Reacted by Paula, Alex Yang, Jithil P Ponnan and Marco Ippolito
This issue is stale because it has been open many days with no activity. It will be closed soon unless the stale label is removed or a comment is made.
Activity
richardlau commentedon Jan 6, 2023
@RafaelGSS There's already a
git node release --security, which is intended for use by releasers when preparing security releases (it automatically adds "This is a security release." to the changelog entry). I would keep this existing command for releasers and have a separate command for the release steward's steps automation.BethGriggs commentedon Jan 7, 2023
In the context of that tool and this initiative, it may be worth exploring extending it to encourage a standard structure/template for the security release 'Notable changes' entries too. Example:
At times we have just referenced the post-release blog post, but it's probably useful to always include details of the CVEs in the changelogs.
I am guessing it will not be easy to automate the population of all of the CVE details (as I don't think they are available in a structured format at the point of preparing the release*). But, I still think it'd be useful to have a default template/structure placeholder agreed so our security release changelogs can start to detail the vulnerabilities in a consistent format.
Structure to be discussed/agreed, but even something like:
*At a minimum, we should be able to determine and populate the unique CVE IDs from the
CVE-ID:metadata on the commits in the proposal.mcollina commentedon Jan 8, 2023
The most error prone step is generating CVEs with all the correct metadata associated. I think we should change how we do it, avoid filling the details twice.
Ideally, we should have a process that allows those to be reviewed in a PR, and not with a one-man step.
mhdawson commentedon Jan 9, 2023
@mcollina I wonder if there as an API for H1. If so maybe that could be used to automated based on a PR.
mcollina commentedon Jan 10, 2023
I couldn't find it. Can we ask them to add one for us? The need to automate this step might get us back to issuing our CVEs instead of relying on H1 to do it for us.
github-actions commentedon Apr 11, 2023
This issue is stale because it has been open many days with no activity. It will be closed soon unless the stale label is removed or a comment is made.
RafaelGSS commentedon May 20, 2023
Update: nodejs/node-core-utils#665
RafaelGSS commentedon Jun 22, 2023
The last security release was created using the nodejs/node-core-utils#665 automation. It's missing two features:
RafaelGSS commentedon Jul 14, 2023
Since the OSSF Funding was approved for this work, I'll summarize the work in progress, and the remaining steps to this action, so whoever takes this task will be able to help me in this journey.
First of all, there are 3 fronts in this work:
All those can be delivered in parallel, however, I recommend working on the last step (3. Automating release promotion) in the end.
Security Release Stewards automation
This is a work in progress and the first pull request created was:
Generally speaking, there are 4 major steps for a security release steward:
nodejs.org. This post should contain which active release lines are affected and the severity scores.1. Publish an update to the security release blog post including the CVEs and details
2. Close issues created (nodejs/build, nodejs/docker-node)
3. Announce it on twitter
4. Announce it via nodejs-sec email
5. Close HackerOne reports as solved
Furthermore in https://github.com/nodejs/node/blob/main/doc/contributing/security-release-process.md.
The pull request mentioned addresses only the first step. We still need to work on the next ones.
Security Release proposal automation
This is a work in progress and the first pull request created was:
node-core-utilsalready provides an API to create proposals, but it's not 100% tested and it wasn't working well with security releases. See also:The pull request merged has some limitations that need to be worked on:
More information can be found in the PR itself
Automating release promotion
Currently, we follow the step 10 until step 15 and all the releases are signed by the releaser local machine.
We're investigating other approaches like SigStore and SLSA, so might be worth it looking to the following issues:
That said, this work is about promoting and signing releases remotely in a Node.js specific machine, so reducing the work by the releasers + endorsing security practices since all the next releases will be signed by a unique trust machine. This work will need to align with @nodejs/releasers and @nodejs/build team.
github-actions commentedon Oct 13, 2023
This issue is stale because it has been open many days with no activity. It will be closed soon unless the stale label is removed or a comment is made.
26 remaining items
build: add create release proposal action
github-actions commentedon Dec 6, 2024
This issue has been inactive for 90 days. It will be closed in 14 days unless there is further activity or the stale label is taken off.
github-actions commentedon Mar 7, 2025
This issue has been inactive for 90 days. It will be closed in 14 days unless there is further activity or the stale label is taken off.
RafaelGSS commentedon May 8, 2025
Closing as completed.