@@ -16,7 +16,6 @@ import codeql.ruby.ApiGraphs
16
16
import codeql.ruby.DataFlow
17
17
import codeql.ruby.dataflow.RemoteFlowSources
18
18
import codeql.ruby.TaintTracking
19
- import DataFlow:: PathGraph
20
19
21
20
class DecompressionApiUse extends DataFlow:: Node {
22
21
private DataFlow:: CallNode call ;
@@ -34,18 +33,20 @@ class DecompressionApiUse extends DataFlow::Node {
34
33
DataFlow:: CallNode getCall ( ) { result = call }
35
34
}
36
35
37
- class Configuration extends TaintTracking:: Configuration {
38
- Configuration ( ) { this = "DecompressionApiUse" }
39
-
36
+ private module DecompressionApiConfig implements DataFlow:: ConfigSig {
40
37
// this predicate will be used to constrain our query to find instances where only remote user-controlled data flows to the sink
41
- override predicate isSource ( DataFlow:: Node source ) { source instanceof RemoteFlowSource }
38
+ predicate isSource ( DataFlow:: Node source ) { source instanceof RemoteFlowSource }
42
39
43
40
// our Decompression APIs defined above will be the sinks we use for this query
44
- override predicate isSink ( DataFlow:: Node sink ) { sink instanceof DecompressionApiUse }
41
+ predicate isSink ( DataFlow:: Node sink ) { sink instanceof DecompressionApiUse }
45
42
}
46
43
47
- from Configuration config , DataFlow:: PathNode source , DataFlow:: PathNode sink
48
- where config .hasFlowPath ( source , sink )
44
+ private module DecompressionApiFlow = TaintTracking:: Global< DecompressionApiConfig > ;
45
+
46
+ private import DecompressionApiFlow:: PathGraph
47
+
48
+ from DecompressionApiFlow:: PathNode source , DecompressionApiFlow:: PathNode sink
49
+ where DecompressionApiFlow:: flowPath ( source , sink )
49
50
select sink .getNode ( ) .( DecompressionApiUse ) , source , sink ,
50
51
"This call to $@ is unsafe because user-controlled data is used to set the object being decompressed, which could lead to a denial of service attack or malicious code extracted from an unknown source." ,
51
52
sink .getNode ( ) .( DecompressionApiUse ) .getCall ( ) ,
0 commit comments