Skip to content

Commit 73cd751

Browse files
committed
C#: Re-factor LdapInjection to use the new API.
1 parent 91150af commit 73cd751

File tree

3 files changed

+33
-9
lines changed

3 files changed

+33
-9
lines changed

csharp/ql/lib/semmle/code/csharp/security/dataflow/LDAPInjectionQuery.qll

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,11 @@ abstract class Sink extends DataFlow::ExprNode { }
2525
abstract class Sanitizer extends DataFlow::ExprNode { }
2626

2727
/**
28+
* DEPRECATED: Use `LdapInjection` instead.
29+
*
2830
* A taint-tracking configuration for unvalidated user input that is used to construct LDAP queries.
2931
*/
30-
class TaintTrackingConfiguration extends TaintTracking::Configuration {
32+
deprecated class TaintTrackingConfiguration extends TaintTracking::Configuration {
3133
TaintTrackingConfiguration() { this = "LDAPInjection" }
3234

3335
override predicate isSource(DataFlow::Node source) { source instanceof Source }
@@ -37,6 +39,22 @@ class TaintTrackingConfiguration extends TaintTracking::Configuration {
3739
override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer }
3840
}
3941

42+
/**
43+
* A taint-tracking configuration for unvalidated user input that is used to construct LDAP queries.
44+
*/
45+
module LdapInjectionConfig implements DataFlow::ConfigSig {
46+
predicate isSource(DataFlow::Node source) { source instanceof Source }
47+
48+
predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
49+
50+
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
51+
}
52+
53+
/**
54+
* A taint-tracking configuration for unvalidated user input that is used to construct LDAP queries.
55+
*/
56+
module LdapInjection = TaintTracking::Global<LdapInjectionConfig>;
57+
4058
/** A source of remote user input. */
4159
class RemoteSource extends Source instanceof RemoteFlowSource { }
4260

csharp/ql/src/Security Features/CWE-090/LDAPInjection.ql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313

1414
import csharp
1515
import semmle.code.csharp.security.dataflow.LDAPInjectionQuery
16-
import semmle.code.csharp.dataflow.DataFlow::DataFlow::PathGraph
16+
import LdapInjection::PathGraph
1717

18-
from TaintTrackingConfiguration c, DataFlow::PathNode source, DataFlow::PathNode sink
19-
where c.hasFlowPath(source, sink)
18+
from LdapInjection::PathNode source, LdapInjection::PathNode sink
19+
where LdapInjection::flowPath(source, sink)
2020
select sink.getNode(), source, sink, "This LDAP query depends on a $@.", source.getNode(),
2121
"user-provided value"

csharp/ql/src/Security Features/CWE-090/StoredLDAPInjection.ql

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,19 @@
1414
import csharp
1515
import semmle.code.csharp.security.dataflow.LDAPInjectionQuery
1616
import semmle.code.csharp.security.dataflow.flowsources.Stored
17-
import semmle.code.csharp.dataflow.DataFlow::DataFlow::PathGraph
17+
import StoredLdapInjection::PathGraph
1818

19-
class StoredTaintTrackingConfiguration extends TaintTrackingConfiguration {
20-
override predicate isSource(DataFlow::Node source) { source instanceof StoredFlowSource }
19+
module StoredLdapInjectionConfig implements DataFlow::ConfigSig {
20+
predicate isSource(DataFlow::Node source) { source instanceof StoredFlowSource }
21+
22+
predicate isSink = LdapInjectionConfig::isSink/1;
23+
24+
predicate isBarrier = LdapInjectionConfig::isBarrier/1;
2125
}
2226

23-
from StoredTaintTrackingConfiguration c, DataFlow::PathNode source, DataFlow::PathNode sink
24-
where c.hasFlowPath(source, sink)
27+
module StoredLdapInjection = TaintTracking::Global<StoredLdapInjectionConfig>;
28+
29+
from StoredLdapInjection::PathNode source, StoredLdapInjection::PathNode sink
30+
where StoredLdapInjection::flowPath(source, sink)
2531
select sink.getNode(), source, sink, "This LDAP query depends on a $@.", source.getNode(),
2632
"stored (potentially user-provided) value"

0 commit comments

Comments
 (0)