Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2400af4

Browse files
committed
JS: Port PostMessageStar
1 parent e1fae3d commit 2400af4

3 files changed

Lines changed: 43 additions & 35 deletions

File tree

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

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import javascript
1111
import PostMessageStarCustomizations::PostMessageStar
1212

1313
// Materialize flow labels
14-
private class ConcretePartiallyTaintedObject extends PartiallyTaintedObject {
14+
deprecated private class ConcretePartiallyTaintedObject extends PartiallyTaintedObject {
1515
ConcretePartiallyTaintedObject() { this = this }
1616
}
1717

@@ -26,7 +26,27 @@ private class ConcretePartiallyTaintedObject extends PartiallyTaintedObject {
2626
* Additional sources or sinks can be added either by extending the relevant class, or by subclassing
2727
* this configuration itself, and amending the sources and sinks.
2828
*/
29-
class Configuration extends TaintTracking::Configuration {
29+
module PostMessageStarConfig implements DataFlow::ConfigSig {
30+
predicate isSource(DataFlow::Node source) { source instanceof Source }
31+
32+
predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
33+
34+
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
35+
36+
predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet contents) {
37+
isSink(node) and contents = DataFlow::ContentSet::anyProperty()
38+
}
39+
}
40+
41+
/**
42+
* A taint tracking configuration for cross-window communication with unrestricted origin.
43+
*/
44+
module PostMessageStarFlow = TaintTracking::Global<PostMessageStarConfig>;
45+
46+
/**
47+
* DEPRECATED. Use the `PostMessageStarFlow` module instead.
48+
*/
49+
deprecated class Configuration extends TaintTracking::Configuration {
3050
Configuration() { this = "PostMessageStar" }
3151

3252
override predicate isSource(DataFlow::Node source) { source instanceof Source }

javascript/ql/src/Security/CWE-201/PostMessageStar.ql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515

1616
import javascript
1717
import semmle.javascript.security.dataflow.PostMessageStarQuery
18-
import DataFlow::PathGraph
18+
import PostMessageStarFlow::PathGraph
1919

20-
from Configuration cfg, DataFlow::PathNode source, DataFlow::PathNode sink
21-
where cfg.hasFlowPath(source, sink)
20+
from PostMessageStarFlow::PathNode source, PostMessageStarFlow::PathNode sink
21+
where PostMessageStarFlow::flowPath(source, sink)
2222
select sink.getNode(), source, sink, "$@ is sent to another window without origin restriction.",
2323
source.getNode(), "Sensitive data"

javascript/ql/test/query-tests/Security/CWE-201/PostMessageStar.expected

Lines changed: 18 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,22 @@
1-
nodes
2-
| PostMessageStar2.js:1:27:1:34 | password |
3-
| PostMessageStar2.js:1:27:1:34 | password |
4-
| PostMessageStar2.js:1:27:1:34 | password |
5-
| PostMessageStar2.js:4:7:4:15 | data |
6-
| PostMessageStar2.js:4:14:4:15 | {} |
7-
| PostMessageStar2.js:5:14:5:21 | password |
8-
| PostMessageStar2.js:5:14:5:21 | password |
9-
| PostMessageStar2.js:8:29:8:32 | data |
10-
| PostMessageStar2.js:8:29:8:32 | data |
11-
| PostMessageStar2.js:9:29:9:36 | data.foo |
12-
| PostMessageStar2.js:9:29:9:36 | data.foo |
13-
| PostMessageStar2.js:13:27:13:33 | authKey |
14-
| PostMessageStar2.js:13:27:13:33 | authKey |
15-
| PostMessageStar2.js:13:27:13:33 | authKey |
16-
| PostMessageStar.js:1:27:1:34 | userName |
17-
| PostMessageStar.js:1:27:1:34 | userName |
18-
| PostMessageStar.js:1:27:1:34 | userName |
191
edges
20-
| PostMessageStar2.js:1:27:1:34 | password | PostMessageStar2.js:1:27:1:34 | password |
21-
| PostMessageStar2.js:4:7:4:15 | data | PostMessageStar2.js:8:29:8:32 | data |
22-
| PostMessageStar2.js:4:7:4:15 | data | PostMessageStar2.js:8:29:8:32 | data |
23-
| PostMessageStar2.js:4:14:4:15 | {} | PostMessageStar2.js:4:7:4:15 | data |
24-
| PostMessageStar2.js:5:14:5:21 | password | PostMessageStar2.js:4:14:4:15 | {} |
25-
| PostMessageStar2.js:5:14:5:21 | password | PostMessageStar2.js:4:14:4:15 | {} |
26-
| PostMessageStar2.js:5:14:5:21 | password | PostMessageStar2.js:9:29:9:36 | data.foo |
27-
| PostMessageStar2.js:5:14:5:21 | password | PostMessageStar2.js:9:29:9:36 | data.foo |
28-
| PostMessageStar2.js:5:14:5:21 | password | PostMessageStar2.js:9:29:9:36 | data.foo |
29-
| PostMessageStar2.js:5:14:5:21 | password | PostMessageStar2.js:9:29:9:36 | data.foo |
30-
| PostMessageStar2.js:13:27:13:33 | authKey | PostMessageStar2.js:13:27:13:33 | authKey |
31-
| PostMessageStar.js:1:27:1:34 | userName | PostMessageStar.js:1:27:1:34 | userName |
2+
| PostMessageStar2.js:4:7:4:15 | data [foo] | PostMessageStar2.js:8:29:8:32 | data [foo] |
3+
| PostMessageStar2.js:4:7:4:15 | data [foo] | PostMessageStar2.js:9:29:9:32 | data [foo] |
4+
| PostMessageStar2.js:5:3:5:6 | [post update] data [foo] | PostMessageStar2.js:4:7:4:15 | data [foo] |
5+
| PostMessageStar2.js:5:14:5:21 | password | PostMessageStar2.js:5:3:5:6 | [post update] data [foo] |
6+
| PostMessageStar2.js:8:29:8:32 | data [foo] | PostMessageStar2.js:8:29:8:32 | data |
7+
| PostMessageStar2.js:9:29:9:32 | data [foo] | PostMessageStar2.js:9:29:9:36 | data.foo |
8+
nodes
9+
| PostMessageStar2.js:1:27:1:34 | password | semmle.label | password |
10+
| PostMessageStar2.js:4:7:4:15 | data [foo] | semmle.label | data [foo] |
11+
| PostMessageStar2.js:5:3:5:6 | [post update] data [foo] | semmle.label | [post update] data [foo] |
12+
| PostMessageStar2.js:5:14:5:21 | password | semmle.label | password |
13+
| PostMessageStar2.js:8:29:8:32 | data | semmle.label | data |
14+
| PostMessageStar2.js:8:29:8:32 | data [foo] | semmle.label | data [foo] |
15+
| PostMessageStar2.js:9:29:9:32 | data [foo] | semmle.label | data [foo] |
16+
| PostMessageStar2.js:9:29:9:36 | data.foo | semmle.label | data.foo |
17+
| PostMessageStar2.js:13:27:13:33 | authKey | semmle.label | authKey |
18+
| PostMessageStar.js:1:27:1:34 | userName | semmle.label | userName |
19+
subpaths
3220
#select
3321
| PostMessageStar2.js:1:27:1:34 | password | PostMessageStar2.js:1:27:1:34 | password | PostMessageStar2.js:1:27:1:34 | password | $@ is sent to another window without origin restriction. | PostMessageStar2.js:1:27:1:34 | password | Sensitive data |
3422
| PostMessageStar2.js:8:29:8:32 | data | PostMessageStar2.js:5:14:5:21 | password | PostMessageStar2.js:8:29:8:32 | data | $@ is sent to another window without origin restriction. | PostMessageStar2.js:5:14:5:21 | password | Sensitive data |

0 commit comments

Comments
 (0)