Skip to content

Commit 5ecae55

Browse files
committed
add keys used by jsonwebtoken as CredentialsExpr
1 parent e75259d commit 5ecae55

File tree

3 files changed

+48
-1
lines changed

3 files changed

+48
-1
lines changed

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,19 @@ private module JsonWebToken {
3636
succ = this.getABoundCallbackParameter(2, 1)
3737
}
3838
}
39+
40+
/**
41+
* The public/private key for a JWT as a `CredentialsExpr`.
42+
*/
43+
private class JWTKey extends CredentialsExpr {
44+
JWTKey() {
45+
this =
46+
DataFlow::moduleMember("jsonwebtoken", ["verify", "sign"])
47+
.getACall()
48+
.getArgument(1)
49+
.asExpr()
50+
}
51+
52+
override string getCredentialsKind() { result = "key" }
53+
}
3954
}

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,16 @@ nodes
208208
| HardcodedCredentials.js:237:35:237:91 | Buffer. ... ase64') |
209209
| HardcodedCredentials.js:237:47:237:54 | username |
210210
| HardcodedCredentials.js:237:47:237:71 | usernam ... assword |
211+
| HardcodedCredentials.js:245:9:245:44 | privateKey |
212+
| HardcodedCredentials.js:245:22:245:44 | "myHard ... ateKey" |
213+
| HardcodedCredentials.js:245:22:245:44 | "myHard ... ateKey" |
214+
| HardcodedCredentials.js:246:42:246:51 | privateKey |
215+
| HardcodedCredentials.js:246:42:246:51 | privateKey |
216+
| HardcodedCredentials.js:248:9:248:42 | publicKey |
217+
| HardcodedCredentials.js:248:21:248:42 | "myHard ... licKey" |
218+
| HardcodedCredentials.js:248:21:248:42 | "myHard ... licKey" |
219+
| HardcodedCredentials.js:249:23:249:31 | publicKey |
220+
| HardcodedCredentials.js:249:23:249:31 | publicKey |
211221
edges
212222
| HardcodedCredentials.js:5:15:5:22 | 'dbuser' | HardcodedCredentials.js:5:15:5:22 | 'dbuser' |
213223
| HardcodedCredentials.js:8:19:8:28 | 'abcdefgh' | HardcodedCredentials.js:8:19:8:28 | 'abcdefgh' |
@@ -309,6 +319,14 @@ edges
309319
| HardcodedCredentials.js:237:35:237:91 | Buffer. ... ase64') | HardcodedCredentials.js:237:24:237:91 | 'Basic ... ase64') |
310320
| HardcodedCredentials.js:237:47:237:54 | username | HardcodedCredentials.js:237:47:237:71 | usernam ... assword |
311321
| HardcodedCredentials.js:237:47:237:71 | usernam ... assword | HardcodedCredentials.js:237:35:237:72 | Buffer. ... ssword) |
322+
| HardcodedCredentials.js:245:9:245:44 | privateKey | HardcodedCredentials.js:246:42:246:51 | privateKey |
323+
| HardcodedCredentials.js:245:9:245:44 | privateKey | HardcodedCredentials.js:246:42:246:51 | privateKey |
324+
| HardcodedCredentials.js:245:22:245:44 | "myHard ... ateKey" | HardcodedCredentials.js:245:9:245:44 | privateKey |
325+
| HardcodedCredentials.js:245:22:245:44 | "myHard ... ateKey" | HardcodedCredentials.js:245:9:245:44 | privateKey |
326+
| HardcodedCredentials.js:248:9:248:42 | publicKey | HardcodedCredentials.js:249:23:249:31 | publicKey |
327+
| HardcodedCredentials.js:248:9:248:42 | publicKey | HardcodedCredentials.js:249:23:249:31 | publicKey |
328+
| HardcodedCredentials.js:248:21:248:42 | "myHard ... licKey" | HardcodedCredentials.js:248:9:248:42 | publicKey |
329+
| HardcodedCredentials.js:248:21:248:42 | "myHard ... licKey" | HardcodedCredentials.js:248:9:248:42 | publicKey |
312330
#select
313331
| 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 |
314332
| 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 |
@@ -374,3 +392,5 @@ edges
374392
| HardcodedCredentials.js:214:18:214:25 | 'sdsdag' | HardcodedCredentials.js:214:18:214:25 | 'sdsdag' | HardcodedCredentials.js:221:37:221:51 | `Basic ${AUTH}` | The hard-coded value "sdsdag" is used as $@. | HardcodedCredentials.js:221:37:221:51 | `Basic ${AUTH}` | authorization header |
375393
| HardcodedCredentials.js:215:18:215:25 | 'sdsdag' | HardcodedCredentials.js:215:18:215:25 | 'sdsdag' | HardcodedCredentials.js:221:37:221:51 | `Basic ${AUTH}` | The hard-coded value "sdsdag" is used as $@. | HardcodedCredentials.js:221:37:221:51 | `Basic ${AUTH}` | authorization header |
376394
| HardcodedCredentials.js:231:22:231:29 | 'sdsdag' | HardcodedCredentials.js:231:22:231:29 | 'sdsdag' | HardcodedCredentials.js:237:24:237:91 | 'Basic ... ase64') | The hard-coded value "sdsdag" is used as $@. | HardcodedCredentials.js:237:24:237:91 | 'Basic ... ase64') | authorization header |
395+
| HardcodedCredentials.js:245:22:245:44 | "myHard ... ateKey" | HardcodedCredentials.js:245:22:245:44 | "myHard ... ateKey" | HardcodedCredentials.js:246:42:246:51 | privateKey | The hard-coded value "myHardCodedPrivateKey" is used as $@. | HardcodedCredentials.js:246:42:246:51 | privateKey | key |
396+
| HardcodedCredentials.js:248:21:248:42 | "myHard ... licKey" | HardcodedCredentials.js:248:21:248:42 | "myHard ... licKey" | HardcodedCredentials.js:249:23:249:31 | publicKey | The hard-coded value "myHardCodedPublicKey" is used as $@. | HardcodedCredentials.js:249:23:249:31 | publicKey | key |

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,4 +237,16 @@
237237
Authorization: 'Basic ' + Buffer.from(username + ':' + password).toString('base64'),
238238
},
239239
});
240-
})
240+
})
241+
242+
(function () {
243+
import jwt from "jsonwebtoken";
244+
245+
var privateKey = "myHardCodedPrivateKey";
246+
var token = jwt.sign({ foo: 'bar' }, privateKey, { algorithm: 'RS256'});
247+
248+
var publicKey = "myHardCodedPublicKey";
249+
jwt.verify(token, publicKey, function(err, decoded) {
250+
console.log(decoded);
251+
});
252+
})();

0 commit comments

Comments
 (0)