Skip to content

Commit e6be88b

Browse files
committed
C#: Re-factor XmlEntityInjection to use the new API.
1 parent 60544c6 commit e6be88b

File tree

2 files changed

+36
-4
lines changed

2 files changed

+36
-4
lines changed

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

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,11 @@ private class InsecureXmlSink extends Sink {
4444
abstract class Sanitizer extends DataFlow::Node { }
4545

4646
/**
47+
* DEPRECATED: Use `XmlEntityInjection` instead.
48+
*
4749
* A taint-tracking configuration for untrusted user input used in XML processing.
4850
*/
49-
class TaintTrackingConfiguration extends TaintTracking::Configuration {
51+
deprecated class TaintTrackingConfiguration extends TaintTracking::Configuration {
5052
TaintTrackingConfiguration() { this = "XMLInjection" }
5153

5254
override predicate isSource(DataFlow::Node source) { source instanceof Source }
@@ -61,6 +63,36 @@ class TaintTrackingConfiguration extends TaintTracking::Configuration {
6163
}
6264
}
6365

66+
/**
67+
* A taint-tracking configuration for untrusted user input used in XML processing.
68+
*/
69+
private module XmlEntityInjectionConfig implements DataFlow::ConfigSig {
70+
predicate isSource(DataFlow::Node source) { source instanceof Source }
71+
72+
predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
73+
74+
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
75+
}
76+
77+
/**
78+
* A taint-tracking module for untrusted user input used in XML processing.
79+
*/
80+
module XmlEntityInjection implements DataFlow::GlobalFlowSig {
81+
import TaintTracking::Global<XmlEntityInjectionConfig> as Super
82+
import Super
83+
84+
/**
85+
* Holds if data can flow from `source` to `sink`.
86+
*
87+
* The corresponding paths are generated from the end-points and the graph
88+
* included in the module `PathGraph`.
89+
*/
90+
predicate flowPath(XmlEntityInjection::PathNode source, XmlEntityInjection::PathNode sink) {
91+
Super::flowPath(source, sink) and
92+
exists(sink.getNode().(Sink).getReason())
93+
}
94+
}
95+
6496
private class SimpleTypeSanitizer extends Sanitizer, SimpleTypeSanitizedExpr { }
6597

6698
private class GuidSanitizer extends Sanitizer, GuidSanitizedExpr { }

csharp/ql/src/Security Features/CWE-611/UntrustedDataInsecureXml.ql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@
1414

1515
import csharp
1616
import semmle.code.csharp.security.dataflow.XMLEntityInjectionQuery
17-
import semmle.code.csharp.dataflow.DataFlow::DataFlow::PathGraph
17+
import XmlEntityInjection::PathGraph
1818

19-
from TaintTrackingConfiguration c, DataFlow::PathNode source, DataFlow::PathNode sink
20-
where c.hasFlowPath(source, sink)
19+
from XmlEntityInjection::PathNode source, XmlEntityInjection::PathNode sink
20+
where XmlEntityInjection::flowPath(source, sink)
2121
select sink.getNode(), source, sink,
2222
"This insecure XML processing depends on a $@ (" + sink.getNode().(Sink).getReason() + ").",
2323
source.getNode(), "user-provided value"

0 commit comments

Comments
 (0)