Skip to content

Commit d9a2147

Browse files
committed
add support for node-rsa
1 parent 49ea53f commit d9a2147

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed

javascript/ql/lib/semmle/javascript/frameworks/CryptoLibraries.qll

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -689,3 +689,28 @@ private module ExpressJwt {
689689
Key() { this = DataFlow::moduleMember("express-jwt", "sign").getACall().getArgument(1) }
690690
}
691691
}
692+
693+
/**
694+
* Provides classes for working with the `node-rsa` package (https://www.npmjs.com/package/node-rsa)
695+
*/
696+
private module NodeRsa {
697+
private class CreateKey extends CryptographicKeyCreation, API::InvokeNode {
698+
CryptographicAlgorithm algorithm;
699+
700+
CreateKey() {
701+
this = API::moduleImport("node-rsa").getAnInstantiation()
702+
or
703+
this = API::moduleImport("node-rsa").getInstance().getMember("generateKeyPair").getACall()
704+
}
705+
706+
override CryptographicAlgorithm getAlgorithm() { result.matchesName("rsa") }
707+
708+
override int getSize() {
709+
result = this.getArgument(0).getIntValue()
710+
or
711+
result = this.getOptionArgument(0, "b").getIntValue()
712+
}
713+
714+
override predicate isSymmetricKey() { none() }
715+
}
716+
}

javascript/ql/test/query-tests/Security/CWE-326/InsufficientKeySize.expected

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,6 @@
66
| tst.js:19:12:19:57 | forge.r ... rd, 64) | Creation of an symmetric RC2 key uses 64 bits, which is below 128 and considered breakable. |
77
| tst.js:26:12:26:53 | forge.c ... , key2) | Creation of an symmetric AESCBC key uses 64 bits, which is below 128 and considered breakable. |
88
| tst.js:30:12:30:56 | forge.c ... , key3) | Creation of an symmetric 3DESCBC key uses 64 bits, which is below 128 and considered breakable. |
9+
| tst.js:35:13:35:43 | crypto. ... an(512) | Creation of an asymmetric key uses 512 bits, which is below 2048 and considered breakable. |
10+
| tst.js:39:13:39:33 | new Nod ... : 512}) | Creation of an asymmetric RSA key uses 512 bits, which is below 2048 and considered breakable. |
11+
| tst.js:43:1:43:31 | key.gen ... 65537) | Creation of an asymmetric RSA key uses 512 bits, which is below 2048 and considered breakable. |

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,12 @@ var key4 = myBuffer.getBytes(16);
3333
var good5 = forge.cipher.createDecipher('AES-CBC', key4); // OK
3434

3535
var bad10 = crypto.createDiffieHellman(512);
36-
var good6 = crypto.createDiffieHellman(2048);
36+
var good6 = crypto.createDiffieHellman(2048);
37+
38+
const NodeRSA = require('node-rsa');
39+
var bad11 = new NodeRSA({b: 512}); // NOT OK
40+
var good7 = new NodeRSA({b: 4096}); // OK
41+
42+
var key = new NodeRSA(); // OK
43+
key.generateKeyPair(512, 65537); // NOT OK
44+
key.generateKeyPair(4096, 65537); // OK

0 commit comments

Comments
 (0)