Skip to content

Commit e6d25ca

Browse files
authored
Merge branch 'main' into core-index-updated
2 parents 73b208d + b89b725 commit e6d25ca

File tree

13 files changed

+193
-27
lines changed

13 files changed

+193
-27
lines changed

MAINTAINERS_THREAT_MODEL.md

Lines changed: 114 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -30,30 +30,32 @@ repositories in the org, like Working groups or subteams.
3030
> ¹ - All repositories with code that get published or has some impact on nodejs/core
3131
> ² - Releasers has access to run CI during CI Embargo (Security Release)
3232
33-
| Resource | External people | Contributors - Core/Triagers/WG | Build - Test/Infra/Admin | Admin - TSC/Releasers/Moderation | Security Stewards/Triagers/External | GitHub - Actions/Plugins |
34-
|- |- |- |- |- |- |- |
35-
| **HackerOne** | - | -\-\- | -\-\- | aw- | www | -\- |
36-
| **MITRE** | - | -\-\- | -\-\- | a-\- | w-\- | -\- |
37-
| **private/node-private** | - | -\-\- | www | aw- | w-w | -\- |
38-
| **private/security-release** | - | -\-\- | -\-\- | a-\- | ww- | -\- |
39-
| **private/secrets** | - | -\-\- | www | a-\- | -\-\- | -\- |
40-
| **nodejs/node** | r | wrr | rrw | awa | rrr | wr |
41-
| **nodejs/deps¹** | r | rrr | rrw | arr | rrr | wr |
42-
| **nodejs/build** (GH) | r | rrr | rrw | awa | rrr | wr |
43-
| **nodejs/node-core-utils** | r | rrr | rrw | awa | rrr | wr |
44-
| **npm account** | - | - | -a- | a-\- | -\-\- | -\- |
45-
| **Jenkins CI - test** | r | ww- | wwa | -w²- | -\-\- | ww |
46-
| **Jenkins CI - release** | - | -\-\- | -ww | -w- | -\-\- | -\- |
47-
| **Infra - test** | - | w-\- | aaa | ww- | -w- | ww |
48-
| **Infra - release** | - | -\-\- | -ww | -w- | -\-\- | -\- |
49-
| **Build infra** | - | -\-\- | -a- | -\-\-| -\-\- | -\- |
50-
| **Website Infra** | - | -\-\- | -a- | a-\- | -\-\- | -\- |
51-
| **Youtube** | - | -\-w | -\-\- | a-\- | -\-\- | -\- |
52-
| **Zoom** | r | rrw | -\-\- | a-\- | -\-\- | -\- |
53-
| **1Password** | - | -\-r | -\-\- | a-\- | -\-\- | -\- |
54-
| **Social media accounts** | - | -\-\- | -\-\- | -\-\-| -\-\- | -\- |
55-
| **Email** (nodejs-sec) | r | rrr | rrr | awr | wrr | rr |
56-
| **Email** (io.js aliases) | r | -\-\- | -a- | w-\- | -\-\- | -\- |
33+
| Resource | External people | Contributors - Core/Triagers/WG | Build - Test/Infra/Admin | Admin - TSC/Releasers/Moderation | Security Stewards/Triagers/External | GitHub - Actions/Plugins | Docker Team |
34+
|- |- |- |- |- |- |- |- |
35+
| **HackerOne** | - | -\-\- | -\-\- | aw- | www | -\- | - |
36+
| **MITRE** | - | -\-\- | -\-\- | a-\- | w-\- | -\- | - |
37+
| **private/node-private** | - | -\-\- | www | aw- | w-w | -\- | - |
38+
| **private/security-release** | - | -\-\- | -\-\- | a-\- | ww- | -\- | - |
39+
| **private/secrets** | - | -\-\- | www | a-\- | -\-\- | -\- | - |
40+
| **nodejs/node** | r | wrr | rrw | awa | rrr | wr | r |
41+
| **nodejs/deps¹** | r | rrr | rrw | arr | rrr | wr | r |
42+
| **nodejs/build** (GH) | r | rrr | rrw | awa | rrr | wr | r |
43+
| **nodejs/docker-node** (GH) | r | rrr | rrr | awa | rrr | wr | w |
44+
| **nodejs/node-core-utils** | r | rrr | rrw | awa | rrr | wr | r |
45+
| **nodejs/nodejs.org** | r | rrr | rrr | awa | rrr | wr | r |
46+
| **npm account** | - | - | -a- | a-\- | -\-\- | -\- | - |
47+
| **Jenkins CI - test** | r | ww- | wwa | -w²- | -\-\- | ww | - |
48+
| **Jenkins CI - release** | - | -\-\- | -ww | -w- | -\-\- | -\- | - |
49+
| **Infra - test** | - | w-\- | aaa | ww- | -w- | ww | - |
50+
| **Infra - release** | - | -\-\- | -ww | -w- | -\-\- | -\- | r |
51+
| **Build infra** | - | -\-\- | -a- | -\-\-| -\-\- | -\- | - |
52+
| **Website Infra** | - | -\-\- | -a- | a-\- | -\-\- | -\- | - |
53+
| **Youtube** | - | -\-w | -\-\- | a-\- | -\-\- | -\- | - |
54+
| **Zoom** | r | rrw | -\-\- | a-\- | -\-\- | -\- | - |
55+
| **1Password** | - | -\-r | -\-\- | a-\- | -\-\- | -\- | - |
56+
| **Social media accounts** | - | -\-\- | -\-\- | -\-\-| -\-\- | -\- | - |
57+
| **Email** (nodejs-sec) | r | rrr | rrr | awr | wrr | rr | - |
58+
| **Email** (io.js aliases) | r | -\-\- | -a- | w-\- | -\-\- | -\- | - |
5759

