Skip to content

Commit c793ac9

Browse files
authored
Merge pull request github#5921 from erik-krogh/expressChain
Approved by esbena
2 parents 23e8092 + 9a1f80a commit c793ac9

File tree

5 files changed

+25
-0
lines changed

5 files changed

+25
-0
lines changed

javascript/ql/src/semmle/javascript/frameworks/Express.qll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ module Express {
1919
or
2020
// `app = express.createServer()`
2121
result = DataFlow::moduleMember("express", "createServer").getAnInvocation()
22+
or
23+
// `app = express().disable(x)`, and other chaining methods
24+
result = appCreation().getAMemberCall(["engine", "set", "param", "enable", "disable", "on"])
2225
}
2326

2427
/**

javascript/ql/test/library-tests/frameworks/Express/tests.expected

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1422,6 +1422,7 @@ test_appCreation
14221422
| src/express.js:2:11:2:19 | express() |
14231423
| src/inheritedFromNode.js:2:11:2:19 | express() |
14241424
| src/params.js:2:11:2:19 | express() |
1425+
| src/params.js:4:1:12:2 | app.par ... }\\n}) |
14251426
| src/responseExprs.js:2:11:2:19 | express() |
14261427
| src/routesetups.js:7:11:7:32 | express ... erver() |
14271428
| src/subrouter.js:2:11:2:19 | express() |
@@ -1519,6 +1520,7 @@ test_RouteExpr
15191520
| src/express.js:46:1:51:2 | app.pos ... me];\\n}) | src/express.js:2:11:2:19 | express() |
15201521
| src/inheritedFromNode.js:4:1:8:2 | app.pos ... url;\\n}) | src/inheritedFromNode.js:2:11:2:19 | express() |
15211522
| src/params.js:4:1:12:2 | app.par ... }\\n}) | src/params.js:2:11:2:19 | express() |
1523+
| src/params.js:4:1:12:2 | app.par ... }\\n}) | src/params.js:4:1:12:2 | app.par ... }\\n}) |
15221524
| src/params.js:14:1:16:2 | app.get ... o");\\n}) | src/params.js:2:11:2:19 | express() |
15231525
| src/responseExprs.js:4:1:6:2 | app.get ... res1\\n}) | src/responseExprs.js:2:11:2:19 | express() |
15241526
| src/responseExprs.js:7:1:9:2 | app.get ... es2;\\n}) | src/responseExprs.js:2:11:2:19 | express() |
@@ -2174,6 +2176,7 @@ test_isRouterCreation
21742176
| src/express.js:2:11:2:19 | express() |
21752177
| src/inheritedFromNode.js:2:11:2:19 | express() |
21762178
| src/params.js:2:11:2:19 | express() |
2179+
| src/params.js:4:1:12:2 | app.par ... }\\n}) |
21772180
| src/responseExprs.js:2:11:2:19 | express() |
21782181
| src/route.js:2:14:2:29 | express.Router() |
21792182
| src/routesetups.js:3:1:3:16 | express.Router() |
@@ -2264,6 +2267,7 @@ test_RouterDefinition_RouterDefinition
22642267
| src/express.js:2:11:2:19 | express() |
22652268
| src/inheritedFromNode.js:2:11:2:19 | express() |
22662269
| src/params.js:2:11:2:19 | express() |
2270+
| src/params.js:4:1:12:2 | app.par ... }\\n}) |
22672271
| src/responseExprs.js:2:11:2:19 | express() |
22682272
| src/route.js:2:14:2:29 | express.Router() |
22692273
| src/routesetups.js:3:1:3:16 | express.Router() |

javascript/ql/test/query-tests/Security/CWE-079/ReflectedXss/ReflectedXss.expected

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,11 @@ nodes
182182
| tst2.js:36:12:36:12 | p |
183183
| tst2.js:37:12:37:18 | other.p |
184184
| tst2.js:37:12:37:18 | other.p |
185+
| tst3.js:5:7:5:24 | p |
186+
| tst3.js:5:9:5:9 | p |
187+
| tst3.js:5:9:5:9 | p |
188+
| tst3.js:6:12:6:12 | p |
189+
| tst3.js:6:12:6:12 | p |
185190
edges
186191
| ReflectedXss.js:8:33:8:45 | req.params.id | ReflectedXss.js:8:14:8:45 | "Unknow ... rams.id |
187192
| ReflectedXss.js:8:33:8:45 | req.params.id | ReflectedXss.js:8:14:8:45 | "Unknow ... rams.id |
@@ -333,6 +338,10 @@ edges
333338
| tst2.js:30:9:30:9 | p | tst2.js:30:7:30:24 | p |
334339
| tst2.js:33:11:33:11 | p | tst2.js:37:12:37:18 | other.p |
335340
| tst2.js:33:11:33:11 | p | tst2.js:37:12:37:18 | other.p |
341+
| tst3.js:5:7:5:24 | p | tst3.js:6:12:6:12 | p |
342+
| tst3.js:5:7:5:24 | p | tst3.js:6:12:6:12 | p |
343+
| tst3.js:5:9:5:9 | p | tst3.js:5:7:5:24 | p |
344+
| tst3.js:5:9:5:9 | p | tst3.js:5:7:5:24 | p |
336345
#select
337346
| ReflectedXss.js:8:14:8:45 | "Unknow ... rams.id | ReflectedXss.js:8:33:8:45 | req.params.id | ReflectedXss.js:8:14:8:45 | "Unknow ... rams.id | Cross-site scripting vulnerability due to $@. | ReflectedXss.js:8:33:8:45 | req.params.id | user-provided value |
338347
| ReflectedXss.js:17:12:17:39 | "Unknow ... rams.id | ReflectedXss.js:17:31:17:39 | params.id | ReflectedXss.js:17:12:17:39 | "Unknow ... rams.id | Cross-site scripting vulnerability due to $@. | ReflectedXss.js:17:31:17:39 | params.id | user-provided value |
@@ -376,3 +385,4 @@ edges
376385
| tst2.js:21:14:21:14 | p | tst2.js:14:9:14:9 | p | tst2.js:21:14:21:14 | p | Cross-site scripting vulnerability due to $@. | tst2.js:14:9:14:9 | p | user-provided value |
377386
| tst2.js:36:12:36:12 | p | tst2.js:30:9:30:9 | p | tst2.js:36:12:36:12 | p | Cross-site scripting vulnerability due to $@. | tst2.js:30:9:30:9 | p | user-provided value |
378387
| tst2.js:37:12:37:18 | other.p | tst2.js:30:9:30:9 | p | tst2.js:37:12:37:18 | other.p | Cross-site scripting vulnerability due to $@. | tst2.js:30:9:30:9 | p | user-provided value |
388+
| tst3.js:6:12:6:12 | p | tst3.js:5:9:5:9 | p | tst3.js:6:12:6:12 | p | Cross-site scripting vulnerability due to $@. | tst3.js:5:9:5:9 | p | user-provided value |

javascript/ql/test/query-tests/Security/CWE-079/ReflectedXss/ReflectedXssWithCustomSanitizer.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,4 @@
3939
| tst2.js:21:14:21:14 | p | Cross-site scripting vulnerability due to $@. | tst2.js:14:9:14:9 | p | user-provided value |
4040
| tst2.js:36:12:36:12 | p | Cross-site scripting vulnerability due to $@. | tst2.js:30:9:30:9 | p | user-provided value |
4141
| tst2.js:37:12:37:18 | other.p | Cross-site scripting vulnerability due to $@. | tst2.js:30:9:30:9 | p | user-provided value |
42+
| tst3.js:6:12:6:12 | p | Cross-site scripting vulnerability due to $@. | tst3.js:5:9:5:9 | p | user-provided value |
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
var express = require('express');
2+
3+
var app = express();
4+
app.enable('x-powered-by').disable('x-powered-by').get('/', function (req, res) {
5+
let { p } = req.params;
6+
res.send(p); // NOT OK
7+
});

0 commit comments

Comments
 (0)