Skip to content

Commit 65ac8be

Browse files
committed
Java: Add defaultImplicitTaintRead and sync.
1 parent 38319a4 commit 65ac8be

File tree

21 files changed

+135
-0
lines changed

21 files changed

+135
-0
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ predicate defaultAdditionalTaintStep(DataFlow::Node src, DataFlow::Node sink) {
3434
localAdditionalTaintStep(src, sink)
3535
}
3636

37+
/**
38+
* Holds if default `TaintTracking::Configuration`s should allow implicit reads
39+
* of `c` at sinks and inputs to additional taint steps.
40+
*/
41+
bindingset[node]
42+
predicate defaultImplicitTaintRead(DataFlow::Node node, DataFlow::Content c) { none() }
43+
3744
/**
3845
* Holds if `node` should be a sanitizer in all global taint flow configurations
3946
* but not in local taint.

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@ abstract class Configuration extends DataFlow::Configuration {
105105
defaultAdditionalTaintStep(node1, node2)
106106
}
107107

108+
override predicate allowImplicitRead(DataFlow::Node node, DataFlow::Content c) {
109+
(this.isSink(node) or this.isAdditionalTaintStep(node, _)) and
110+
defaultImplicitTaintRead(node, c)
111+
}
112+
108113
/**
109114
* Holds if taint may flow from `source` to `sink` for this configuration.
110115
*/

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@ abstract class Configuration extends DataFlow::Configuration {
105105
defaultAdditionalTaintStep(node1, node2)
106106
}
107107

108+
override predicate allowImplicitRead(DataFlow::Node node, DataFlow::Content c) {
109+
(this.isSink(node) or this.isAdditionalTaintStep(node, _)) and
110+
defaultImplicitTaintRead(node, c)
111+
}
112+
108113
/**
109114
* Holds if taint may flow from `source` to `sink` for this configuration.
110115
*/

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,13 @@ predicate defaultAdditionalTaintStep(DataFlow::Node src, DataFlow::Node sink) {
151151
localAdditionalTaintStep(src, sink)
152152
}
153153

154+
/**
155+
* Holds if default `TaintTracking::Configuration`s should allow implicit reads
156+
* of `c` at sinks and inputs to additional taint steps.
157+
*/
158+
bindingset[node]
159+
predicate defaultImplicitTaintRead(DataFlow::Node node, DataFlow::Content c) { none() }
160+
154161
/**
155162
* Holds if `node` should be a sanitizer in all global taint flow configurations
156163
* but not in local taint.

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@ abstract class Configuration extends DataFlow::Configuration {
105105
defaultAdditionalTaintStep(node1, node2)
106106
}
107107

108+
override predicate allowImplicitRead(DataFlow::Node node, DataFlow::Content c) {
109+
(this.isSink(node) or this.isAdditionalTaintStep(node, _)) and
110+
defaultImplicitTaintRead(node, c)
111+
}
112+
108113
/**
109114
* Holds if taint may flow from `source` to `sink` for this configuration.
110115
*/

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@ abstract class Configuration extends DataFlow::Configuration {
105105
defaultAdditionalTaintStep(node1, node2)
106106
}
107107

108+
override predicate allowImplicitRead(DataFlow::Node node, DataFlow::Content c) {
109+
(this.isSink(node) or this.isAdditionalTaintStep(node, _)) and
110+
defaultImplicitTaintRead(node, c)
111+
}
112+
108113
/**
109114
* Holds if taint may flow from `source` to `sink` for this configuration.
110115
*/

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@ abstract class Configuration extends DataFlow::Configuration {
105105
defaultAdditionalTaintStep(node1, node2)
106106
}
107107

108+
override predicate allowImplicitRead(DataFlow::Node node, DataFlow::Content c) {
109+
(this.isSink(node) or this.isAdditionalTaintStep(node, _)) and
110+
defaultImplicitTaintRead(node, c)
111+
}
112+
108113
/**
109114
* Holds if taint may flow from `source` to `sink` for this configuration.
110115
*/

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

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

21+
/**
22+
* Holds if default `TaintTracking::Configuration`s should allow implicit reads
23+
* of `c` at sinks and inputs to additional taint steps.
24+
*/
25+
bindingset[node]
26+
predicate defaultImplicitTaintRead(DataFlow::Node node, DataFlow::Content c) { none() }
27+
2128
deprecated predicate localAdditionalTaintStep = defaultAdditionalTaintStep/2;
2229

2330
private CIL::DataFlowNode asCilDataFlowNode(DataFlow::Node node) {

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@ abstract class Configuration extends DataFlow::Configuration {
105105
defaultAdditionalTaintStep(node1, node2)
106106
}
107107

108+
override predicate allowImplicitRead(DataFlow::Node node, DataFlow::Content c) {
109+
(this.isSink(node) or this.isAdditionalTaintStep(node, _)) and
110+
defaultImplicitTaintRead(node, c)
111+
}
112+
108113
/**
109114
* Holds if taint may flow from `source` to `sink` for this configuration.
110115
*/

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@ abstract class Configuration extends DataFlow::Configuration {
105105
defaultAdditionalTaintStep(node1, node2)
106106
}
107107

108+
override predicate allowImplicitRead(DataFlow::Node node, DataFlow::Content c) {
109+
(this.isSink(node) or this.isAdditionalTaintStep(node, _)) and
110+
defaultImplicitTaintRead(node, c)
111+
}
112+
108113
/**
109114
* Holds if taint may flow from `source` to `sink` for this configuration.
110115
*/

0 commit comments

Comments
 (0)