Skip to content

Commit 9183ed5

Browse files
committed
Rust: Have CleartextTransmissionSink extend QuerySink::Range.
1 parent 97d3da0 commit 9183ed5

File tree

4 files changed

+36
-29
lines changed

4 files changed

+36
-29
lines changed

rust/ql/lib/codeql/rust/security/CleartextLoggingExtensions.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ module CleartextLogging {
3737
private class SensitiveDataAsSource extends Source instanceof SensitiveData { }
3838

3939
/** A sink for logging from model data. */
40-
private class ModelsAsDataSinks extends Sink {
41-
ModelsAsDataSinks() { exists(string s | sinkNode(this, s) and s.matches("log-injection%")) }
40+
private class ModelsAsDataSink extends Sink {
41+
ModelsAsDataSink() { exists(string s | sinkNode(this, s) and s.matches("log-injection%")) }
4242
}
4343
}

rust/ql/lib/codeql/rust/security/CleartextTransmissionExtensions.qll

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,32 +10,39 @@ private import codeql.rust.dataflow.DataFlow
1010
private import codeql.rust.dataflow.FlowSink
1111

1212
/**
13-
* A data flow sink for cleartext transmission vulnerabilities. That is,
14-
* a `DataFlow::Node` of something that is transmitted over a network.
13+
* Provides default sources, sinks and barriers for detecting cleartext
14+
* transmission vulnerabilities, as well as extension points for adding your
15+
* own.
1516
*/
16-
abstract class CleartextTransmissionSink extends QuerySink::Range {
17-
override string getSinkType() { result = "CleartextTransmission" }
18-
}
17+
module CleartextTransmission {
18+
/**
19+
* A data flow sink for cleartext transmission vulnerabilities. That is,
20+
* a `DataFlow::Node` of something that is transmitted over a network.
21+
*/
22+
abstract class Sink extends QuerySink::Range {
23+
override string getSinkType() { result = "CleartextTransmission" }
24+
}
1925

20-
/**
21-
* A barrier for cleartext transmission vulnerabilities.
22-
*/
23-
abstract class CleartextTransmissionBarrier extends DataFlow::Node { }
26+
/**
27+
* A barrier for cleartext transmission vulnerabilities.
28+
*/
29+
abstract class Barrier extends DataFlow::Node { }
2430

25-
/**
26-
* A unit class for adding additional flow steps.
27-
*/
28-
class CleartextTransmissionAdditionalFlowStep extends Unit {
2931
/**
30-
* Holds if the step from `node1` to `node2` should be considered a flow
31-
* step for paths related to cleartext transmission vulnerabilities.
32+
* A unit class for adding additional flow steps.
3233
*/
33-
abstract predicate step(DataFlow::Node nodeFrom, DataFlow::Node nodeTo);
34-
}
34+
class AdditionalFlowStep extends Unit {
35+
/**
36+
* Holds if the step from `node1` to `node2` should be considered a flow
37+
* step for paths related to cleartext transmission vulnerabilities.
38+
*/
39+
abstract predicate step(DataFlow::Node nodeFrom, DataFlow::Node nodeTo);
40+
}
3541

36-
/**
37-
* A sink defined through MaD.
38-
*/
39-
private class MadCleartextTransmissionSink extends CleartextTransmissionSink {
40-
MadCleartextTransmissionSink() { sinkNode(this, "transmission") }
42+
/**
43+
* A sink defined through MaD.
44+
*/
45+
private class ModelsAsDataSink extends Sink {
46+
ModelsAsDataSink() { sinkNode(this, "transmission") }
47+
}
4148
}

rust/ql/lib/codeql/rust/security/SqlInjectionExtensions.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ module SqlInjection {
5252
}
5353

5454
/** A sink for sql-injection from model data. */
55-
private class ModelsAsDataSinks extends Sink {
56-
ModelsAsDataSinks() { sinkNode(this, "sql-injection") }
55+
private class ModelsAsDataSink extends Sink {
56+
ModelsAsDataSink() { sinkNode(this, "sql-injection") }
5757
}
5858
}

rust/ql/src/queries/security/CWE-311/CleartextTransmission.ql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ import codeql.rust.security.CleartextTransmissionExtensions
2424
module CleartextTransmissionConfig implements DataFlow::ConfigSig {
2525
predicate isSource(DataFlow::Node node) { node instanceof SensitiveData }
2626

27-
predicate isSink(DataFlow::Node node) { node instanceof CleartextTransmissionSink }
27+
predicate isSink(DataFlow::Node node) { node instanceof CleartextTransmission::Sink }
2828

29-
predicate isBarrier(DataFlow::Node barrier) { barrier instanceof CleartextTransmissionBarrier }
29+
predicate isBarrier(DataFlow::Node barrier) { barrier instanceof CleartextTransmission::Barrier }
3030

3131
predicate isAdditionalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) {
32-
any(CleartextTransmissionAdditionalFlowStep s).step(nodeFrom, nodeTo)
32+
any(CleartextTransmission::AdditionalFlowStep s).step(nodeFrom, nodeTo)
3333
}
3434

3535
predicate isBarrierIn(DataFlow::Node node) {

0 commit comments

Comments
 (0)