Skip to content

Commit b6dc94f

Browse files
committed
add fetch.Headers.Authorization as a CredentialsExpr
1 parent 14f0d16 commit b6dc94f

3 files changed

Lines changed: 40 additions & 0 deletions

File tree

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1147,5 +1147,21 @@ module NodeJSLib {
11471147
or
11481148
result = DataFlow::globalVarRef("fetch")
11491149
}
1150+
1151+
/** An expression that is passed as `http.request({ auth: <expr> }, ...)`. */
1152+
class FetchAuthorization extends CredentialsExpr {
1153+
FetchAuthorization() {
1154+
this =
1155+
moduleImport()
1156+
.getAConstructorInvocation("Headers")
1157+
.getArgument(0)
1158+
.getALocalSource()
1159+
.getAPropertyWrite("Authorization")
1160+
.getRhs()
1161+
.asExpr()
1162+
}
1163+
1164+
override string getCredentialsKind() { result = "authorization headers" }
1165+
}
11501166
}
11511167
}

javascript/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,11 @@ nodes
162162
| HardcodedCredentials.js:164:35:164:45 | 'change_me' |
163163
| HardcodedCredentials.js:164:35:164:45 | 'change_me' |
164164
| HardcodedCredentials.js:164:35:164:45 | 'change_me' |
165+
| HardcodedCredentials.js:170:11:170:25 | PASS |
166+
| HardcodedCredentials.js:170:18:170:25 | 'sdsdag' |
167+
| HardcodedCredentials.js:170:18:170:25 | 'sdsdag' |
168+
| HardcodedCredentials.js:175:30:175:33 | PASS |
169+
| HardcodedCredentials.js:175:30:175:33 | PASS |
165170
edges
166171
| HardcodedCredentials.js:5:15:5:22 | 'dbuser' | HardcodedCredentials.js:5:15:5:22 | 'dbuser' |
167172
| HardcodedCredentials.js:8:19:8:28 | 'abcdefgh' | HardcodedCredentials.js:8:19:8:28 | 'abcdefgh' |
@@ -220,6 +225,10 @@ edges
220225
| HardcodedCredentials.js:160:38:160:48 | "change_me" | HardcodedCredentials.js:160:38:160:48 | "change_me" |
221226
| HardcodedCredentials.js:161:41:161:51 | 'change_me' | HardcodedCredentials.js:161:41:161:51 | 'change_me' |
222227
| HardcodedCredentials.js:164:35:164:45 | 'change_me' | HardcodedCredentials.js:164:35:164:45 | 'change_me' |
228+
| HardcodedCredentials.js:170:11:170:25 | PASS | HardcodedCredentials.js:175:30:175:33 | PASS |
229+
| HardcodedCredentials.js:170:11:170:25 | PASS | HardcodedCredentials.js:175:30:175:33 | PASS |
230+
| HardcodedCredentials.js:170:18:170:25 | 'sdsdag' | HardcodedCredentials.js:170:11:170:25 | PASS |
231+
| HardcodedCredentials.js:170:18:170:25 | 'sdsdag' | HardcodedCredentials.js:170:11:170:25 | PASS |
223232
#select
224233
| HardcodedCredentials.js:5:15:5:22 | 'dbuser' | HardcodedCredentials.js:5:15:5:22 | 'dbuser' | HardcodedCredentials.js:5:15:5:22 | 'dbuser' | The hard-coded value "dbuser" is used as $@. | HardcodedCredentials.js:5:15:5:22 | 'dbuser' | user name |
225234
| HardcodedCredentials.js:8:19:8:28 | 'abcdefgh' | HardcodedCredentials.js:8:19:8:28 | 'abcdefgh' | HardcodedCredentials.js:8:19:8:28 | 'abcdefgh' | The hard-coded value "abcdefgh" is used as $@. | HardcodedCredentials.js:8:19:8:28 | 'abcdefgh' | password |
@@ -274,3 +283,4 @@ edges
274283
| HardcodedCredentials.js:135:41:135:50 | "abcdefgh" | HardcodedCredentials.js:135:41:135:50 | "abcdefgh" | HardcodedCredentials.js:135:41:135:50 | "abcdefgh" | The hard-coded value "abcdefgh" is used as $@. | HardcodedCredentials.js:135:41:135:50 | "abcdefgh" | key |
275284
| HardcodedCredentials.js:160:38:160:48 | "change_me" | HardcodedCredentials.js:160:38:160:48 | "change_me" | HardcodedCredentials.js:160:38:160:48 | "change_me" | The hard-coded value "change_me" is used as $@. | HardcodedCredentials.js:160:38:160:48 | "change_me" | key |
276285
| HardcodedCredentials.js:161:41:161:51 | 'change_me' | HardcodedCredentials.js:161:41:161:51 | 'change_me' | HardcodedCredentials.js:161:41:161:51 | 'change_me' | The hard-coded value "change_me" is used as $@. | HardcodedCredentials.js:161:41:161:51 | 'change_me' | key |
286+
| HardcodedCredentials.js:170:18:170:25 | 'sdsdag' | HardcodedCredentials.js:170:18:170:25 | 'sdsdag' | HardcodedCredentials.js:175:30:175:33 | PASS | The hard-coded value "sdsdag" is used as $@. | HardcodedCredentials.js:175:30:175:33 | PASS | authorization headers |

javascript/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,3 +163,17 @@
163163
var basicAuth = require('express-basic-auth');
164164
basicAuth({users: { [adminName]: 'change_me' }}); // OK
165165
})();
166+
167+
(async function () {
168+
const fetch = require("node-fetch");
169+
170+
const PASS = 'sdsdag';
171+
172+
const rsp = await fetch(ENDPOINT, {
173+
method: 'get',
174+
headers: new fetch.Headers({
175+
'Authorization': PASS,
176+
'Content-Type': 'application/json'
177+
})
178+
});
179+
});

0 commit comments

Comments
 (0)