| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 5c9b2a7 commit 5b1df22
1 file changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -55,6 +55,132 @@ Here is the security disclosure policy for Node.js | |||
| 55 | 55 | the release process above to ensure that the disclosure is handled in a | |
| 56 | 56 | consistent manner. | |
| 57 | 57 | ||
| 58 | + ## The Node.js threat model | ||
| 59 | + | ||
| 60 | + In the Node.js threat model, there are trusted elements such as the | ||
| 61 | + underlying operating system. Vulnerabilities that require the compromise | ||
| 62 | + of these trusted elements are outside the scope of the Node.js threat | ||
| 63 | + model. | ||
| 64 | + | ||
| 65 | + For a vulnerability to be eligible for a bug bounty, it must be a | ||
| 66 | + vulnerability in the context of the Node.js threat model. In other | ||
| 67 | + words, it cannot assume that a trusted element (such as the operating | ||
| 68 | + system) has been compromised. | ||
| 69 | + | ||
| 70 | + Being able to cause the following through control of the elements that Node.js | ||
| 71 | + does not trust is considered a vulnerability: | ||
| 72 | + | ||
| 73 | + * Disclosure or loss of integrity or confidentiality of data protected through | ||
| 74 | + the correct use of Node.js APIs. | ||
| 75 | + * The unavailability of the runtime, including the unbounded degradation of its | ||
| 76 | + performance. | ||
| 77 | + | ||
| 78 | + If Node.js loads configuration files or runs code by default (without a | ||
| 79 | + specific request from the user), and this is not documented, it is considered a | ||
| 80 | + vulnerability. | ||
| 81 | + Vulnerabilities related to this case may be fixed by a documentation update. | ||
| 82 | + | ||
| 83 | + **Node.js does NOT trust**: | ||
| 84 | + | ||
| 85 | + 1. The data from network connections that are created through the use of Node.js | ||
| 86 | + APIs and which is transformed/validated by Node.js before being passed to the | ||
| 87 | + application. This includes: | ||
| 88 | + * HTTP APIs (all flavors) client and server APIs. | ||
| 89 | + * DNS APIs. | ||
| 90 | + 2. Consumers of data protected through the use of Node.js APIs (for example | ||
| 91 | + people who have access to data encrypted through the Node.js crypto APIs). | ||
| 92 | + 3. The file content or other I/O that is opened for reading or writing by the | ||
| 93 | + use of Node.js APIs (ex: stdin, stdout, stderr). | ||
| 94 | + | ||
| 95 | + In other words, if the data passing through Node.js to/from the application | ||
| 96 | + can trigger actions other than those documented for the APIs, there is likely | ||
| 97 | + a security vulnerability. Examples of unwanted actions are polluting globals, | ||
| 98 | + causing an unrecoverable crash, or any other unexpected side effects that can | ||
| 99 | + lead to a loss of confidentiality, integrity, or availability. | ||
| 100 | + | ||
| 101 | + **Node.js trusts everything else**. As some examples this includes: | ||
| 102 | + | ||
| 103 | + 1. The developers and infrastructure that runs it. | ||
| 104 | + 2. The operating system that Node.js is running under and its configuration, | ||
| 105 | + along with anything under control of the operating system. | ||
| 106 | + 3. The code it is asked to run including JavaScript and native code, even if | ||
| 107 | + said code is dynamically loaded, e.g. all dependencies installed from the | ||
| 108 | + npm registry. | ||
| 109 | + The code run inherits all the privileges of the execution user. | ||
| 110 | + 4. Inputs provided to it by the code it is asked to run, as it is the | ||
| 111 | + responsibility of the application to perform the required input validations. | ||
| 112 | + 5. Any connection used for inspector (debugger protocol) regardless of being | ||
| 113 | + opened by command line options or Node.js APIs, and regardless of the remote | ||
| 114 | + end being on the local machine or remote. | ||
| 115 | + 6. The file system when requiring a module. | ||
| 116 | + See <https://nodejs.org/api/modules.html#all-together>. | ||
| 117 | + | ||
| 118 | + Any unexpected behavior from the data manipulation from Node.js Internal | ||
| 119 | + functions are considered a vulnerability. | ||
| 120 | + | ||
| 121 | + In addition to addressing vulnerabilities based on the above, the project works | ||
| 122 | + to avoid APIs and internal implementations that make it "easy" for application | ||
| 123 | + code to use the APIs incorrectly in a way that results in vulnerabilities within | ||
| 124 | + the application code itself. While we don’t consider those vulnerabilities in | ||
| 125 | + Node.js itself and will not necessarily issue a CVE we do want them to be | ||
| 126 | + reported privately to Node.js first. | ||
| 127 | + We often choose to work to improve our APIs based on those reports and issue | ||
| 128 | + fixes either in regular or security releases depending on how much of a risk to | ||
| 129 | + the community they pose. | ||
| 130 | + | ||
| 131 | + ### Examples of vulneratibities | ||
| 132 | + | ||
| 133 | + #### Improper Certificate Validation (CWE-295) | ||
| 134 | + | ||
| 135 | + * Node.js provides APIs to validate handling of Subject Alternative Names (SANs) | ||
| 136 | + in certficates used to connect to a TLS/SSL endpoint. If certificates can be | ||
| 137 | + crafted which result in incorrect validation by the Node.js APIs that is | ||
| 138 | + considered a vulnerability. | ||
| 139 | + | ||
| 140 | + #### Inconsistent Interpretation of HTTP Requests (CWE-444) | ||
| 141 | + | ||
| 142 | + * Node.js provides APIs to accept http connections. Those APIs parse the | ||
| 143 | + headers received for a connection and pass them on to the application. | ||
| 144 | + Bugs in parsing those headers which can result in request smuggling are | ||
| 145 | + considered vulnerabilities. | ||
| 146 | + | ||
| 147 | + #### Missing Cryptographic Step (CWE-325) | ||
| 148 | + | ||
| 149 | + * Node.js provides APIs to encrypt data. Bugs that would allow an attacker | ||
| 150 | + to get the orginal data without requiring the encryption key are | ||
| 151 | + considered vulnerabilities. | ||
| 152 | + | ||
| 153 | + #### External Control of System or Configuration Setting (CWE-15) | ||
| 154 | + | ||
| 155 | + * If Node.js automatically loads a configuration file which is not documented | ||
| 156 | + and modification of that configuration can affect the confidentiality of | ||
| 157 | + data protected using the Node.js APIs this is considered a vulnerability. | ||
| 158 | + | ||
| 159 | + ### Examples of non-vulneratibities | ||
| 160 | + | ||
| 161 | + #### Malicious Third-Party Modules (CWE-1357) | ||
| 162 | + | ||
| 163 | + * Code is trusted by Node.js, therefore any scenario that requires a malicious | ||
| 164 | + third-party module cannot result in a vulnerability in Node.js. | ||
| 165 | + | ||
| 166 | + #### Prototype Pollution Attacks (CWE-1321) | ||
| 167 | + | ||
| 168 | + * Node.js trusts the inputs provided to it by application code. | ||
| 169 | + It is up to the application to sanitize appropriately, therefore any scenario | ||
| 170 | + that requires control over user input is not considered a vulnerability. | ||
| 171 | + | ||
| 172 | + #### Uncontrolled Search Path Element (CWE-427) | ||
| 173 | + | ||
| 174 | + * Node.js trusts the file system in the environment accessible to it. | ||
| 175 | + Therefore, it is not a vulnerability if it accesses/loads files from any path | ||
| 176 | + that is accessible to it. | ||
| 177 | + | ||
| 178 | + #### External Control of System or Configuration Setting (CWE-15) | ||
| 179 | + | ||
| 180 | + * If Node.js automatically loads a configuration file which is documented | ||
| 181 | + no scenario that requires modification of that configuration file is | ||
| 182 | + considered a vulnerability. | ||
| 183 | + | ||
| 58 | 184 | ## Receiving security updates | |
| 59 | 185 | ||
| 60 | 186 | Security notifications will be distributed via the following methods. | |
| Back | FazBrowse Home | New Git URL |
0 commit comments