Skip to content

Commit 701d39d

Browse files
Jami CogswellJami Cogswell
Jami Cogswell
authored and
Jami Cogswell
committed
Convert BrowserExtensionCodeInjection.ql to use the new dataflow API
1 parent 356f4b7 commit 701d39d

File tree

2 files changed

+11
-12
lines changed

2 files changed

+11
-12
lines changed

javascript/lib/browserextension/CodeInjectionQuery.qll

+8-9
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,29 @@
1717
/**
1818
* A taint-tracking configuration for reasoning about code injection vulnerabilities.
1919
*/
20-
class Configuration extends TaintTracking::Configuration {
21-
Configuration() { this = "CodeInjection" }
20+
module Config implements DataFlow::ConfigSig {
21+
predicate isSource(DataFlow::Node source) { source instanceof XssThroughDom::Source}
2222

23-
override predicate isSource(DataFlow::Node source) { source instanceof XssThroughDom::Source}
2423

2524

25+
predicate isSink(DataFlow::Node sink) { sink instanceof Sink}
2626

27-
override predicate isSink(DataFlow::Node sink) { sink instanceof Sink}
28-
29-
override predicate isSanitizer(DataFlow::Node node) {
30-
super.isSanitizer(node) or
27+
predicate isBarrier(DataFlow::Node node) {
3128
node instanceof Sanitizer
3229
}
3330

34-
override predicate isAdditionalTaintStep(DataFlow::Node src, DataFlow::Node trg) {
31+
predicate isAdditionalFlowStep(DataFlow::Node src, DataFlow::Node trg) {
3532
// HTML sanitizers are insufficient protection against code injection
3633
src = trg.(HtmlSanitizerCall).getInput()
3734
}
3835

39-
override predicate isAdditionalLoadStep(DataFlow::Node pred, DataFlow::Node succ, string prop) {
36+
additional predicate isAdditionalLoadStep(DataFlow::Node pred, DataFlow::Node succ, string prop) {
4037
exists(ExecuteScript ess | ess = pred and ess = succ and prop = ["file", "code"])
4138
}
4239
}
4340

41+
module ConfigFlow = TaintTracking::Global<Config>;
42+
4443
//Browser Extension Models
4544
class ExecuteScriptSink extends Sink instanceof ExecuteScript{}
4645
class ExternalConnect1 extends Source instanceof OnConnectExternal{}

javascript/src/audit/CWE-094/BrowserExtensionCodeInjection.ql

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616

1717
import javascript
1818
import browserextension.CodeInjectionQuery
19-
import DataFlow::PathGraph
19+
import ConfigFlow::PathGraph
2020

21-
from Configuration cfg, DataFlow::PathNode source, DataFlow::PathNode sink
22-
where cfg.hasFlowPath(source, sink)
21+
from ConfigFlow::PathNode source, ConfigFlow::PathNode sink
22+
where ConfigFlow::flowPath(source, sink)
2323
select sink.getNode(), source, sink, sink.getNode().(Sink).getMessagePrefix() + " depends on a $@.",
2424
source.getNode(), "user-provided value"

0 commit comments

Comments
 (0)