5860
Repos under nodejs which do not include code, are not covered as they cannot lead to the threats listed.
5961
pkgjs.org is excluded as it does not include code/repos that make it into Node.js binaries
@@ -86,6 +88,7 @@ or inderictly (builds process/testing)
8688
| **nodejs/deps¹** | Write | If you have write access to Node.js dependencies you can hide malicious code and publish a new version, eventually the automation will create a PR to sync to nodejs/core and this code might pass without supervision |
8789
| **nodejs/build** (GH) | - | N\A |
8890
| **nodejs/node-core-utils** | Write | User must have _Write_ access to nodejs/node to open a attack vector|
91+
| **nodejs/nodejs.org** | - | N\A |
8992
| **npm account** | Write | Because you can change the node-core-utils/branch-diff code to inject malicious code |
9093
| **Jenkins CI - test** | - | N\A |
9194
| **Jenkins CI - release** | - | N\A |
@@ -99,3 +102,90 @@ or inderictly (builds process/testing)
99102
| **Social media accounts** | - | N\A |
100103
| **Email** (nodejs-sec) | - | N\A |
101104
| **Email** (io.js aliases) | - | N\A |
105+
106+
### Malicious release binary generation in Node.js release/build processes
107+
108+
In this scenario we assume that a malicious actor will include a malicious code
109+
(malware, malicious dependencies, polluted binaries...) in the release binaries
110+
available through the Nodejs.org downloads.
111+
112+
**Vectors:**
113+
114+
* Use priviledge access to GitHub in order to add/modify/pollute the Git History
115+
for the tooling/build repositories (like ansible scripts, etc..)
116+
* Pollute directly machines that are part of the CI/release inventory used by
117+
Jenkins/GH Actions
118+
* Manipulate the CI/release pipelines in Jenkins or GH Actions (add/modify custom
119+
scripts, pollute plugins, overwrite configuration...)
120+
* Swapping out release binaries where they are hosted on nodejs.org web server
121+
* Modifying the cloudflare configuration to change were binaries are served from
122+
* Modifying the vercel website configation
123+
124+
**Related CWEs:**
125+
126+
* [CWE-94: Improper Control of Generation of Code ('Code Injection')](https://cwe.mitre.org/data/definitions/94.html)
127+
* [CWE-73: External Control of File Name or Path](https://cwe.mitre.org/data/definitions/73.html)
128+
* [CWE-829: Inclusion of Functionality from Untrusted Control Sphere](https://cwe.mitre.org/data/definitions/829.html)
129+
* [CWE-353: Missing Support for Integrity Check](https://cwe.mitre.org/data/definitions/353.html)
130+
* [CWE-506: Embedded Malicious Code](https://cwe.mitre.org/data/definitions/506.html)
131+
132+
| Resource | Minimum Access | Description |
133+
|- |- |- |
134+
| **HackerOne** | - | N\A |
135+
| **MITRE** | - | N\A |
136+
| **private/node-private** | - | N\A |
137+
| **private/security-release** | - | N\A |
138+
| **private/secrets** | r | read access to secrets grants access to key resources |
139+
| **nodejs/node** | w | N\A |
140+
| **nodejs/deps¹** | - | N\A |
141+
| **nodejs/build** (GH) | w | write access would allow key scripts, infra to be modified |
142+
| **nodejs/docker-node** | - | - |
143+
| **nodejs/node-core-utils** | w | N\A |
144+
| **nodejs/nodejs.org** | - | N\A |
145+
| **npm account** | - | N\A |
146+
| **Jenkins CI - test** | - | N\A |
147+
| **Jenkins CI - release** | w | access to jenkins used for build would allow swapping published binaries |
148+
| **Infra - test** | - | N/A |
149+
| **Infra - release** | w | access to machines used for build would allow swapping published binaries |
150+
| **Build infra** | w | access to machines used for build would allow swapping published binaries |
151+
| **Website Infra** | w | access to machines used for build would allow swapping published binaries |
152+
| **Youtube** | - | N\A |
153+
| **Zoom** | - | N\A |
154+
| **1Password** | r | read access to secrets grants access to key resources |
155+
| **Social media accounts** | - | N\A |
156+
| **Email** (nodejs-sec) | - | N\A |
157+
| **Email** (io.js aliases) | - | N\A |
158+
159+
Notes:
160+
161+
* Orka infra is shared, so any orka admin can modify test/relese machines
162+
163+
### Malicious docker images
164+
165+
| Resource | Minimum Access | Description |
166+
|-|-|-|
167+
| **HackerOne** | - | N\A |
168+
| **MITRE** | - | N\A |
169+
| **private/node-private** | - | N\A |
170+
| **private/security-release** | - | N\A |
171+
| **private/secrets** | r | read access to secrets grants access to key resources |
172+
| **nodejs/node** | - | N\A |
173+
| **nodejs/deps¹** | - | N\A |
174+
| **nodejs/build** (GH) | - | N\A |
175+
| **nodejs/unofficial-builds** (GH) | w | write access would allow key scripts, infra to be modified |
176+
| **nodejs/docker-node** | w | modification of Docker files can modify what node.js binaries are in the images
177+
| **nodejs/node-core-utils** | - | N\A |
178+
| **nodejs/nodejs.org** | - | N\A |
179+
| **npm account** | - | N\A |
180+
| **Jenkins CI - test** | - | N\A |
181+
| **Jenkins CI - release** | - | N\A |
182+
| **Infra - test** | - | N/A |
183+
| **Infra - release** | - | N\A |
184+
| **Build infra** | w | access to machine used for unofficial-builds as server |
185+
| **Website Infra** | - | N\A |
186+
| **Youtube** | - | N\A |
187+
| **Zoom** | - | N\A |
188+
| **1Password** | r | read access to secrets grants access to key resources |
189+
| **Social media accounts** | - | N\A |
190+
| **Email** (nodejs-sec) | - | N\A |
191+
| **Email** (io.js aliases) | - | N\A |

meetings/2025-01-30.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# Node.js Security team Meeting 2025-01-30
2+
3+
## Links
4+
5+
* **Recording**: https://www.youtube.com/watch?v=iEgHs7V6BvU
6+
* **GitHub Issue**: https://github.com/nodejs/security-wg/issues/1431
7+
* **Minutes Google Doc**: https://docs.google.com/document/d/10qmMTdpDWZDf04mNObBWQTKK_xlZa2zify7x6CiVsO4/edit?tab=t.0
8+
9+
## Present
10+
11+
* Rafael Gonzaga: @RafaelGSS
12+
* Michael Dawson: @mhdawson
13+
* Thomas GENTILHOMME: @fraxken
14+
* Robert W
15+
16+
## Agenda
17+
18+
## Announcements
19+
20+
*Extracted from **security-wg-agenda** labelled issues and pull requests from the **nodejs org** prior to the meeting.
21+
22+
- [X] Vulnerability Review - https://github.com/nodejs/nodejs-dependency-vuln-assessments/issues
23+
* Nothing new this week
24+
25+
- [X] OpenSSF Scorecard Monitor Review - https://github.com/nodejs/security-wg/issues?q=is%3Aissue+OpenSSF+Scorecard+Report+Updated%21+
26+
* No update this week
27+
28+
### nodejs/node
29+
30+
* src: add WDAC integration (Windows) [#54364](https://github.com/nodejs/node/pull/54364)
31+
* Remaining feedback has been addressed on the PR
32+
* Discussion on how to move forward.
33+
34+
### nodejs/security-wg
35+
36+
* Node.js maintainers: Threat Model [#1333](https://github.com/nodejs/security-wg/issues/1333)
37+
* Rafael will sync the progress from this meeting with Github once other PRs gets landed
38+
39+
* Audit build process for dependencies [#1037](https://github.com/nodejs/security-wg/issues/1037)
40+
* Michael, next step is looking at updaters for amaro and cjs-module-lexer
41+
42+
* Automate security release process [#860](https://github.com/nodejs/security-wg/issues/860)
43+
* Excellent progress since Dec 24. A blog post is being created to share with OpenJS Foundation (part of OpenSSF)
44+
45+
## Q&A, Other
46+
47+
## Upcoming Meetings
48+
49+
* **Node.js Project Calendar**: <https://nodejs.org/calendar>
50+
51+
Click `+GoogleCalendar` at the bottom right to add to your own Google calendar.
52+

vuln/core/139.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"vulnerable": "18.x || 20.x || 21.x",
66
"patched": "^18.20.1 || ^20.12.1 || ^21.7.2",
77
"ref": "https://nodejs.org/en/blog/vulnerability/april-2024-security-releases/",
8+
"description": "Assertion failed in node::http2::Http2Session::~Http2Session() leads to HTTP/2 server crash",
89
"overview": "An attacker can make the Node.js HTTP/2 server completely unavailable by sending a small amount of HTTP/2 frames packets with a few HTTP/2 frames inside. It is possible to leave some data in nghttp2 memory after reset when headers with HTTP/2 CONTINUATION frame are sent to the server and then a TCP connection is abruptly closed by the client triggering the Http2Session destructor while header frames are still being processed (and stored in memory) causing a race condition.",
910
"affectedEnvironments": [
1011
"all"

vuln/core/140.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"vulnerable": "18.x || 20.x || 21.x",
66
"patched": "^18.20.1 || ^20.12.1 || ^21.7.2",
77
"ref": "https://nodejs.org/en/blog/vulnerability/april-2024-security-releases/",
8+
"description": "HTTP Request Smuggling via Content Length Obfuscation",
89
"overview": "The team has identified a critical vulnerability in the http server of the most recent version of Node, where malformed headers can lead to HTTP request smuggling. Specifically, if a space is placed before a content-length header, it is not interpreted correctly, enabling attackers to smuggle in a second request within the body of the first.",
910
"affectedEnvironments": [
1011
"all"

vuln/core/142.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"vulnerable": "20.x || 22.x",
66
"patched": "^20.15.1 || ^22.4.1",
77
"ref": "https://nodejs.org/en/blog/vulnerability/july-2024-security-releases/",
8+
"description": "fs.fchown/fchmod bypasses permission model",
89
"overview": "A vulnerability has been identified in Node.js, affecting users of the experimental permission model when the --allow-fs-write flag is used.\n\nNode.js Permission Model do not operate on file descriptors, however, operations such as `fs.fchown` or `fs.fchmod` can use a \"read-only\" file descriptor to change the owner and permissions of a file.\n\nThis vulnerability affects all users using the experimental permission model in Node.js 20 and Node.js 21.\n\nPlease note that at the time this CVE was issued, the permission model is an experimental feature of Node.js.",
910
"affectedEnvironments": [
1011
"all"

vuln/core/143.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"vulnerable": "18.x || 20.x || 22.x",
66
"patched": "^18.20.4 || ^20.15.1 || ^22.4.1",
77
"ref": "https://nodejs.org/en/blog/vulnerability/july-2024-security-releases/",
8+
"description": "Bypass incomplete fix of CVE-2024-27980",
89
"overview": "The CVE-2024-27980 was identified as an incomplete fix for the BatBadBut vulnerability. This vulnerability arises from improper handling of batch files with all possible extensions on Windows via `child_process.spawn` / `child_process.spawnSync`. A malicious command line argument can inject arbitrary commands and achieve code execution even if the shell option is not enabled.\n\nThis vulnerability affects all users of `child_process.spawn` and `child_process.spawnSync` on Windows in all active release lines.",
910
"affectedEnvironments": [
1011
"win32"

vuln/core/144.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"vulnerable": "20.x || 22.x",
66
"patched": "^20.15.1 || ^22.4.1",
77
"ref": "https://nodejs.org/en/blog/vulnerability/july-2024-security-releases/",
8+
"description": "fs.lstat bypasses permission model",
89
"overview": "A vulnerability has been identified in Node.js, affecting users of the experimental permission model when the --allow-fs-read flag is used.\nThis flaw arises from an inadequate permission model that fails to restrict file stats through the `fs.lstat` API. As a result, malicious actors can retrieve stats from files that they do not have explicit read access to.\n\nThis vulnerability affects all users using the experimental permission model in Node.js 20 and Node.js 22.\n\nPlease note that at the time this CVE was issued, the permission model is an experimental feature of Node.js.",
910
"affectedEnvironments": [
1011
"all"

vuln/core/145.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"vulnerable": "18.x || 20.x || 22.x",
66
"patched": "^18.20.4 || ^20.15.1 || ^22.4.1",
77
"ref": "https://nodejs.org/en/blog/vulnerability/july-2024-security-releases/",
8+
"description": "Bypass network import restriction via data URL",
89
"overview": "A security flaw in Node.js allows a bypass of network import restrictions.\nBy embedding non-network imports in data URLs, an attacker can execute arbitrary code, compromising system security.\n\nVerified on various platforms, the vulnerability is mitigated by forbidding data URLs in network imports.\n\nExploiting this flaw can violate network import security, posing a risk to developers and servers.",
910
"affectedEnvironments": [
1011
"all"

vuln/core/146.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55
"vulnerable": "20.x || 22.x",
66
"patched": "^20.15.1 || ^22.4.1",
77
"ref": "https://nodejs.org/en/blog/vulnerability/july-2024-security-releases/",
8+
"description": "Permission model improperly processes UNC paths",
89
"overview": "The Permission Model assumes that any path starting with two backslashes \\\\ has a four-character prefix that can be ignored, which is not always true. This subtle bug leads to vulnerable edge cases.\n\nThis vulnerability affects Windows users of the Node.js Permission Model in version v20.x and v22.x",
910
"affectedEnvironments": [
1011
"all"
1112
],
12-
"severity": "unknown"
13+
"severity": "low"
1314
}

vuln/core/147.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
"vulnerable": "20.x || 22.x || 23.x",
66
"patched": "^20.18.2 || ^22.13.1 || ^23.6.1",
77
"ref": "https://nodejs.org/en/blog/vulnerability/january-2025-security-releases/",
8-
"overview": "With the aid of the diagnostics_channel utility, an event can be hooked into whenever a worker thread is created. This is not limited only to workers but also exposes internal workers, where an instance of them can be fetched, and its constructor can be grabbed and reinstated for malicious usage. \n\nThis vulnerability affects Permission Model users (--permission) on Node.js v20, v22, and v23",
8+
"description": "Worker permission bypass via InternalWorker leak in diagnostics",
9+
"overview": "With the aid of the diagnostics_channel utility, an event can be hooked into whenever a worker thread is created. This is not limited only to workers but also exposes internal workers, where an instance of them can be fetched, and its constructor can be grabbed and reinstated for malicious usage. \n\nThis vulnerability affects Permission Model users (--permission) on Node.js v20, v22, and v23.",
910
"affectedEnvironments": [
1011
"all"
1112
],

0 commit comments

Comments
 (0)