Skip to content

Commit 66d3fda

Browse files
committed
JS: Add tests in request forgery queries
1 parent 3ae319c commit 66d3fda

File tree

6 files changed

+32
-0
lines changed

6 files changed

+32
-0
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
| clientSide.js:14:5:14:64 | request ... search) | clientSide.js:14:42:14:63 | window. ... .search | clientSide.js:14:13:14:63 | 'https: ... .search | The $@ of this request depends on a $@. | clientSide.js:14:13:14:63 | 'https: ... .search | URL | clientSide.js:14:42:14:63 | window. ... .search | user-provided value |
44
| clientSide.js:17:5:17:58 | request ... '/id') | clientSide.js:16:22:16:41 | window.location.hash | clientSide.js:17:13:17:57 | 'https: ... + '/id' | The $@ of this request depends on a $@. | clientSide.js:17:13:17:57 | 'https: ... + '/id' | URL | clientSide.js:16:22:16:41 | window.location.hash | user-provided value |
55
| clientSide.js:21:5:21:54 | request ... '/id') | clientSide.js:20:18:20:28 | window.name | clientSide.js:21:13:21:53 | 'https: ... + '/id' | The $@ of this request depends on a $@. | clientSide.js:21:13:21:53 | 'https: ... + '/id' | URL | clientSide.js:20:18:20:28 | window.name | user-provided value |
6+
| clientSide.js:27:5:27:19 | request(custom) | clientSide.js:26:20:26:56 | require ... ource() | clientSide.js:27:13:27:18 | custom | The $@ of this request depends on a $@. | clientSide.js:27:13:27:18 | custom | URL | clientSide.js:26:20:26:56 | require ... ource() | user-provided value |
67
edges
78
| clientSide.js:11:11:11:15 | query | clientSide.js:12:42:12:46 | query | provenance | |
89
| clientSide.js:11:19:11:40 | window. ... .search | clientSide.js:11:19:11:53 | window. ... ring(1) | provenance | |
@@ -16,6 +17,8 @@ edges
1617
| clientSide.js:20:11:20:14 | name | clientSide.js:21:42:21:45 | name | provenance | |
1718
| clientSide.js:20:18:20:28 | window.name | clientSide.js:20:11:20:14 | name | provenance | |
1819
| clientSide.js:21:42:21:45 | name | clientSide.js:21:13:21:53 | 'https: ... + '/id' | provenance | |
20+
| clientSide.js:26:11:26:16 | custom | clientSide.js:27:13:27:18 | custom | provenance | |
21+
| clientSide.js:26:20:26:56 | require ... ource() | clientSide.js:26:11:26:16 | custom | provenance | |
1922
nodes
2023
| clientSide.js:11:11:11:15 | query | semmle.label | query |
2124
| clientSide.js:11:19:11:40 | window. ... .search | semmle.label | window. ... .search |
@@ -33,4 +36,7 @@ nodes
3336
| clientSide.js:20:18:20:28 | window.name | semmle.label | window.name |
3437
| clientSide.js:21:13:21:53 | 'https: ... + '/id' | semmle.label | 'https: ... + '/id' |
3538
| clientSide.js:21:42:21:45 | name | semmle.label | name |
39+
| clientSide.js:26:11:26:16 | custom | semmle.label | custom |
40+
| clientSide.js:26:20:26:56 | require ... ource() | semmle.label | require ... ource() |
41+
| clientSide.js:27:13:27:18 | custom | semmle.label | custom |
3642
subpaths
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
extensions:
2+
- addsTo:
3+
pack: codeql/javascript-all
4+
extensible: sourceModel
5+
data:
6+
- ['testlib', 'Member[getBrowserSource].ReturnValue', 'browser-url-query']
7+
- ['testlib', 'Member[getServerSource].ReturnValue', 'remote']

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
| serverSide.js:143:3:143:24 | axios.g ... t.href) | serverSide.js:139:17:139:29 | req.query.url | serverSide.js:143:13:143:23 | target.href | The $@ of this request depends on a $@. | serverSide.js:143:13:143:23 | target.href | URL | serverSide.js:139:17:139:29 | req.query.url | user-provided value |
4040
| serverSide.js:145:3:145:23 | axios.g ... dedUrl) | serverSide.js:139:17:139:29 | req.query.url | serverSide.js:145:13:145:22 | encodedUrl | The $@ of this request depends on a $@. | serverSide.js:145:13:145:22 | encodedUrl | URL | serverSide.js:139:17:139:29 | req.query.url | user-provided value |
4141
| serverSide.js:147:3:147:23 | axios.g ... pedUrl) | serverSide.js:139:17:139:29 | req.query.url | serverSide.js:147:13:147:22 | escapedUrl | The $@ of this request depends on a $@. | serverSide.js:147:13:147:22 | escapedUrl | URL | serverSide.js:139:17:139:29 | req.query.url | user-provided value |
42+
| serverSide.js:151:1:151:15 | request(custom) | serverSide.js:150:16:150:51 | require ... ource() | serverSide.js:151:9:151:14 | custom | The $@ of this request depends on a $@. | serverSide.js:151:9:151:14 | custom | URL | serverSide.js:150:16:150:51 | require ... ource() | user-provided value |
4243
edges
4344
| Request/app/api/proxy/route2.serverSide.ts:4:9:4:15 | { url } | Request/app/api/proxy/route2.serverSide.ts:4:11:4:13 | url | provenance | |
4445
| Request/app/api/proxy/route2.serverSide.ts:4:11:4:13 | url | Request/app/api/proxy/route2.serverSide.ts:5:27:5:29 | url | provenance | |
@@ -144,6 +145,8 @@ edges
144145
| serverSide.js:146:9:146:18 | escapedUrl | serverSide.js:147:13:147:22 | escapedUrl | provenance | |
145146
| serverSide.js:146:22:146:34 | escape(input) | serverSide.js:146:9:146:18 | escapedUrl | provenance | |
146147
| serverSide.js:146:29:146:33 | input | serverSide.js:146:22:146:34 | escape(input) | provenance | |
148+
| serverSide.js:150:7:150:12 | custom | serverSide.js:151:9:151:14 | custom | provenance | |
149+
| serverSide.js:150:16:150:51 | require ... ource() | serverSide.js:150:7:150:12 | custom | provenance | |
147150
nodes
148151
| Request/app/api/proxy/route2.serverSide.ts:4:9:4:15 | { url } | semmle.label | { url } |
149152
| Request/app/api/proxy/route2.serverSide.ts:4:11:4:13 | url | semmle.label | url |
@@ -271,4 +274,7 @@ nodes
271274
| serverSide.js:146:22:146:34 | escape(input) | semmle.label | escape(input) |
272275
| serverSide.js:146:29:146:33 | input | semmle.label | input |
273276
| serverSide.js:147:13:147:22 | escapedUrl | semmle.label | escapedUrl |
277+
| serverSide.js:150:7:150:12 | custom | semmle.label | custom |
278+
| serverSide.js:150:16:150:51 | require ... ource() | semmle.label | require ... ource() |
279+
| serverSide.js:151:9:151:14 | custom | semmle.label | custom |
274280
subpaths
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
extensions:
2+
- addsTo:
3+
pack: codeql/javascript-all
4+
extensible: sourceModel
5+
data:
6+
- ['testlib', 'Member[getBrowserSource].ReturnValue', 'browser-url-query']
7+
- ['testlib', 'Member[getServerSource].ReturnValue', 'remote']

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,7 @@ export function MyComponent() {
2222
request('https://example.com/api?q=' + name);
2323

2424
request(window.location.href + '?q=123');
25+
26+
const custom = require('testlib').getBrowserSource(); // $ Source[js/client-side-request-forgery]
27+
request(custom) // $ Alert[js/client-side-request-forgery];
2528
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,3 +146,6 @@ var server2 = http.createServer(function(req, res) {
146146
const escapedUrl = escape(input);
147147
axios.get(escapedUrl); // $Alert[js/request-forgery]
148148
});
149+
150+
const custom = require('testlib').getServerSource(); // $ Source[js/request-forgery]
151+
request(custom) // $ Alert[js/request-forgery];

0 commit comments

Comments
 (0)