Skip to content

Commit 60c5bbd

Browse files
committed
C#: Re-factor ConditionalBypass to use the new API.
1 parent cab976c commit 60c5bbd

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ abstract class Sink extends DataFlow::ExprNode {
3030
abstract class Sanitizer extends DataFlow::ExprNode { }
3131

3232
/**
33+
* DEPRECATED: Use `ConditionalBypass` instead.
34+
*
3335
* A taint-tracking configuration for user-controlled bypass of sensitive method.
3436
*/
3537
class Configuration extends TaintTracking::Configuration {
@@ -42,6 +44,22 @@ class Configuration extends TaintTracking::Configuration {
4244
override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer }
4345
}
4446

47+
/**
48+
* A taint-tracking configuration for user-controlled bypass of sensitive method.
49+
*/
50+
private module ConditionalBypassConfig implements DataFlow::ConfigSig {
51+
predicate isSource(DataFlow::Node source) { source instanceof Source }
52+
53+
predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
54+
55+
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
56+
}
57+
58+
/**
59+
* A taint-tracking module for user-controlled bypass of sensitive method.
60+
*/
61+
module ConditionalBypass = TaintTracking::Global<ConditionalBypassConfig>;
62+
4563
/** A source of remote user input. */
4664
class RemoteSource extends Source instanceof RemoteFlowSource { }
4765

csharp/ql/src/Security Features/CWE-807/ConditionalBypass.ql

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

1616
import csharp
1717
import semmle.code.csharp.security.dataflow.ConditionalBypassQuery
18-
import semmle.code.csharp.dataflow.DataFlow::DataFlow::PathGraph
18+
import ConditionalBypass::PathGraph
1919

20-
from Configuration config, DataFlow::PathNode source, DataFlow::PathNode sink
21-
where config.hasFlowPath(source, sink)
20+
from ConditionalBypass::PathNode source, ConditionalBypass::PathNode sink
21+
where ConditionalBypass::flowPath(source, sink)
2222
select sink.getNode(), source, sink, "This condition guards a sensitive $@, but a $@ controls it.",
2323
sink.getNode().(Sink).getSensitiveMethodCall(), "action", source.getNode(), "user-provided value"

0 commit comments

Comments
 (0)