Skip to content

Commit d1d4ebb

Browse files
committed
add values written to the global scope as exports
1 parent 91b03f5 commit d1d4ebb

File tree

3 files changed

+17
-0
lines changed

3 files changed

+17
-0
lines changed

javascript/ql/lib/semmle/javascript/PackageExports.qll

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,10 @@ private DataFlow::Node getAnExportFromModule(Module mod) {
216216
or
217217
result = mod.getABulkExportedNode()
218218
or
219+
// exports saved to the global object
220+
result = DataFlow::globalObjectRef().getAPropertyWrite().getRhs() and
221+
result.getTopLevel() = mod
222+
or
219223
result.analyze().getAValue() = TAbstractModuleObject(mod)
220224
}
221225

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ nodes
77
| lib/index.js:5:35:5:38 | name |
88
| lib/index.js:6:26:6:29 | name |
99
| lib/index.js:6:26:6:29 | name |
10+
| lib/index.js:13:38:13:41 | data |
11+
| lib/index.js:13:38:13:41 | data |
12+
| lib/index.js:14:21:14:24 | data |
13+
| lib/index.js:14:21:14:24 | data |
1014
edges
1115
| lib/index.js:1:35:1:38 | data | lib/index.js:2:21:2:24 | data |
1216
| lib/index.js:1:35:1:38 | data | lib/index.js:2:21:2:24 | data |
@@ -16,6 +20,11 @@ edges
1620
| lib/index.js:5:35:5:38 | name | lib/index.js:6:26:6:29 | name |
1721
| lib/index.js:5:35:5:38 | name | lib/index.js:6:26:6:29 | name |
1822
| lib/index.js:5:35:5:38 | name | lib/index.js:6:26:6:29 | name |
23+
| lib/index.js:13:38:13:41 | data | lib/index.js:14:21:14:24 | data |
24+
| lib/index.js:13:38:13:41 | data | lib/index.js:14:21:14:24 | data |
25+
| lib/index.js:13:38:13:41 | data | lib/index.js:14:21:14:24 | data |
26+
| lib/index.js:13:38:13:41 | data | lib/index.js:14:21:14:24 | data |
1927
#select
2028
| 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 |
2129
| 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 |
30+
| 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 |

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,7 @@ export function unsafeGetter(obj, name) {
99
export function safeAssignment(obj, value) {
1010
eval("obj.foo = " + JSON.stringify(value)); // OK
1111
}
12+
13+
global.unsafeDeserialize = function (data) {
14+
return eval("(" + data + ")"); // NOT OK
15+
}

0 commit comments

Comments
 (0)