@@ -16,7 +16,6 @@ import python
16
16
import semmle.python.dataflow.new.DataFlow
17
17
import semmle.python.ApiGraphs
18
18
import semmle.python.dataflow.new.TaintTracking
19
- import DataFlow:: PathGraph
20
19
21
20
class PredictableResultSource extends DataFlow:: Node {
22
21
PredictableResultSource ( ) {
@@ -40,14 +39,12 @@ class TokenAssignmentValueSink extends DataFlow::Node {
40
39
}
41
40
}
42
41
43
- class TokenBuiltFromUuidConfig extends TaintTracking :: Configuration {
44
- TokenBuiltFromUuidConfig ( ) { this = "TokenBuiltFromUuidConfig" }
42
+ private module TokenBuiltFromUUIDConfig implements DataFlow :: ConfigSig {
43
+ predicate isSource ( DataFlow :: Node source ) { source instanceof PredictableResultSource }
45
44
46
- override predicate isSource ( DataFlow:: Node source ) { source instanceof PredictableResultSource }
45
+ predicate isSink ( DataFlow:: Node sink ) { sink instanceof TokenAssignmentValueSink }
47
46
48
- override predicate isSink ( DataFlow:: Node sink ) { sink instanceof TokenAssignmentValueSink }
49
-
50
- override predicate isAdditionalTaintStep ( DataFlow:: Node nodeFrom , DataFlow:: Node nodeTo ) {
47
+ predicate isAdditionalFlowStep ( DataFlow:: Node nodeFrom , DataFlow:: Node nodeTo ) {
51
48
exists ( DataFlow:: CallCfgNode call |
52
49
call = API:: builtin ( "str" ) .getACall ( ) and
53
50
nodeFrom = call .getArg ( 0 ) and
@@ -56,6 +53,11 @@ class TokenBuiltFromUuidConfig extends TaintTracking::Configuration {
56
53
}
57
54
}
58
55
59
- from DataFlow:: PathNode source , DataFlow:: PathNode sink , TokenBuiltFromUuidConfig config
60
- where config .hasFlowPath ( source , sink )
56
+ /** Global taint-tracking for detecting "TokenBuiltFromUUID" vulnerabilities. */
57
+ module TokenBuiltFromUUIDFlow = TaintTracking:: Global< TokenBuiltFromUUIDConfig > ;
58
+
59
+ import TokenBuiltFromUUIDFlow:: PathGraph
60
+
61
+ from TokenBuiltFromUUIDFlow:: PathNode source , TokenBuiltFromUUIDFlow:: PathNode sink
62
+ where TokenBuiltFromUUIDFlow:: flowPath ( source , sink )
61
63
select sink .getNode ( ) , source , sink , "Token built from $@." , source .getNode ( ) , "predictable value"
0 commit comments