File tree Expand file tree Collapse file tree 2 files changed +45
-2
lines changed
swift/ql/lib/codeql/swift/security Expand file tree Collapse file tree 2 files changed +45
-2
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * Provides classes and predicates for reasoning about uncontrolled
3+ * format string vulnerabilities.
4+ */
5+
6+ import swift
7+ import codeql.swift.StringFormat
8+ import codeql.swift.dataflow.DataFlow
9+ import codeql.swift.dataflow.TaintTracking
10+
11+ /**
12+ * A dataflow sink for uncontrolled format string vulnerabilities.
13+ */
14+ abstract class UncontrolledFormatStringSink extends DataFlow:: Node { }
15+
16+ /**
17+ * A sanitizer for uncontrolled format string vulnerabilities.
18+ */
19+ abstract class UncontrolledFormatStringSanitizer extends DataFlow:: Node { }
20+
21+ /**
22+ * A unit class for adding additional taint steps.
23+ */
24+ class UncontrolledFormatStringAdditionalTaintStep extends Unit {
25+ abstract predicate step ( DataFlow:: Node nodeFrom , DataFlow:: Node nodeTo ) ;
26+ }
27+
28+ /**
29+ * A default uncontrolled format string sink, that is, the format argument to
30+ * a `FormattingFunctionCall`.
31+ */
32+ private class DefaultUncontrolledFormatStringSink extends UncontrolledFormatStringSink {
33+ DefaultUncontrolledFormatStringSink ( ) {
34+ this .asExpr ( ) = any ( FormattingFunctionCall fc ) .getFormat ( )
35+ }
36+ }
Original file line number Diff line number Diff line change @@ -8,6 +8,7 @@ import codeql.swift.StringFormat
88import codeql.swift.dataflow.DataFlow
99import codeql.swift.dataflow.TaintTracking
1010import codeql.swift.dataflow.FlowSources
11+ import codeql.swift.security.UncontrolledFormatStringExtensions
1112
1213/**
1314 * A taint configuration for tainted data that reaches a format string.
@@ -17,7 +18,13 @@ class TaintedFormatConfiguration extends TaintTracking::Configuration {
1718
1819 override predicate isSource ( DataFlow:: Node node ) { node instanceof FlowSource }
1920
20- override predicate isSink ( DataFlow:: Node node ) {
21- node .asExpr ( ) = any ( FormattingFunctionCall fc ) .getFormat ( )
21+ override predicate isSink ( DataFlow:: Node node ) { node instanceof UncontrolledFormatStringSink }
22+
23+ override predicate isSanitizer ( DataFlow:: Node sanitizer ) {
24+ sanitizer instanceof UncontrolledFormatStringSanitizer
25+ }
26+
27+ override predicate isAdditionalTaintStep ( DataFlow:: Node nodeFrom , DataFlow:: Node nodeTo ) {
28+ any ( UncontrolledFormatStringAdditionalTaintStep s ) .step ( nodeFrom , nodeTo )
2229 }
2330}
You can’t perform that action at this time.
0 commit comments