mirror of
https://github.com/github/codeql.git
synced 2026-04-25 08:45:14 +02:00
Now catches usage of RegExp. after matchAll usage.
This commit is contained in:
@@ -917,7 +917,7 @@ module TaintTracking {
|
||||
*/
|
||||
private ControlFlowNode getACaptureSetter(DataFlow::Node input) {
|
||||
exists(DataFlow::MethodCallNode call | result = call.asExpr() |
|
||||
call.getMethodName() = ["search", "replace", "replaceAll", "match"] and
|
||||
call.getMethodName() = ["search", "replace", "replaceAll", "match", "matchAll"] and
|
||||
input = call.getReceiver()
|
||||
or
|
||||
call.getMethodName() = ["test", "exec"] and input = call.getArgument(0)
|
||||
|
||||
@@ -106,6 +106,13 @@ nodes
|
||||
| logInjectionBad.js:123:20:123:46 | usernam ... */g)[0] |
|
||||
| logInjectionBad.js:124:17:124:24 | otherStr |
|
||||
| logInjectionBad.js:124:17:124:24 | otherStr |
|
||||
| logInjectionBad.js:128:20:128:43 | url.par ... , true) |
|
||||
| logInjectionBad.js:128:20:128:49 | url.par ... ).query |
|
||||
| logInjectionBad.js:128:20:128:58 | url.par ... sername |
|
||||
| logInjectionBad.js:128:30:128:36 | req.url |
|
||||
| logInjectionBad.js:128:30:128:36 | req.url |
|
||||
| logInjectionBad.js:129:42:129:50 | RegExp.$1 |
|
||||
| logInjectionBad.js:129:42:129:50 | RegExp.$1 |
|
||||
edges
|
||||
| logInjectionBad.js:19:9:19:36 | q | logInjectionBad.js:20:20:20:20 | q |
|
||||
| logInjectionBad.js:19:13:19:36 | url.par ... , true) | logInjectionBad.js:19:9:19:36 | q |
|
||||
@@ -209,6 +216,12 @@ edges
|
||||
| logInjectionBad.js:123:20:123:27 | username | logInjectionBad.js:123:20:123:43 | usernam ... (/.*/g) |
|
||||
| logInjectionBad.js:123:20:123:43 | usernam ... (/.*/g) | logInjectionBad.js:123:20:123:46 | usernam ... */g)[0] |
|
||||
| logInjectionBad.js:123:20:123:46 | usernam ... */g)[0] | logInjectionBad.js:123:9:123:46 | otherStr |
|
||||
| logInjectionBad.js:128:20:128:43 | url.par ... , true) | logInjectionBad.js:128:20:128:49 | url.par ... ).query |
|
||||
| logInjectionBad.js:128:20:128:49 | url.par ... ).query | logInjectionBad.js:128:20:128:58 | url.par ... sername |
|
||||
| logInjectionBad.js:128:20:128:58 | url.par ... sername | logInjectionBad.js:129:42:129:50 | RegExp.$1 |
|
||||
| logInjectionBad.js:128:20:128:58 | url.par ... sername | logInjectionBad.js:129:42:129:50 | RegExp.$1 |
|
||||
| logInjectionBad.js:128:30:128:36 | req.url | logInjectionBad.js:128:20:128:43 | url.par ... , true) |
|
||||
| logInjectionBad.js:128:30:128:36 | req.url | logInjectionBad.js:128:20:128:43 | url.par ... , true) |
|
||||
#select
|
||||
| logInjectionBad.js:22:18:22:43 | `[INFO] ... rname}` | logInjectionBad.js:19:23:19:29 | req.url | logInjectionBad.js:22:18:22:43 | `[INFO] ... rname}` | Log entry depends on a $@. | logInjectionBad.js:19:23:19:29 | req.url | user-provided value |
|
||||
| logInjectionBad.js:23:37:23:44 | username | logInjectionBad.js:19:23:19:29 | req.url | logInjectionBad.js:23:37:23:44 | username | Log entry depends on a $@. | logInjectionBad.js:19:23:19:29 | req.url | user-provided value |
|
||||
@@ -232,3 +245,4 @@ edges
|
||||
| logInjectionBad.js:99:26:99:33 | username | logInjectionBad.js:72:23:72:29 | req.url | logInjectionBad.js:99:26:99:33 | username | Log entry depends on a $@. | logInjectionBad.js:72:23:72:29 | req.url | user-provided value |
|
||||
| logInjectionBad.js:113:37:113:44 | username | logInjectionBad.js:72:23:72:29 | req.url | logInjectionBad.js:113:37:113:44 | username | Log entry depends on a $@. | logInjectionBad.js:72:23:72:29 | req.url | user-provided value |
|
||||
| logInjectionBad.js:124:17:124:24 | otherStr | logInjectionBad.js:122:30:122:36 | req.url | logInjectionBad.js:124:17:124:24 | otherStr | Log entry depends on a $@. | logInjectionBad.js:122:30:122:36 | req.url | user-provided value |
|
||||
| logInjectionBad.js:129:42:129:50 | RegExp.$1 | logInjectionBad.js:128:30:128:36 | req.url | logInjectionBad.js:129:42:129:50 | RegExp.$1 | Log entry depends on a $@. | logInjectionBad.js:128:30:128:36 | req.url | user-provided value |
|
||||
|
||||
@@ -125,6 +125,6 @@ const serverMatchAll = http.createServer((req, res) => {
|
||||
});
|
||||
|
||||
const serverMatchAl2l = http.createServer((req, res) => {
|
||||
const result = url.parse(req.url, true).query.username.matchAll(/(\d+)/g); // BAD - match is marked as vulnerable, while matchAll is not.
|
||||
const result = url.parse(req.url, true).query.username.matchAll(/(\d+)/g); // BAD
|
||||
console.log("First captured group:", RegExp.$1);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user