Skip to content

Commit bca3fa9

Browse files
authored
Merge pull request github#12159 from erik-krogh/express-ws
JS: add express-ws as a source
2 parents f680838 + 6192544 commit bca3fa9

File tree

5 files changed

+36
-2
lines changed

5 files changed

+36
-2
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
category: minorAnalysis
3+
---
4+
* Added dataflow sources for the [express-ws](https://www.npmjs.com/package/express-ws) library.

javascript/ql/lib/semmle/javascript/frameworks/WebSocket.qll

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,13 @@ module ServerWebSocket {
214214
class ServerSocket extends EventEmitter::Range, DataFlow::SourceNode {
215215
LibraryName library;
216216

217-
ServerSocket() { this = getAConnectionCall(library).getCallback(1).getParameter(0) }
217+
ServerSocket() {
218+
this = getAConnectionCall(library).getCallback(1).getParameter(0)
219+
or
220+
// support for the express-ws library: https://www.npmjs.com/package/express-ws
221+
library = ws() and
222+
this = Express::appCreation().getAMemberCall("ws").getABoundCallbackParameter(1, 0)
223+
}
218224

219225
/**
220226
* Gets the name of the library that created this server socket.

javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ nodes
8989
| express.js:34:17:34:35 | req.param("wobble") |
9090
| express.js:43:15:43:19 | taint |
9191
| express.js:43:15:43:19 | taint |
92+
| express.js:49:30:49:32 | msg |
93+
| express.js:49:30:49:32 | msg |
94+
| express.js:50:10:50:12 | msg |
95+
| express.js:50:10:50:12 | msg |
9296
| module.js:9:16:9:29 | req.query.code |
9397
| module.js:9:16:9:29 | req.query.code |
9498
| module.js:9:16:9:29 | req.query.code |
@@ -225,6 +229,10 @@ edges
225229
| express.js:34:9:34:35 | taint | express.js:43:15:43:19 | taint |
226230
| express.js:34:17:34:35 | req.param("wobble") | express.js:34:9:34:35 | taint |
227231
| express.js:34:17:34:35 | req.param("wobble") | express.js:34:9:34:35 | taint |
232+
| express.js:49:30:49:32 | msg | express.js:50:10:50:12 | msg |
233+
| express.js:49:30:49:32 | msg | express.js:50:10:50:12 | msg |
234+
| express.js:49:30:49:32 | msg | express.js:50:10:50:12 | msg |
235+
| express.js:49:30:49:32 | msg | express.js:50:10:50:12 | msg |
228236
| module.js:9:16:9:29 | req.query.code | module.js:9:16:9:29 | req.query.code |
229237
| module.js:11:17:11:30 | req.query.code | module.js:11:17:11:30 | req.query.code |
230238
| react-native.js:7:7:7:33 | tainted | react-native.js:8:32:8:38 | tainted |
@@ -321,6 +329,7 @@ edges
321329
| express.js:21:19:21:48 | req.par ... ntext") | express.js:21:19:21:48 | req.par ... ntext") | express.js:21:19:21:48 | req.par ... ntext") | This code execution depends on a $@. | express.js:21:19:21:48 | req.par ... ntext") | user-provided value |
322330
| express.js:27:34:27:38 | taint | express.js:26:17:26:35 | req.param("wobble") | express.js:27:34:27:38 | taint | This code execution depends on a $@. | express.js:26:17:26:35 | req.param("wobble") | user-provided value |
323331
| express.js:43:15:43:19 | taint | express.js:34:17:34:35 | req.param("wobble") | express.js:43:15:43:19 | taint | This code execution depends on a $@. | express.js:34:17:34:35 | req.param("wobble") | user-provided value |
332+
| express.js:50:10:50:12 | msg | express.js:49:30:49:32 | msg | express.js:50:10:50:12 | msg | This code execution depends on a $@. | express.js:49:30:49:32 | msg | user-provided value |
324333
| module.js:9:16:9:29 | req.query.code | module.js:9:16:9:29 | req.query.code | module.js:9:16:9:29 | req.query.code | This code execution depends on a $@. | module.js:9:16:9:29 | req.query.code | user-provided value |
325334
| module.js:11:17:11:30 | req.query.code | module.js:11:17:11:30 | req.query.code | module.js:11:17:11:30 | req.query.code | This code execution depends on a $@. | module.js:11:17:11:30 | req.query.code | user-provided value |
326335
| react-native.js:8:32:8:38 | tainted | react-native.js:7:17:7:33 | req.param("code") | react-native.js:8:32:8:38 | tainted | This code execution depends on a $@. | react-native.js:7:17:7:33 | req.param("code") | user-provided value |

javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@ nodes
9393
| express.js:34:17:34:35 | req.param("wobble") |
9494
| express.js:43:15:43:19 | taint |
9595
| express.js:43:15:43:19 | taint |
96+
| express.js:49:30:49:32 | msg |
97+
| express.js:49:30:49:32 | msg |
98+
| express.js:50:10:50:12 | msg |
99+
| express.js:50:10:50:12 | msg |
96100
| module.js:9:16:9:29 | req.query.code |
97101
| module.js:9:16:9:29 | req.query.code |
98102
| module.js:9:16:9:29 | req.query.code |
@@ -233,6 +237,10 @@ edges
233237
| express.js:34:9:34:35 | taint | express.js:43:15:43:19 | taint |
234238
| express.js:34:17:34:35 | req.param("wobble") | express.js:34:9:34:35 | taint |
235239
| express.js:34:17:34:35 | req.param("wobble") | express.js:34:9:34:35 | taint |
240+
| express.js:49:30:49:32 | msg | express.js:50:10:50:12 | msg |
241+
| express.js:49:30:49:32 | msg | express.js:50:10:50:12 | msg |
242+
| express.js:49:30:49:32 | msg | express.js:50:10:50:12 | msg |
243+
| express.js:49:30:49:32 | msg | express.js:50:10:50:12 | msg |
236244
| module.js:9:16:9:29 | req.query.code | module.js:9:16:9:29 | req.query.code |
237245
| module.js:11:17:11:30 | req.query.code | module.js:11:17:11:30 | req.query.code |
238246
| react-native.js:7:7:7:33 | tainted | react-native.js:8:32:8:38 | tainted |

javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/express.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,11 @@ app.get('/terminal', function(req, res) {
4242

4343
shell.write(taint); // NOT OK
4444
});
45-
45+
46+
require("express-ws")(app);
47+
48+
app.ws("/socket-thing/", function (ws, req) {
49+
ws.on("message", function (msg) {
50+
eval(msg); // NOT OK
51+
});
52+
});

0 commit comments

Comments
 (0)