Skip to content

Commit fc5b9dd

Browse files
authored
Merge pull request #837 from asger-semmle/hardcoded-empty-string
Approved by esben-semmle
2 parents 24c8a47 + 5d4192c commit fc5b9dd

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

change-notes/1.20/analysis-javascript.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
| **Query** | **Expected impact** | **Change** |
2828
|--------------------------------------------|------------------------------|------------------------------------------------------------------------------|
2929
| Client-side cross-site scripting | More true-positive results, fewer false-positive results. | This rule now recognizes WinJS functions that are vulnerable to HTML injection, and no longer flags certain safe uses of jQuery. |
30+
| Hard-coded credentials | Fewer false-positive results | This rule no longer flag the empty string as a hardcoded username. |
3031
| Insecure randomness | More results | This rule now flags insecure uses of `crypto.pseudoRandomBytes`. |
3132
| Uncontrolled data used in network request | More results | This rule now recognizes host values that are vulnerable to injection. |
3233
| Unused parameter | Fewer false-positive results | This rule no longer flags parameters with leading underscore. |

javascript/ql/src/semmle/javascript/security/dataflow/HardcodedCredentials.qll

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,14 @@ module HardcodedCredentials {
4141
* A subclass of `Sink` that includes every `CredentialsExpr`
4242
* as a credentials sink.
4343
*/
44-
class DefaultCredentialsSink extends Sink {
45-
DefaultCredentialsSink() { this.asExpr() instanceof CredentialsExpr }
44+
class DefaultCredentialsSink extends Sink, DataFlow::ValueNode {
45+
override CredentialsExpr astNode;
4646

47-
override string getKind() { result = this.asExpr().(CredentialsExpr).getCredentialsKind() }
47+
DefaultCredentialsSink() {
48+
// Don't flag an empty user name
49+
not (astNode.getCredentialsKind() = "user name" and astNode.getStringValue() = "")
50+
}
51+
52+
override string getKind() { result = astNode.getCredentialsKind() }
4853
}
4954
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,3 +134,13 @@
134134
(function(){
135135
require("cookie-session")({ secret: "cookie-session secret" });
136136
})()
137+
138+
(function(){
139+
var request = require('request');
140+
request.get(url, { // OK
141+
'auth': {
142+
'user': '',
143+
'pass': process.env.PASSWORD
144+
}
145+
});
146+
})();

0 commit comments

Comments
 (0)