|
14 | 14 | import swift |
15 | 15 | import codeql.swift.dataflow.DataFlow |
16 | 16 | import codeql.swift.dataflow.TaintTracking |
17 | | -import DataFlow::PathGraph |
| 17 | +import StaticInitializationVectorFlow::PathGraph |
18 | 18 |
|
19 | 19 | /** |
20 | 20 | * A static IV is created through either a byte array or string literals. |
@@ -56,23 +56,21 @@ class EncryptionInitializationSink extends Expr { |
56 | 56 | * A dataflow configuration from the source of a static IV to expressions that use |
57 | 57 | * it to initialize a cipher. |
58 | 58 | */ |
59 | | -class StaticInitializationVectorConfig extends TaintTracking::Configuration { |
60 | | - StaticInitializationVectorConfig() { this = "StaticInitializationVectorConfig" } |
61 | | - |
62 | | - override predicate isSource(DataFlow::Node node) { |
| 59 | +module StaticInitializationVectorConfig implements DataFlow::ConfigSig { |
| 60 | + predicate isSource(DataFlow::Node node) { |
63 | 61 | node.asExpr() instanceof StaticInitializationVectorSource |
64 | 62 | } |
65 | 63 |
|
66 | | - override predicate isSink(DataFlow::Node node) { |
67 | | - node.asExpr() instanceof EncryptionInitializationSink |
68 | | - } |
| 64 | + predicate isSink(DataFlow::Node node) { node.asExpr() instanceof EncryptionInitializationSink } |
69 | 65 | } |
70 | 66 |
|
| 67 | +module StaticInitializationVectorFlow = TaintTracking::Global<StaticInitializationVectorConfig>; |
| 68 | + |
71 | 69 | // The query itself |
72 | 70 | from |
73 | | - StaticInitializationVectorConfig config, DataFlow::PathNode sourceNode, |
74 | | - DataFlow::PathNode sinkNode |
75 | | -where config.hasFlowPath(sourceNode, sinkNode) |
| 71 | + StaticInitializationVectorFlow::PathNode sourceNode, |
| 72 | + StaticInitializationVectorFlow::PathNode sinkNode |
| 73 | +where StaticInitializationVectorFlow::flowPath(sourceNode, sinkNode) |
76 | 74 | select sinkNode.getNode(), sourceNode, sinkNode, |
77 | 75 | "The static value '" + sourceNode.getNode().toString() + |
78 | 76 | "' is used as an initialization vector for encryption." |
0 commit comments