|
16 | 16 | * A taint tracking configuration for client-side request forgery.
|
17 | 17 | * Server side is disabled since this is in the browser, but the extra models can be enabled for extra coverage
|
18 | 18 | */
|
19 |
| - class Configuration extends TaintTracking::Configuration { |
20 |
| - Configuration() { this = "ClientSideRequestForgery" } |
21 |
| - |
22 |
| - override predicate isSource(DataFlow::Node source) { |
| 19 | + module Config implements DataFlow::ConfigSig { |
| 20 | + predicate isSource(DataFlow::Node source) { |
23 | 21 | exists(Source src |
|
24 | 22 | source = src and
|
25 | 23 | not src.isServerSide()
|
26 | 24 | ) or
|
27 | 25 | source instanceof OnMessageExternal or source instanceof OnConnectExternal
|
28 | 26 | }
|
29 | 27 |
|
30 |
| - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } |
| 28 | + predicate isSink(DataFlow::Node sink) { sink instanceof Sink } |
31 | 29 |
|
32 |
| - override predicate isSanitizer(DataFlow::Node node) { |
33 |
| - super.isSanitizer(node) or |
| 30 | + predicate isBarrier(DataFlow::Node node) { |
34 | 31 | node instanceof Sanitizer
|
35 | 32 | }
|
36 | 33 |
|
37 |
| - override predicate isSanitizerOut(DataFlow::Node node) { sanitizingPrefixEdge(node, _) } |
| 34 | + predicate isBarrierOut(DataFlow::Node node) { sanitizingPrefixEdge(node, _) } |
38 | 35 |
|
39 |
| - override predicate isAdditionalTaintStep(DataFlow::Node pred, DataFlow::Node succ) { |
| 36 | + predicate isAdditionalFlowStep(DataFlow::Node pred, DataFlow::Node succ) { |
40 | 37 | isAdditionalRequestForgeryStep(pred, succ)
|
41 | 38 | }
|
42 | 39 | }
|
43 | 40 |
|
| 41 | + module ConfigFlow = TaintTracking::Global<Config>; |
| 42 | + |
44 | 43 | class BrowserStep extends DataFlow::SharedFlowStep {
|
45 | 44 | override predicate step(DataFlow::Node pred, DataFlow::Node succ) {
|
46 | 45 | (exists (DataFlow::ParameterNode p |
|
|
0 commit comments