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