|
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