Skip to content

Commit 4d2a429

Browse files
committed
Allow MaD sanitizers for java/xslt-injection
1 parent 7175879 commit 4d2a429

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

java/ql/lib/semmle/code/java/security/XsltInjection.qll

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ module;
55
import java
66
import semmle.code.java.dataflow.DataFlow
77
private import semmle.code.java.dataflow.ExternalFlow
8+
private import semmle.code.java.security.Sanitizers
89

910
/**
1011
* A data flow sink for unvalidated user input that is used in XSLT transformation.
@@ -17,6 +18,16 @@ private class DefaultXsltInjectionSink extends XsltInjectionSink {
1718
DefaultXsltInjectionSink() { sinkNode(this, "xslt-injection") }
1819
}
1920

21+
/** A default sink representing methods susceptible to XSLT Injection attacks. */
22+
abstract class XsltInjectionSanitizer extends DataFlow::Node { }
23+
24+
private class SimpleTypeXsltInjectionSanitizer extends XsltInjectionSanitizer instanceof SimpleTypeSanitizer
25+
{ }
26+
27+
private class ExternalXsltInjectionSanitizer extends XsltInjectionSanitizer {
28+
ExternalXsltInjectionSanitizer() { barrierNode(this, "xslt-injection") }
29+
}
30+
2031
/**
2132
* A unit class for adding additional taint steps.
2233
*

java/ql/lib/semmle/code/java/security/XsltInjectionQuery.qll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import semmle.code.java.dataflow.FlowSources
55
import semmle.code.java.dataflow.TaintTracking
66
import semmle.code.java.security.XmlParsers
77
import semmle.code.java.security.XsltInjection
8-
private import semmle.code.java.security.Sanitizers
98

109
/**
1110
* A taint-tracking configuration for unvalidated user input that is used in XSLT transformation.
@@ -15,7 +14,7 @@ module XsltInjectionFlowConfig implements DataFlow::ConfigSig {
1514

1615
predicate isSink(DataFlow::Node sink) { sink instanceof XsltInjectionSink }
1716

18-
predicate isBarrier(DataFlow::Node node) { node instanceof SimpleTypeSanitizer }
17+
predicate isBarrier(DataFlow::Node node) { node instanceof XsltInjectionSanitizer }
1918

2019
predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) {
2120
any(XsltInjectionAdditionalTaintStep c).step(node1, node2)

0 commit comments

Comments
 (0)