Skip to content

Commit 389630a

Browse files
authored
Merge branch 'main' into henrymercer/yaml-regression-test
2 parents c9fcdf3 + 6c52de9 commit 389630a

18 files changed

+138
-4
lines changed

csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNetCliInvoker.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,18 @@ internal interface IDotNetCliInvoker
1212

1313
/// <summary>
1414
/// A minimal environment for running the .NET CLI.
15-
///
15+
///
1616
/// DOTNET_CLI_UI_LANGUAGE: The .NET CLI language is set to English to avoid localized output.
1717
/// MSBUILDDISABLENODEREUSE: To ensure clean environment for each build.
1818
/// DOTNET_SKIP_FIRST_TIME_EXPERIENCE: To skip first time experience messages.
19+
/// DOTNET_CLI_TELEMETRY_OPTOUT: To skip any dotnet telemetry: it's unnecessary and can even cause issues.
1920
/// </summary>
2021
static ReadOnlyDictionary<string, string> MinimalEnvironment { get; } = new(new Dictionary<string, string>
2122
{
2223
{"DOTNET_CLI_UI_LANGUAGE", "en"},
2324
{"MSBUILDDISABLENODEREUSE", "1"},
24-
{"DOTNET_SKIP_FIRST_TIME_EXPERIENCE", "true"}
25+
{"DOTNET_SKIP_FIRST_TIME_EXPERIENCE", "true"},
26+
{"DOTNET_CLI_TELEMETRY_OPTOUT", "1"}
2527
});
2628

2729
/// <summary>

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import rust
77
private import codeql.rust.dataflow.DataFlow
8+
private import codeql.rust.dataflow.FlowBarrier
89
private import codeql.rust.dataflow.FlowSource
910
private import codeql.rust.dataflow.FlowSink
1011
private import codeql.rust.Concepts
@@ -69,6 +70,13 @@ module AccessInvalidPointer {
6970
ModelsAsDataSink() { sinkNode(this, "pointer-access") }
7071
}
7172

73+
/**
74+
* A barrier for invalid pointer access from model data.
75+
*/
76+
private class ModelsAsDataBarrier extends Barrier {
77+
ModelsAsDataBarrier() { barrierNode(this, "pointer-access") }
78+
}
79+
7280
/**
7381
* A barrier for invalid pointer access vulnerabilities for values checked to
7482
* be non-`null`.

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import rust
77
private import codeql.rust.dataflow.DataFlow
8+
private import codeql.rust.dataflow.FlowBarrier
89
private import codeql.rust.dataflow.FlowSink
910
private import codeql.rust.security.SensitiveData
1011
private import codeql.rust.Concepts
@@ -44,6 +45,13 @@ module CleartextLogging {
4445
ModelsAsDataSink() { sinkNode(this, "log-injection") }
4546
}
4647

48+
/**
49+
* A barrier for logging from model data.
50+
*/
51+
private class ModelsAsDataBarrier extends Barrier {
52+
ModelsAsDataBarrier() { barrierNode(this, "log-injection") }
53+
}
54+
4755
private class BooleanTypeBarrier extends Barrier instanceof Barriers::BooleanTypeBarrier { }
4856

4957
private class FieldlessEnumTypeBarrier extends Barrier instanceof Barriers::FieldlessEnumTypeBarrier

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,11 @@ module CleartextStorageDatabase {
4545
private class ModelsAsDataSink extends Sink {
4646
ModelsAsDataSink() { sinkNode(this, ["sql-injection", "database-store"]) }
4747
}
48+
49+
/**
50+
* A barrier for cleartext storage vulnerabilities from model data.
51+
*/
52+
private class ModelsAsDataBarrier extends Barrier {
53+
ModelsAsDataBarrier() { barrierNode(this, ["sql-injection", "database-store"]) }
54+
}
4855
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
private import codeql.util.Unit
77
private import rust
88
private import codeql.rust.dataflow.DataFlow
9+
private import codeql.rust.dataflow.FlowBarrier
910
private import codeql.rust.dataflow.FlowSink
1011
private import codeql.rust.security.SensitiveData
1112
private import codeql.rust.Concepts
@@ -55,4 +56,11 @@ module CleartextTransmission {
5556
private class ModelsAsDataSink extends Sink {
5657
ModelsAsDataSink() { sinkNode(this, ["transmission", "request-url"]) }
5758
}
59+
60+
/**
61+
* A barrier defined through MaD.
62+
*/
63+
private class ModelsAsDataBarrier extends Barrier {
64+
ModelsAsDataBarrier() { barrierNode(this, ["transmission", "request-url"]) }
65+
}
5866
}

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import rust
77
private import codeql.rust.dataflow.DataFlow
8+
private import codeql.rust.dataflow.FlowBarrier
89
private import codeql.rust.dataflow.FlowSink
910
private import codeql.rust.Concepts
1011
private import codeql.rust.dataflow.internal.Node as Node
@@ -21,6 +22,11 @@ module DisabledCertificateCheckExtensions {
2122
override string getSinkType() { result = "DisabledCertificateCheck" }
2223
}
2324

25+
/**
26+
* A data flow barrier for disabled certificate check vulnerabilities.
27+
*/
28+
abstract class Barrier extends DataFlow::Node { }
29+
2430
/**
2531
* A sink for disabled certificate check vulnerabilities from model data.
2632
*/
@@ -42,4 +48,11 @@ module DisabledCertificateCheckExtensions {
4248
)
4349
}
4450
}
51+
52+
/**
53+
* A barrier for disabled certificate check vulnerabilities from model data.
54+
*/
55+
private class ModelsAsDataBarrier extends Barrier {
56+
ModelsAsDataBarrier() { barrierNode(this, "disable-certificate") }
57+
}
4558
}

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import rust
77
private import codeql.rust.dataflow.DataFlow
8+
private import codeql.rust.dataflow.FlowBarrier
89
private import codeql.rust.dataflow.FlowSource
910
private import codeql.rust.dataflow.FlowSink
1011
private import codeql.rust.Concepts
@@ -130,6 +131,19 @@ module HardcodedCryptographicValue {
130131
override CryptographicValueKind getKind() { result = kind }
131132
}
132133

