Skip to content

Commit 10498bb

Browse files
committed
Added support for axios.interceptors.request.
1 parent ea181e4 commit 10498bb

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

javascript/ql/lib/ext/axios.model.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
extensions:
2+
- addsTo:
3+
pack: codeql/javascript-all
4+
extensible: sinkModel
5+
data:
6+
- ["axios", "Member[interceptors].Member[request].Member[use].Argument[0].Parameter[0].Member[url]", "request-forgery"]

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#select
22
| apollo.serverSide.ts:8:39:8:64 | get(fil ... => {}) | apollo.serverSide.ts:7:36:7:44 | { files } | apollo.serverSide.ts:8:43:8:50 | file.url | The $@ of this request depends on a $@. | apollo.serverSide.ts:8:43:8:50 | file.url | URL | apollo.serverSide.ts:7:36:7:44 | { files } | user-provided value |
3+
| axiosInterceptors.serverSide.js:11:26:11:40 | userProvidedUrl | axiosInterceptors.serverSide.js:19:21:19:28 | req.body | axiosInterceptors.serverSide.js:11:26:11:40 | userProvidedUrl | The $@ of this request depends on a $@. | axiosInterceptors.serverSide.js:11:26:11:40 | userProvidedUrl | endpoint | axiosInterceptors.serverSide.js:19:21:19:28 | req.body | user-provided value |
34
| serverSide.js:18:5:18:20 | request(tainted) | serverSide.js:14:29:14:35 | req.url | serverSide.js:18:13:18:19 | tainted | The $@ of this request depends on a $@. | serverSide.js:18:13:18:19 | tainted | URL | serverSide.js:14:29:14:35 | req.url | user-provided value |
45
| serverSide.js:20:5:20:24 | request.get(tainted) | serverSide.js:14:29:14:35 | req.url | serverSide.js:20:17:20:23 | tainted | The $@ of this request depends on a $@. | serverSide.js:20:17:20:23 | tainted | URL | serverSide.js:14:29:14:35 | req.url | user-provided value |
56
| serverSide.js:24:5:24:20 | request(options) | serverSide.js:14:29:14:35 | req.url | serverSide.js:23:19:23:25 | tainted | The $@ of this request depends on a $@. | serverSide.js:23:19:23:25 | tainted | URL | serverSide.js:14:29:14:35 | req.url | user-provided value |
@@ -30,6 +31,11 @@ edges
3031
| apollo.serverSide.ts:8:13:8:17 | files | apollo.serverSide.ts:8:28:8:31 | file | provenance | |
3132
| apollo.serverSide.ts:8:28:8:31 | file | apollo.serverSide.ts:8:43:8:46 | file | provenance | |
3233
| apollo.serverSide.ts:8:43:8:46 | file | apollo.serverSide.ts:8:43:8:50 | file.url | provenance | |
34+
| axiosInterceptors.serverSide.js:19:11:19:17 | { url } | axiosInterceptors.serverSide.js:19:11:19:28 | url | provenance | |
35+
| axiosInterceptors.serverSide.js:19:11:19:28 | url | axiosInterceptors.serverSide.js:20:23:20:25 | url | provenance | |
36+
| axiosInterceptors.serverSide.js:19:21:19:28 | req.body | axiosInterceptors.serverSide.js:19:11:19:17 | { url } | provenance | |
37+
| axiosInterceptors.serverSide.js:20:5:20:25 | userProvidedUrl | axiosInterceptors.serverSide.js:11:26:11:40 | userProvidedUrl | provenance | |
38+
| axiosInterceptors.serverSide.js:20:23:20:25 | url | axiosInterceptors.serverSide.js:20:5:20:25 | userProvidedUrl | provenance | |
3339
| serverSide.js:14:9:14:52 | tainted | serverSide.js:18:13:18:19 | tainted | provenance | |
3440
| serverSide.js:14:9:14:52 | tainted | serverSide.js:20:17:20:23 | tainted | provenance | |
3541
| serverSide.js:14:9:14:52 | tainted | serverSide.js:23:19:23:25 | tainted | provenance | |
@@ -85,6 +91,12 @@ nodes
8591
| apollo.serverSide.ts:8:28:8:31 | file | semmle.label | file |
8692
| apollo.serverSide.ts:8:43:8:46 | file | semmle.label | file |
8793
| apollo.serverSide.ts:8:43:8:50 | file.url | semmle.label | file.url |
94+
| axiosInterceptors.serverSide.js:11:26:11:40 | userProvidedUrl | semmle.label | userProvidedUrl |
95+
| axiosInterceptors.serverSide.js:19:11:19:17 | { url } | semmle.label | { url } |
96+
| axiosInterceptors.serverSide.js:19:11:19:28 | url | semmle.label | url |
97+
| axiosInterceptors.serverSide.js:19:21:19:28 | req.body | semmle.label | req.body |
98+
| axiosInterceptors.serverSide.js:20:5:20:25 | userProvidedUrl | semmle.label | userProvidedUrl |
99+
| axiosInterceptors.serverSide.js:20:23:20:25 | url | semmle.label | url |
88100
| serverSide.js:14:9:14:52 | tainted | semmle.label | tainted |
89101
| serverSide.js:14:19:14:42 | url.par ... , true) | semmle.label | url.par ... , true) |
90102
| serverSide.js:14:29:14:35 | req.url | semmle.label | req.url |

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ let userProvidedUrl = "";
88
axios.interceptors.request.use(
99
function (config) {
1010
if (userProvidedUrl) {
11-
config.url = userProvidedUrl; // $ MISSING: Alert[js/request-forgery]
11+
config.url = userProvidedUrl; // $ Alert[js/request-forgery]
1212
}
1313
return config;
1414
},
1515
error => error
1616
);
1717

1818
app.post("/fetch", (req, res) => {
19-
const { url } = req.body; // $ MISSING: Source[js/request-forgery]
19+
const { url } = req.body; // $ Source[js/request-forgery]
2020
userProvidedUrl = url;
2121
axios.get("placeholder");
2222
});

0 commit comments

Comments
 (0)