Skip to content

Commit f71a64b

Browse files
committed
recognize when the js engine in gray-matter is set to something safe
1 parent 22d285f commit f71a64b

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

javascript/ql/lib/semmle/javascript/security/dataflow/CodeInjectionCustomizations.qll

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,14 @@ module CodeInjection {
5353

5454
/** An expression parsed by the `gray-matter` library. */
5555
class GrayMatterSink extends Sink {
56-
GrayMatterSink() { this = DataFlow::moduleImport("gray-matter").getACall().getArgument(0) }
56+
API::CallNode call;
57+
58+
GrayMatterSink() {
59+
call = DataFlow::moduleImport("gray-matter").getACall() and
60+
this = call.getArgument(0) and
61+
// if the js/javascript engine is set, then we assume they are set to something safe.
62+
not exists(call.getParameter(1).getMember("engines").getMember(["js", "javascript"]))
63+
}
5764
}
5865

5966
/**

javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/UnsafeCodeConstruction.expected

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,4 @@ edges
3636
| lib/index.js:2:21:2:24 | data | lib/index.js:1:35:1:38 | data | lib/index.js:2:21:2:24 | data | $@ flows to here and is later $@. | lib/index.js:1:35:1:38 | data | Library input | lib/index.js:2:15:2:30 | "(" + data + ")" | interpreted as code |
3737
| lib/index.js:6:26:6:29 | name | lib/index.js:5:35:5:38 | name | lib/index.js:6:26:6:29 | name | $@ flows to here and is later $@. | lib/index.js:5:35:5:38 | name | Library input | lib/index.js:6:17:6:29 | "obj." + name | interpreted as code |
3838
| lib/index.js:14:21:14:24 | data | lib/index.js:13:38:13:41 | data | lib/index.js:14:21:14:24 | data | $@ flows to here and is later $@. | lib/index.js:13:38:13:41 | data | Library input | lib/index.js:14:15:14:30 | "(" + data + ")" | interpreted as code |
39-
| lib/index.js:22:7:22:10 | data | lib/index.js:19:26:19:29 | data | lib/index.js:22:7:22:10 | data | $@ flows to here and is later $@. | lib/index.js:19:26:19:29 | data | Library input | lib/index.js:25:32:25:34 | str | interpreted as code |
39+
| lib/index.js:22:7:22:10 | data | lib/index.js:19:26:19:29 | data | lib/index.js:22:7:22:10 | data | $@ flows to here and is later $@. | lib/index.js:19:26:19:29 | data | Library input | lib/index.js:25:24:25:26 | str | interpreted as code |

javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/lib/index.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@ export function greySink(data) {
2222
${data}
2323
---
2424
`
25-
const { content } = matter(str);
26-
console.log(content);
25+
const res = matter(str);
26+
console.log(res);
27+
28+
matter(str, { // OK
29+
engines: {
30+
js: function (data) {
31+
console.log("NOPE");
32+
}
33+
}
34+
});
2735
}

0 commit comments

Comments
 (0)