Skip to content

Commit ffad65b

Browse files
authored
Merge pull request github#5993 from erik-krogh/lib-debug
Approved by esbena
2 parents 60fb1a3 + 431c995 commit ffad65b

File tree

4 files changed

+38
-1
lines changed

4 files changed

+38
-1
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
lgtm,codescanning
2+
* Logging calls using the [debug](https://npmjs.com/package/immutable) library are now recognized.
3+
Affected packages are
4+
[debug](https://npmjs.com/package/debug)

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,3 +192,12 @@ private module Fancylog {
192192
override DataFlow::Node getAMessageComponent() { result = getAnArgument() }
193193
}
194194
}
195+
196+
/**
197+
* A class modelling [debug](https://npmjs.org/package/debug) as a logging mechanism.
198+
*/
199+
private class DebugLoggerCall extends LoggerCall, API::CallNode {
200+
DebugLoggerCall() { this = API::moduleImport("debug").getReturn().getACall() }
201+
202+
override DataFlow::Node getAMessageComponent() { result = getAnArgument() }
203+
}

javascript/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,14 @@ nodes
125125
| passwords.js:164:14:164:21 | password |
126126
| passwords.js:164:14:164:42 | passwor ... g, "*") |
127127
| passwords.js:164:14:164:42 | passwor ... g, "*") |
128+
| passwords.js:169:17:169:24 | password |
129+
| passwords.js:169:17:169:24 | password |
130+
| passwords.js:169:17:169:45 | passwor ... g, "*") |
131+
| passwords.js:169:17:169:45 | passwor ... g, "*") |
132+
| passwords.js:170:11:170:18 | password |
133+
| passwords.js:170:11:170:18 | password |
134+
| passwords.js:170:11:170:39 | passwor ... g, "*") |
135+
| passwords.js:170:11:170:39 | passwor ... g, "*") |
128136
| passwords_in_browser1.js:2:13:2:20 | password |
129137
| passwords_in_browser1.js:2:13:2:20 | password |
130138
| passwords_in_browser1.js:2:13:2:20 | password |
@@ -261,6 +269,14 @@ edges
261269
| passwords.js:164:14:164:21 | password | passwords.js:164:14:164:42 | passwor ... g, "*") |
262270
| passwords.js:164:14:164:21 | password | passwords.js:164:14:164:42 | passwor ... g, "*") |
263271
| passwords.js:164:14:164:21 | password | passwords.js:164:14:164:42 | passwor ... g, "*") |
272+
| passwords.js:169:17:169:24 | password | passwords.js:169:17:169:45 | passwor ... g, "*") |
273+
| passwords.js:169:17:169:24 | password | passwords.js:169:17:169:45 | passwor ... g, "*") |
274+
| passwords.js:169:17:169:24 | password | passwords.js:169:17:169:45 | passwor ... g, "*") |
275+
| passwords.js:169:17:169:24 | password | passwords.js:169:17:169:45 | passwor ... g, "*") |
276+
| passwords.js:170:11:170:18 | password | passwords.js:170:11:170:39 | passwor ... g, "*") |
277+
| passwords.js:170:11:170:18 | password | passwords.js:170:11:170:39 | passwor ... g, "*") |
278+
| passwords.js:170:11:170:18 | password | passwords.js:170:11:170:39 | passwor ... g, "*") |
279+
| passwords.js:170:11:170:18 | password | passwords.js:170:11:170:39 | passwor ... g, "*") |
264280
| passwords_in_browser1.js:2:13:2:20 | password | passwords_in_browser1.js:2:13:2:20 | password |
265281
| passwords_in_browser2.js:2:13:2:20 | password | passwords_in_browser2.js:2:13:2:20 | password |
266282
| passwords_in_server_1.js:6:13:6:20 | password | passwords_in_server_1.js:6:13:6:20 | password |
@@ -304,6 +320,8 @@ edges
304320
| passwords.js:156:17:156:27 | process.env | passwords.js:156:17:156:27 | process.env | passwords.js:156:17:156:27 | process.env | Sensitive data returned by $@ is logged here. | passwords.js:156:17:156:27 | process.env | process environment |
305321
| passwords.js:163:14:163:41 | passwor ... g, "*") | passwords.js:163:14:163:21 | password | passwords.js:163:14:163:41 | passwor ... g, "*") | Sensitive data returned by $@ is logged here. | passwords.js:163:14:163:21 | password | an access to password |
306322
| passwords.js:164:14:164:42 | passwor ... g, "*") | passwords.js:164:14:164:21 | password | passwords.js:164:14:164:42 | passwor ... g, "*") | Sensitive data returned by $@ is logged here. | passwords.js:164:14:164:21 | password | an access to password |
323+
| passwords.js:169:17:169:45 | passwor ... g, "*") | passwords.js:169:17:169:24 | password | passwords.js:169:17:169:45 | passwor ... g, "*") | Sensitive data returned by $@ is logged here. | passwords.js:169:17:169:24 | password | an access to password |
324+
| passwords.js:170:11:170:39 | passwor ... g, "*") | passwords.js:170:11:170:18 | password | passwords.js:170:11:170:39 | passwor ... g, "*") | Sensitive data returned by $@ is logged here. | passwords.js:170:11:170:18 | password | an access to password |
307325
| passwords_in_server_1.js:6:13:6:20 | password | passwords_in_server_1.js:6:13:6:20 | password | passwords_in_server_1.js:6:13:6:20 | password | Sensitive data returned by $@ is logged here. | passwords_in_server_1.js:6:13:6:20 | password | an access to password |
308326
| passwords_in_server_2.js:3:13:3:20 | password | passwords_in_server_2.js:3:13:3:20 | password | passwords_in_server_2.js:3:13:3:20 | password | Sensitive data returned by $@ is logged here. | passwords_in_server_2.js:3:13:3:20 | password | an access to password |
309327
| passwords_in_server_3.js:2:13:2:20 | password | passwords_in_server_3.js:2:13:2:20 | password | passwords_in_server_3.js:2:13:2:20 | password | Sensitive data returned by $@ is logged here. | passwords_in_server_3.js:2:13:2:20 | password | an access to password |

javascript/ql/test/query-tests/Security/CWE-312/passwords.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,4 +162,10 @@ var Util = require('util');
162162
console.log(password.replace(/./g, "*")); // OK!
163163
console.log(password.replace(/\./g, "*")); // NOT OK!
164164
console.log(password.replace(/foo/g, "*")); // NOT OK!
165-
})();
165+
})();
166+
167+
const debug = require('debug')('test');
168+
(function () {
169+
console.log(password.replace(/foo/g, "*")); // NOT OK
170+
debug(password.replace(/foo/g, "*")); // NOT OK
171+
});

0 commit comments

Comments
 (0)