Skip to content

Commit b765ba3

Browse files
authored
Merge pull request github#13110 from GeekMasher/csharp-aws
[CSharp] AWS Lambda Modelling
2 parents ffc36e4 + 3b9737f commit b765ba3

File tree

10 files changed

+492
-0
lines changed

10 files changed

+492
-0
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
category: minorAnalysis
3+
---
4+
* Additional support for `Amazon.Lambda` SDK
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
extensions:
2+
- addsTo:
3+
pack: codeql/csharp-all
4+
extensible: sourceModel
5+
data:
6+
- ["Amazon.Lambda.APIGatewayEvents","APIGatewayHttpApiV2ProxyRequest",true,"get_Headers","()","","ReturnValue","remote","manual"]
7+
- ["Amazon.Lambda.APIGatewayEvents","APIGatewayHttpApiV2ProxyRequest",true,"get_Body","()","","ReturnValue","remote","manual"]
8+
- ["Amazon.Lambda.APIGatewayEvents","APIGatewayHttpApiV2ProxyRequest",true,"get_RawPath","()","","ReturnValue","remote","manual"]
9+
- ["Amazon.Lambda.APIGatewayEvents","APIGatewayHttpApiV2ProxyRequest",true,"get_RawQueryString","()","","ReturnValue","remote","manual"]
10+
- ["Amazon.Lambda.APIGatewayEvents","APIGatewayHttpApiV2ProxyRequest",true,"get_Cookies","()","","ReturnValue","remote","manual"]
11+
- ["Amazon.Lambda.APIGatewayEvents","APIGatewayHttpApiV2ProxyRequest",true,"get_PathParameters","()","","ReturnValue","remote","manual"]
12+
13+
- addsTo:
14+
pack: codeql/csharp-all
15+
extensible: sinkModel
16+
data:
17+
- ["Amazon.Lambda.Core","ILambdaLogger",true,"Log","(System.String)","","Argument[0]","log-injection","manual"]
18+
- ["Amazon.Lambda.Core","ILambdaLogger",true,"LogLine","(System.String)","","Argument[0]","log-injection","manual"]
19+
- ["Amazon.Lambda.Core","ILambdaLogger",true,"LogTrace","(System.String)","","Argument[0]","log-injection","manual"]
20+
- ["Amazon.Lambda.Core","ILambdaLogger",true,"LogDebug","(System.String)","","Argument[0]","log-injection","manual"]
21+
- ["Amazon.Lambda.Core","ILambdaLogger",true,"LogInformation","(System.String)","","Argument[0]","log-injection","manual"]
22+
- ["Amazon.Lambda.Core","ILambdaLogger",true,"LogWarning","(System.String)","","Argument[0]","log-injection","manual"]
23+
- ["Amazon.Lambda.Core","ILambdaLogger",true,"LogError","(System.String)","","Argument[0]","log-injection","manual"]
24+
- ["Amazon.Lambda.Core","ILambdaLogger",true,"LogCritical","(System.String)","","Argument[0]","log-injection","manual"]
25+
- ["Amazon.Lambda.Core","ILambdaLogger",true,"Log","(System.String,System.String)","","Argument[1]","log-injection","manual"]
26+
- ["Amazon.Lambda.Core","ILambdaLogger",true,"Log","(Amazon.Lambda.Core.LogLevel,System.String)","","Argument[1]","log-injection","manual"]
27+
28+
- addsTo:
29+
pack: codeql/csharp-all
30+
extensible: summaryModel
31+
data: []
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using System.Net;
2+
using System.Collections.Generic;
3+
4+
using Amazon.Lambda.Core;
5+
using Amazon.Lambda.APIGatewayEvents;
6+
7+
8+
namespace LambdaTests {
9+
public class Functions {
10+
public APIGatewayProxyResponse Get(APIGatewayHttpApiV2ProxyRequest request, ILambdaContext context) {
11+
string body = request.Body; // source
12+
string cookie = request.Cookies[0]; // source
13+
14+
string rawpath = request.RawPath; // source
15+
string rawquery = request.RawQueryString; // source
16+
request.PathParameters.TryGetValue("x", out var pathparameter); // source
17+
18+
string header = request.Headers["test"]; // source
19+
request.Headers.TryGetValue("test", out var header2); // source
20+
21+
22+
return new APIGatewayProxyResponse {
23+
StatusCode = 200
24+
};
25+
}
26+
27+
public void Logging(ILambdaContext context, string data)
28+
{
29+
// logging
30+
context.Logger.Log($"Log Data :: {data}");
31+
context.Logger.LogLine($"Log Data :: {data}");
32+
context.Logger.Log("Information", $"Log Data :: {data}");
33+
context.Logger.Log(LogLevel.Information, $"Log Data :: {data}");
34+
context.Logger.LogTrace($"Log Data :: {data}");
35+
context.Logger.LogDebug($"Log Data :: {data}");
36+
context.Logger.LogInformation($"Log Data :: {data}");
37+
context.Logger.LogWarning($"Log Data :: {data}");
38+
context.Logger.LogError($"Log Data :: {data}");
39+
context.Logger.LogCritical($"Log Data :: {data}");
40+
}
41+
}
42+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
awsRemoteSources
2+
| lambda.cs:11:27:11:38 | access to property Body |
3+
| lambda.cs:12:29:12:43 | access to property Cookies |
4+
| lambda.cs:14:30:14:44 | access to property RawPath |
5+
| lambda.cs:15:31:15:52 | access to property RawQueryString |
6+
| lambda.cs:16:13:16:34 | access to property PathParameters |
7+
| lambda.cs:18:29:18:43 | access to property Headers |
8+
| lambda.cs:19:13:19:27 | access to property Headers |
9+
awsLoggingSinks
10+
| lambda.cs:30:32:30:52 | $"..." |
11+
| lambda.cs:31:36:31:56 | $"..." |
12+
| lambda.cs:32:47:32:67 | $"..." |
13+
| lambda.cs:33:54:33:74 | $"..." |
14+
| lambda.cs:34:37:34:57 | $"..." |
15+
| lambda.cs:35:37:35:57 | $"..." |
16+
| lambda.cs:36:43:36:63 | $"..." |
17+
| lambda.cs:37:39:37:59 | $"..." |
18+
| lambda.cs:38:37:38:57 | $"..." |
19+
| lambda.cs:39:40:39:60 | $"..." |
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+
query predicate awsRemoteSources(DataFlow::ExprNode node) { sourceNode(node, "remote") }
5+
6+
query predicate awsLoggingSinks(DataFlow::ExprNode node) { sinkNode(node, "log-injection") }
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
semmle-extractor-options: /nostdlib /noconfig
2+
semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/Amazon.Lambda.Core/2.2.0/Amazon.Lambda.Core.csproj
3+
semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/Amazon.Lambda.APIGatewayEvents/2.7.0/Amazon.Lambda.APIGatewayEvents.csproj

0 commit comments

Comments
 (0)