Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 4ae5dc3

Browse files
committed
C#: Add CaptureSourceModel query.
1 parent 45234b1 commit 4ae5dc3

3 files changed

Lines changed: 48 additions & 0 deletions

File tree

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/**
2+
* @name Capture source models.
3+
* @description Finds APIs that act as sources as they expose already known sources.
4+
* @id csharp/utils/model-generator/sink-models
5+
*/
6+
7+
private import ModelGeneratorUtils
8+
private import CaptureSourceModels
9+
10+
from TargetApi api, string sink
11+
where sink = captureSource(api)
12+
select sink order by sink
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
private import CaptureSourceModelsSpecific
2+
private import ModelGeneratorUtils
3+
4+
class FromSourceConfiguration extends TaintTracking::Configuration {
5+
FromSourceConfiguration() { this = "FromSourceConfiguration" }
6+
7+
override predicate isSource(DataFlow::Node source) { sourceNode(source, _) }
8+
9+
override predicate isSink(DataFlow::Node sink) {
10+
exists(TargetApi c |
11+
sink instanceof ReturnNodeExt and
12+
sink.getEnclosingCallable() = c
13+
)
14+
}
15+
16+
override DataFlow::FlowFeature getAFeature() {
17+
result instanceof DataFlow::FeatureHasSinkCallContext
18+
}
19+
20+
override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) {
21+
isRelevantTaintStep(node1, node2)
22+
}
23+
}
24+
25+
string captureSource(TargetApi api) {
26+
exists(DataFlow::Node source, DataFlow::Node sink, FromSourceConfiguration config, string kind |
27+
config.hasFlow(source, sink) and
28+
sourceNode(source, kind) and
29+
api = sink.getEnclosingCallable() and
30+
result = asSourceModel(api, returnNodeAsOutput(sink), kind)
31+
)
32+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import csharp
2+
import semmle.code.csharp.dataflow.TaintTracking
3+
import semmle.code.csharp.dataflow.ExternalFlow
4+
import semmle.code.csharp.dataflow.internal.DataFlowImplCommon

0 commit comments

Comments
 (0)