Skip to content

Commit 257a1b0

Browse files
committed
Rust: Refactor sources, sinks into an extensions source file.
1 parent eadf922 commit 257a1b0

File tree

3 files changed

+64
-8
lines changed

3 files changed

+64
-8
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/**
2+
* Provides classes and predicates for reasoning about insecure cookie
3+
* vulnerabilities.
4+
*/
5+
6+
import rust
7+
private import codeql.rust.dataflow.DataFlow
8+
private import codeql.rust.dataflow.FlowSource
9+
private import codeql.rust.dataflow.FlowSink
10+
private import codeql.rust.Concepts
11+
private import codeql.rust.dataflow.internal.DataFlowImpl as DataflowImpl
12+
private import codeql.rust.dataflow.internal.Node
13+
14+
/**
15+
* Provides default sources, sinks and barriers for detecting insecure
16+
* cookie vulnerabilities, as well as extension points for adding your own.
17+
*/
18+
module InsecureCookie {
19+
/**
20+
* A data flow source for insecure cookie vulnerabilities.
21+
*/
22+
abstract class Source extends DataFlow::Node { }
23+
24+
/**
25+
* A data flow sink for insecure cookie vulnerabilities.
26+
*/
27+
abstract class Sink extends QuerySink::Range {
28+
override string getSinkType() { result = "InsecureCookie" }
29+
}
30+
31+
/**
32+
* A barrier for insecure cookie vulnerabilities.
33+
*/
34+
abstract class Barrier extends DataFlow::Node { }
35+
36+
/**
37+
* A source for insecure cookie vulnerabilities from model data.
38+
*/
39+
private class ModelsAsDataSource extends Source {
40+
ModelsAsDataSource() { sourceNode(this, "cookie-create") }
41+
}
42+
43+
/**
44+
* A sink for insecure cookie vulnerabilities from model data.
45+
*/
46+
private class ModelsAsDataSink extends Sink {
47+
ModelsAsDataSink() { sinkNode(this, "cookie-use") }
48+
}
49+
}

rust/ql/src/queries/security/CWE-614/InsecureCookie.ql

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,27 @@
1616
import rust
1717
import codeql.rust.dataflow.DataFlow
1818
import codeql.rust.dataflow.TaintTracking
19-
import codeql.rust.dataflow.FlowSource
20-
import codeql.rust.dataflow.FlowSink
19+
import codeql.rust.security.InsecureCookieExtensions
2120

2221
/**
2322
* A data flow configuration for tracking values representing cookies without the
24-
* 'secure' flag set.
23+
* 'secure' attribute set.
2524
*/
2625
module InsecureCookieConfig implements DataFlow::ConfigSig {
26+
import InsecureCookie
27+
2728
predicate isSource(DataFlow::Node node) {
2829
// creation of a cookie or cookie configuration with default, insecure settings
29-
sourceNode(node, "cookie-create")
30+
node instanceof Source
3031
}
3132

3233
predicate isSink(DataFlow::Node node) {
3334
// use of a cookie or cookie configuration
34-
sinkNode(node, "cookie-use")
35+
node instanceof Sink
36+
}
37+
38+
predicate isBarrier(DataFlow::Node node) {
39+
node instanceof Barrier
3540
}
3641

3742
predicate observeDiffInformedIncrementalMode() { any() }
@@ -42,5 +47,6 @@ module InsecureCookieFlow = TaintTracking::Global<InsecureCookieConfig>;
4247
import InsecureCookieFlow::PathGraph
4348

4449
from InsecureCookieFlow::PathNode sourceNode, InsecureCookieFlow::PathNode sinkNode
45-
where InsecureCookieFlow::flowPath(sourceNode, sinkNode)
50+
where
51+
InsecureCookieFlow::flowPath(sourceNode, sinkNode)
4652
select sinkNode.getNode(), sourceNode, sinkNode, "Cookie attribute 'Secure' is not set to true."

rust/ql/src/queries/summary/Stats.qll

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,14 @@ private import codeql.rust.security.AccessInvalidPointerExtensions
2222
private import codeql.rust.security.CleartextLoggingExtensions
2323
private import codeql.rust.security.CleartextStorageDatabaseExtensions
2424
private import codeql.rust.security.CleartextTransmissionExtensions
25-
private import codeql.rust.security.RequestForgeryExtensions
25+
private import codeql.rust.security.HardcodedCryptographicValueExtensions
26+
private import codeql.rust.security.InsecureCookieExtensions
2627
private import codeql.rust.security.LogInjectionExtensions
28+
private import codeql.rust.security.RequestForgeryExtensions
2729
private import codeql.rust.security.SqlInjectionExtensions
2830
private import codeql.rust.security.TaintedPathExtensions
2931
private import codeql.rust.security.UncontrolledAllocationSizeExtensions
3032
private import codeql.rust.security.WeakSensitiveDataHashingExtensions
31-
private import codeql.rust.security.HardcodedCryptographicValueExtensions
3233

3334
/**
3435
* Gets a count of the total number of lines of code in the database.

0 commit comments

Comments
 (0)