134+
/**
135+
* An externally modeled barrier for hard-coded cryptographic value vulnerabilities.
136+
*
137+
* Note that a barrier will block flow to all hard-coded cryptographic value
138+
* sinks, regardless of the `kind` that is specified. For example a barrier of
139+
* kind `credentials-key` will block flow to a sink of kind `credentials-iv`.
140+
*/
141+
private class ModelsAsDataBarrier extends Barrier {
142+
ModelsAsDataBarrier() {
143+
exists(CryptographicValueKind kind | barrierNode(this, "credentials-" + kind))
144+
}
145+
}
146+
133147
/**
134148
* A call to `getrandom` that is a barrier.
135149
*/

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import rust
77
private import codeql.rust.dataflow.DataFlow
8+
private import codeql.rust.dataflow.FlowBarrier
89
private import codeql.rust.dataflow.FlowSource
910
private import codeql.rust.dataflow.FlowSink
1011
private import codeql.rust.Concepts
@@ -48,6 +49,13 @@ module InsecureCookie {
4849
ModelsAsDataSink() { sinkNode(this, "cookie-use") }
4950
}
5051

52+
/**
53+
* A barrier for insecure cookie vulnerabilities from model data.
54+
*/
55+
private class ModelsAsDataBarrier extends Barrier {
56+
ModelsAsDataBarrier() { barrierNode(this, "cookie-use") }
57+
}
58+
5159
/**
5260
* Holds if a models-as-data optional barrier for cookies is specified for `summaryNode`,
5361
* with arguments `attrib` (`secure` or `partitioned`) and `arg` (argument index). For example,

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import rust
77
private import codeql.rust.dataflow.DataFlow
8+
private import codeql.rust.dataflow.FlowBarrier
89
private import codeql.rust.dataflow.FlowSink
910
private import codeql.rust.Concepts
1011
private import codeql.util.Unit
@@ -44,6 +45,13 @@ module LogInjection {
4445
ModelsAsDataSink() { sinkNode(this, "log-injection") }
4546
}
4647

48+
/**
49+
* A barrier for log-injection from model data.
50+
*/
51+
private class ModelsAsDataBarrier extends Barrier {
52+
ModelsAsDataBarrier() { barrierNode(this, "log-injection") }
53+
}
54+
4755
/**
4856
* A barrier for log injection vulnerabilities for nodes whose type is a
4957
* numeric type, which is unlikely to expose any vulnerability.

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import rust
77
private import codeql.rust.dataflow.DataFlow
8+
private import codeql.rust.dataflow.FlowBarrier
89
private import codeql.rust.dataflow.FlowSink
910
private import codeql.rust.dataflow.FlowSource
1011
private import codeql.rust.Concepts
@@ -46,4 +47,11 @@ module RequestForgery {
4647
private class ModelsAsDataSink extends Sink {
4748
ModelsAsDataSink() { sinkNode(this, "request-url") }
4849
}
50+
51+
/**
52+
* A barrier for request forgery from model data.
53+
*/
54+
private class ModelsAsDataBarrier extends Barrier {
55+
ModelsAsDataBarrier() { barrierNode(this, "request-url") }
56+
}
4957
}

0 commit comments

Comments
 (0)