Skip to content

Commit c44cf29

Browse files
authored
Merge pull request #7587 from owen-mc/add-default-taint-sanitizer-guard
Dataflow: Add default taint sanitizer guard
2 parents 61490e7 + 7e42ccf commit c44cf29

File tree

23 files changed

+53
-17
lines changed

23 files changed

+53
-17
lines changed

cpp/ql/lib/semmle/code/cpp/dataflow/internal/TaintTrackingUtil.qll

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@ predicate defaultImplicitTaintRead(DataFlow::Node node, DataFlow::Content c) { n
4747
*/
4848
predicate defaultTaintSanitizer(DataFlow::Node node) { none() }
4949

50+
/**
51+
* Holds if `guard` should be a sanitizer guard in all global taint flow configurations
52+
* but not in local taint.
53+
*/
54+
predicate defaultTaintSanitizerGuard(DataFlow::BarrierGuard guard) { none() }
55+
5056
/**
5157
* Holds if taint can flow in one local step from `nodeFrom` to `nodeTo` excluding
5258
* local data flow steps. That is, `nodeFrom` and `nodeTo` are likely to represent

cpp/ql/lib/semmle/code/cpp/dataflow/internal/tainttracking1/TaintTrackingImpl.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ abstract class Configuration extends DataFlow::Configuration {
9393
predicate isSanitizerGuard(DataFlow::BarrierGuard guard) { none() }
9494

9595
final override predicate isBarrierGuard(DataFlow::BarrierGuard guard) {
96-
this.isSanitizerGuard(guard)
96+
this.isSanitizerGuard(guard) or defaultTaintSanitizerGuard(guard)
9797
}
9898

9999
/**

cpp/ql/lib/semmle/code/cpp/dataflow/internal/tainttracking2/TaintTrackingImpl.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ abstract class Configuration extends DataFlow::Configuration {
9393
predicate isSanitizerGuard(DataFlow::BarrierGuard guard) { none() }
9494

9595
final override predicate isBarrierGuard(DataFlow::BarrierGuard guard) {
96-
this.isSanitizerGuard(guard)
96+
this.isSanitizerGuard(guard) or defaultTaintSanitizerGuard(guard)
9797
}
9898

9999
/**

cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingUtil.qll

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,12 @@ predicate defaultImplicitTaintRead(DataFlow::Node node, DataFlow::Content c) { n
160160
*/
161161
predicate defaultTaintSanitizer(DataFlow::Node node) { none() }
162162

163+
/**
164+
* Holds if `guard` should be a sanitizer guard in all global taint flow configurations
165+
* but not in local taint.
166+
*/
167+
predicate defaultTaintSanitizerGuard(DataFlow::BarrierGuard guard) { none() }
168+
163169
/**
164170
* Holds if taint can flow from `instrIn` to `instrOut` through a call to a
165171
* modeled function.

cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/tainttracking1/TaintTrackingImpl.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ abstract class Configuration extends DataFlow::Configuration {
9393
predicate isSanitizerGuard(DataFlow::BarrierGuard guard) { none() }
9494

9595
final override predicate isBarrierGuard(DataFlow::BarrierGuard guard) {
96-
this.isSanitizerGuard(guard)
96+
this.isSanitizerGuard(guard) or defaultTaintSanitizerGuard(guard)
9797
}
9898

9999
/**

cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/tainttracking2/TaintTrackingImpl.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ abstract class Configuration extends DataFlow::Configuration {
9393
predicate isSanitizerGuard(DataFlow::BarrierGuard guard) { none() }
9494

9595
final override predicate isBarrierGuard(DataFlow::BarrierGuard guard) {
96-
this.isSanitizerGuard(guard)
96+
this.isSanitizerGuard(guard) or defaultTaintSanitizerGuard(guard)
9797
}
9898

9999
/**

cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/tainttracking3/TaintTrackingImpl.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ abstract class Configuration extends DataFlow::Configuration {
9393
predicate isSanitizerGuard(DataFlow::BarrierGuard guard) { none() }
9494

9595
final override predicate isBarrierGuard(DataFlow::BarrierGuard guard) {
96-
this.isSanitizerGuard(guard)
96+
this.isSanitizerGuard(guard) or defaultTaintSanitizerGuard(guard)
9797
}
9898

9999
/**

csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ private import semmle.code.csharp.frameworks.WCF
1818
*/
1919
predicate defaultTaintSanitizer(DataFlow::Node node) { none() }
2020

21+
/**
22+
* Holds if `guard` should be a sanitizer guard in all global taint flow configurations
23+
* but not in local taint.
24+
*/
25+
predicate defaultTaintSanitizerGuard(DataFlow::BarrierGuard guard) { none() }
26+
2127
/**
2228
* Holds if default `TaintTracking::Configuration`s should allow implicit reads
2329
* of `c` at sinks and inputs to additional taint steps.

csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking1/TaintTrackingImpl.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ abstract class Configuration extends DataFlow::Configuration {
9393
predicate isSanitizerGuard(DataFlow::BarrierGuard guard) { none() }
9494

9595
final override predicate isBarrierGuard(DataFlow::BarrierGuard guard) {
96-
this.isSanitizerGuard(guard)
96+
this.isSanitizerGuard(guard) or defaultTaintSanitizerGuard(guard)
9797
}
9898

9999
/**

csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking2/TaintTrackingImpl.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ abstract class Configuration extends DataFlow::Configuration {
9393
predicate isSanitizerGuard(DataFlow::BarrierGuard guard) { none() }
9494

9595
final override predicate isBarrierGuard(DataFlow::BarrierGuard guard) {
96-
this.isSanitizerGuard(guard)
96+
this.isSanitizerGuard(guard) or defaultTaintSanitizerGuard(guard)
9797
}
9898

9999
/**

0 commit comments

Comments
 (0)