1111
1212
1313 import javascript
14- import DataFlow :: PathGraph
14+ import ConfigFlow :: PathGraph
1515 import DataFlow
1616 import browserextension.BrowserInjectionFieldCustomizations:: BrowserInjection
1717 private import semmle.javascript.security.dataflow.XssThroughDomCustomizations:: XssThroughDom as XssThroughDom
18-
18+
1919 //private import semmle.javascript.security.dataflow.DomBasedXssCustomizations
2020 //private import semmle.javascript.security.dataflow.XssThroughDomCustomizations::XssThroughDom as XssThroughDom
21-
21+
2222 //private import semmle.javascript.security.dataflow.CodeInjectionCustomizations
23-
24- class Configuration extends TaintTracking:: Configuration {
25- Configuration ( ) { this = "BrowserInjection" }
26-
27- override predicate isSource ( DataFlow:: Node source ) {
23+
24+ module Config implements DataFlow:: ConfigSig {
25+
26+ predicate isSource ( DataFlow:: Node source ) {
2827 source instanceof Source
2928 }
30-
31- override predicate isSink ( DataFlow:: Node sink ) {
29+
30+ predicate isSink ( DataFlow:: Node sink ) {
3231 sink instanceof Sink
3332 }
34-
35- override predicate isAdditionalLoadStep ( DataFlow:: Node pred , DataFlow:: Node succ , string prop ) {
36- ( pred = succ ) and
33+
34+ additional predicate isAdditionalLoadStep ( DataFlow:: Node pred , DataFlow:: Node succ , string prop ) {
35+ ( pred = succ ) and
3736 ( ( pred instanceof Update and prop = [ "url" , "openerTabId" ] )
3837 or
3938 ( pred instanceof DownloadsDangerous and prop = [ "body" , "conflictAction" , "filename" , "url" , "method" ] )
4039 or
4140 ( pred instanceof Delete and prop = [ "startTime" , "endTime" , "url" ] )
4241 //or
4342 //(pred instanceof SetContentSettings and succ instanceof SetContentSettings and prop = any(string s))
44- //or
43+ //or
4544 //(pred instanceof GetContentSettings and succ instanceof GetContentSettings and prop = any(string s))
4645 //(pred instanceof StorageSet and succ instanceof StorageSet and prop = any(string s))
4746 //or
5857 ( pred = succ and pred instanceof CreateWindows and prop = [ "url" ] ) )
5958 }
6059 }
61-
62-
63- from Configuration cfg , DataFlow:: PathNode source , DataFlow:: PathNode sink
64- where cfg .hasFlowPath ( source , sink )
60+
61+ module ConfigFlow = TaintTracking:: Global< Config > ;
62+
63+
64+ from ConfigFlow:: PathNode source , ConfigFlow:: PathNode sink
65+ where ConfigFlow:: flowPath ( source , sink )
6566 select sink .getNode ( ) , source , sink , sink .getNode ( ) + " depends on a $@." ,
6667 source .getNode ( ) , "user-provided value"
67-
68-
0 commit comments