Skip to content

Commit db641e5

Browse files
committed
Swift: Rewrite UncontrolledFormatString to use DataFlow::ConfigSig
1 parent 0ff607c commit db641e5

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

swift/ql/lib/codeql/swift/security/UncontrolledFormatStringQuery.qll

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import codeql.swift.security.UncontrolledFormatStringExtensions
1313
/**
1414
* A taint configuration for tainted data that reaches a format string.
1515
*/
16-
class TaintedFormatConfiguration extends TaintTracking::Configuration {
16+
deprecated class TaintedFormatConfiguration extends TaintTracking::Configuration {
1717
TaintedFormatConfiguration() { this = "TaintedFormatConfiguration" }
1818

1919
override predicate isSource(DataFlow::Node node) { node instanceof FlowSource }
@@ -28,3 +28,25 @@ class TaintedFormatConfiguration extends TaintTracking::Configuration {
2828
any(UncontrolledFormatStringAdditionalTaintStep s).step(nodeFrom, nodeTo)
2929
}
3030
}
31+
32+
/**
33+
* A taint configuration for tainted data that reaches a format string.
34+
*/
35+
module TaintedFormatConfig implements DataFlow::ConfigSig {
36+
predicate isSource(DataFlow::Node node) { node instanceof FlowSource }
37+
38+
predicate isSink(DataFlow::Node node) { node instanceof UncontrolledFormatStringSink }
39+
40+
predicate isBarrier(DataFlow::Node sanitizer) {
41+
sanitizer instanceof UncontrolledFormatStringSanitizer
42+
}
43+
44+
predicate isAdditionalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) {
45+
any(UncontrolledFormatStringAdditionalTaintStep s).step(nodeFrom, nodeTo)
46+
}
47+
}
48+
49+
/**
50+
* Detect taint flow of tainted data that reaches a format string.
51+
*/
52+
module TaintedFormatFlow = TaintTracking::Global<TaintedFormatConfig>;

swift/ql/src/queries/Security/CWE-134/UncontrolledFormatString.ql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
import swift
1414
import codeql.swift.dataflow.DataFlow
1515
import codeql.swift.security.UncontrolledFormatStringQuery
16-
import DataFlow::PathGraph
16+
import TaintedFormatFlow::PathGraph
1717

18-
from TaintedFormatConfiguration config, DataFlow::PathNode sourceNode, DataFlow::PathNode sinkNode
19-
where config.hasFlowPath(sourceNode, sinkNode)
18+
from TaintedFormatFlow::PathNode sourceNode, TaintedFormatFlow::PathNode sinkNode
19+
where TaintedFormatFlow::flowPath(sourceNode, sinkNode)
2020
select sinkNode.getNode(), sourceNode, sinkNode, "This format string depends on $@.",
2121
sourceNode.getNode(), "this user-provided value"

0 commit comments

Comments
 (0)