Skip to content

Commit 51afe12

Browse files
committed
Environment variable sources
1 parent b0eb0e1 commit 51afe12

File tree

5 files changed

+50
-0
lines changed

5 files changed

+50
-0
lines changed

csharp/ql/lib/ext/System.model.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ extensions:
66
- ["System", "Console", False, "Read", "", "", "ReturnValue", "local", "manual"]
77
- ["System", "Console", False, "ReadKey", "", "", "ReturnValue", "local", "manual"]
88
- ["System", "Console", False, "ReadLine", "", "", "ReturnValue", "local", "manual"]
9+
- ["System", "Environment", False, "ExpandEnvironmentVariables", "", "", "ReturnValue", "environment", "manual"]
10+
- ["System", "Environment", False, "GetEnvironmentVariable", "", "", "ReturnValue", "environment", "manual"]
11+
- ["System", "Environment", False, "GetEnvironmentVariables", "", "", "ReturnValue", "environment", "manual"]
912
- addsTo:
1013
pack: codeql/csharp-all
1114
extensible: summaryModel

csharp/ql/lib/semmle/code/csharp/security/dataflow/flowsources/Local.qll

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,10 @@ class TextFieldSource extends LocalUserInputSource {
2929

3030
override string getSourceType() { result = "TextBox text" }
3131
}
32+
33+
abstract class EnvironmentVariableSource extends LocalFlowSource {
34+
override string getThreatModel() { result = "environment" }
35+
36+
override string getSourceType() { result = "environment variable" }
37+
}
38+
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using System;
2+
using System.Collections;
3+
4+
namespace EnvironmentVariables
5+
{
6+
class EnvironmentVariables
7+
{
8+
public static void GetEnvironmentVariable(string environmnetVariable)
9+
{
10+
string value = Environment.GetEnvironmentVariable(environmnetVariable);
11+
string valueFromRegistry = Environment.GetEnvironmentVariable(environmnetVariable, EnvironmentVariableTarget.Machine);
12+
string valueFromProcess = Environment.GetEnvironmentVariable(environmnetVariable, EnvironmentVariableTarget.Process);
13+
}
14+
15+
public static void GetEnvironmentVariables()
16+
{
17+
IDictionary environmentVariables = Environment.GetEnvironmentVariables();
18+
IDictionary environmentVariablesFromRegistry = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Machine);
19+
IDictionary environmentVariablesFromProcess = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Process);
20+
}
21+
22+
public static void ExpandEnvironmentVariables(string environmentVariable)
23+
{
24+
string expanded = Environment.ExpandEnvironmentVariables("%PATH%");
25+
}
26+
}
27+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
| EnvironmentVariables.cs:10:28:10:82 | call to method GetEnvironmentVariable |
2+
| EnvironmentVariables.cs:11:40:11:129 | call to method GetEnvironmentVariable |
3+
| EnvironmentVariables.cs:12:39:12:128 | call to method GetEnvironmentVariable |
4+
| EnvironmentVariables.cs:17:48:17:84 | call to method GetEnvironmentVariables |
5+
| EnvironmentVariables.cs:18:60:18:129 | call to method GetEnvironmentVariables |
6+
| EnvironmentVariables.cs:19:59:19:128 | call to method GetEnvironmentVariables |
7+
| EnvironmentVariables.cs:24:31:24:78 | call to method ExpandEnvironmentVariables |
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import csharp
2+
import semmle.code.csharp.dataflow.internal.ExternalFlow
3+
4+
from DataFlow::Node source
5+
where sourceNode(source, "environment")
6+
select source

0 commit comments

Comments
 (0)