Build software better, together (original) (raw)

Security

Reporting a bug in Node.js

Report security bugs in Node.js via HackerOne.

Normally, your report will be acknowledged within 5 days, and you'll receive a more detailed response to your report within 10 days indicating the next steps in handling your submission. These timelines may extend when our triage volunteers are away on holiday, particularly at the end of the year.

After the initial reply to your report, the security team will endeavor to keep you informed of the progress being made towards a fix and full announcement, and may ask for additional information or guidance surrounding the reported issue.

Node.js bug bounty program

The Node.js project engages in an official bug bounty program for security researchers and responsible public disclosures. The program is managed through the HackerOne platform. See https://hackerone.com/nodejs for further details.

Reporting a bug in a third-party module

Security bugs in third-party modules should be reported to their respective maintainers.

Disclosure policy

Here is the security disclosure policy for Node.js

Code of Conduct and Vulnerability Reporting Guidelines

When reporting security vulnerabilities, reporters must adhere to the following guidelines:

  1. Code of Conduct Compliance: All security reports must comply with ourCode of Conduct. Reports that violate our code of conduct will not be considered and may result in being banned from future participation.
  2. No Harmful Actions: Security research and vulnerability reporting must not:
    • Cause damage to running systems or production environments.
    • Disrupt Node.js development or infrastructure.
    • Affect other users' applications or systems.
    • Include actual exploits that could harm users.
    • Involve social engineering or phishing attempts.
  3. Responsible Testing: When testing potential vulnerabilities:
    • Use isolated, controlled environments.
    • Do not test on production systems without prior authorization. Contact the Node.js Technical Steering Committee (tsc@iojs.org) for permission or open a HackerOne report.
    • Do not attempt to access or modify other users' data.
    • Immediately stop testing if unauthorized access is gained accidentally.
  4. Report Quality
    • Provide clear, detailed steps to reproduce the vulnerability.
    • Include only the minimum proof of concept required to demonstrate the issue.
    • Remove any malicious payloads or components that could cause harm.

Failure to follow these guidelines may result in:

The Node.js threat model

In the Node.js threat model, there are trusted elements such as the underlying operating system. Vulnerabilities that require the compromise of these trusted elements are outside the scope of the Node.js threat model.

For a vulnerability to be eligible for a bug bounty, it must be a vulnerability in the context of the Node.js threat model. In other words, it cannot assume that a trusted element (such as the operating system) has been compromised.

Being able to cause the following through control of the elements that Node.js does not trust is considered a vulnerability:

If Node.js loads configuration files or runs code by default (without a specific request from the user), and this is not documented, it is considered a vulnerability. Vulnerabilities related to this case may be fixed by a documentation update.

Node.js does NOT trust:

In other words, if the data passing through Node.js to/from the application can trigger actions other than those documented for the APIs, there is likely a security vulnerability. Examples of unwanted actions are polluting globals, causing an unrecoverable crash, or any other unexpected side effects that can lead to a loss of confidentiality, integrity, or availability.

For example, if trusted input (like secure application code) is correct, then untrusted input must not lead to arbitrary JavaScript code execution.

Node.js trusts everything else. Examples include:

Any unexpected behavior from the data manipulation from Node.js Internal functions may be considered a vulnerability if they are exploitable via untrusted resources.

In addition to addressing vulnerabilities based on the above, the project works to avoid APIs and internal implementations that make it "easy" for application code to use the APIs incorrectly in a way that results in vulnerabilities within the application code itself. While we don’t consider those vulnerabilities in Node.js itself and will not necessarily issue a CVE, we do want them to be reported privately to Node.js first. We often choose to work to improve our APIs based on those reports and issue fixes either in regular or security releases depending on how much of a risk to the community they pose.

Examples of vulnerabilities

Improper Certificate Validation (CWE-295)

Inconsistent Interpretation of HTTP Requests (CWE-444)

Missing Cryptographic Step (CWE-325)

External Control of System or Configuration Setting (CWE-15)

Examples of non-vulnerabilities

Malicious Third-Party Modules (CWE-1357)

Prototype Pollution Attacks (CWE-1321)

Uncontrolled Search Path Element (CWE-427)

External Control of System or Configuration Setting (CWE-15)

Uncontrolled Resource Consumption (CWE-400) on outbound connections

Vulnerabilities affecting software downloaded by Corepack

Assessing experimental features reports

Experimental features are eligible to reports as any other stable feature of Node.js. They will also be susceptible to receiving the same severity score as any other stable feature.

Receiving security updates

Security notifications will be distributed via the following methods.

Comments on this policy

If you have suggestions on how this process could be improved, please visit the nodejs/security-wgrepository.