Skip to content

Commit c6b4e29

Browse files
author
Esben Sparre Andreasen
committed
JS: add "host" as a sink for js/request-forgery
1 parent 60fe017 commit c6b4e29

File tree

3 files changed

+11
-2
lines changed

3 files changed

+11
-2
lines changed

javascript/ql/src/semmle/javascript/security/dataflow/RequestForgery.qll

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,16 +72,20 @@ module RequestForgery {
7272

7373
ClientRequest request;
7474

75+
string kind;
76+
7577
ClientRequestUrlAsSink() {
76-
this = request.getUrl()
78+
this = request.getUrl() and kind = "URL" or
79+
this = request.getHost() and kind = "host"
7780
}
7881

7982
override DataFlow::Node getARequest() {
8083
result = request
8184
}
8285

8386
override string getKind() {
84-
result = "URL"
87+
result = kind
8588
}
89+
8690
}
8791
}

javascript/ql/test/query-tests/Security/CWE-918/RequestForgery.expected

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,15 @@ nodes
1313
| tst.js:26:36:26:42 | tainted |
1414
| tst.js:28:13:28:43 | "http:/ ... tainted |
1515
| tst.js:28:37:28:43 | tainted |
16+
| tst.js:32:34:32:40 | tainted |
1617
edges
1718
| tst.js:12:9:12:52 | tainted | tst.js:16:13:16:19 | tainted |
1819
| tst.js:12:9:12:52 | tainted | tst.js:18:17:18:23 | tainted |
1920
| tst.js:12:9:12:52 | tainted | tst.js:21:19:21:25 | tainted |
2021
| tst.js:12:9:12:52 | tainted | tst.js:24:25:24:31 | tainted |
2122
| tst.js:12:9:12:52 | tainted | tst.js:26:36:26:42 | tainted |
2223
| tst.js:12:9:12:52 | tainted | tst.js:28:37:28:43 | tainted |
24+
| tst.js:12:9:12:52 | tainted | tst.js:32:34:32:40 | tainted |
2325
| tst.js:12:19:12:42 | url.par ... , true) | tst.js:12:19:12:48 | url.par ... ).query |
2426
| tst.js:12:19:12:48 | url.par ... ).query | tst.js:12:19:12:52 | url.par ... ery.url |
2527
| tst.js:12:19:12:52 | url.par ... ery.url | tst.js:12:9:12:52 | tainted |
@@ -34,3 +36,4 @@ edges
3436
| tst.js:24:5:24:32 | request ... ainted) | tst.js:12:29:12:35 | req.url | tst.js:24:13:24:31 | "http://" + tainted | The $@ of this request depends on $@. | tst.js:24:13:24:31 | "http://" + tainted | URL | tst.js:12:29:12:35 | req.url | a user-provided value |
3537
| tst.js:26:5:26:43 | request ... ainted) | tst.js:12:29:12:35 | req.url | tst.js:26:13:26:42 | "http:/ ... tainted | The $@ of this request depends on $@. | tst.js:26:13:26:42 | "http:/ ... tainted | URL | tst.js:12:29:12:35 | req.url | a user-provided value |
3638
| tst.js:28:5:28:44 | request ... ainted) | tst.js:12:29:12:35 | req.url | tst.js:28:13:28:43 | "http:/ ... tainted | The $@ of this request depends on $@. | tst.js:28:13:28:43 | "http:/ ... tainted | URL | tst.js:12:29:12:35 | req.url | a user-provided value |
39+
| tst.js:32:5:32:42 | http.ge ... inted}) | tst.js:12:29:12:35 | req.url | tst.js:32:34:32:40 | tainted | The $@ of this request depends on $@. | tst.js:32:34:32:40 | tainted | host | tst.js:12:29:12:35 | req.url | a user-provided value |

javascript/ql/test/query-tests/Security/CWE-918/tst.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,6 @@ var server = http.createServer(function(req, res) {
2828
request("http://example.com/" + tainted); // NOT OK
2929

3030
request("http://example.com/?" + tainted); // OK
31+
32+
http.get(relativeUrl, {host: tainted}); // NOT OK
3133
})

0 commit comments

Comments
 (0)