Skip to content

Commit d739a8c

Browse files
committed
Moved configuration from XPath.qll back to XPath Injection query
1 parent ee269fb commit d739a8c

File tree

3 files changed

+17
-10
lines changed

3 files changed

+17
-10
lines changed

java/ql/src/experimental/Security/CWE/CWE-643/XPathInjection.ql

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,14 @@ import semmle.code.java.dataflow.TaintTracking
1515
import DataFlow::PathGraph
1616
import semmle.code.java.security.XPath
1717

18+
class XPathInjectionConfiguration extends TaintTracking::Configuration {
19+
XPathInjectionConfiguration() { this = "XPathInjection" }
20+
21+
override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }
22+
23+
override predicate isSink(DataFlow::Node sink) { sink instanceof XPathInjectionSink }
24+
}
25+
1826
from DataFlow::PathNode source, DataFlow::PathNode sink, XPathInjectionConfiguration c
1927
where c.hasFlowPath(source, sink)
2028
select sink.getNode(), source, sink, "$@ flows to here and is used in an XPath expression.",

java/ql/src/semmle/code/java/security/XPath.qll

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,4 @@ class XPathInjectionSink extends DataFlow::ExprNode {
5555
XPathInjectionSink() { exists(XPathSink sink | this.getExpr() = sink.getSink()) }
5656
}
5757

58-
/** A configuration that tracks data from a remote input source to a XPath evaluation sink. */
59-
class XPathInjectionConfiguration extends TaintTracking::Configuration {
60-
XPathInjectionConfiguration() { this = "XPathInjection" }
6158

62-
override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }
63-
64-
override predicate isSink(DataFlow::Node sink) { sink instanceof XPathInjectionSink }
65-
}

java/ql/test/experimental/query-tests/security/CWE-643/XPathInjectionTest.ql

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,22 @@ import semmle.code.java.dataflow.FlowSources
44
import semmle.code.java.security.XPath
55
import TestUtilities.InlineExpectationsTest
66

7+
class Conf extends TaintTracking::Configuration {
8+
Conf() { this = "test:xml:xpathinjection" }
9+
10+
override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }
11+
12+
override predicate isSink(DataFlow::Node sink) { sink instanceof XPathInjectionSink }
13+
}
14+
715
class HasXPathInjectionTest extends InlineExpectationsTest {
816
HasXPathInjectionTest() { this = "HasXPathInjectionTest" }
917

1018
override string getARelevantTag() { result = "hasXPathInjection" }
1119

1220
override predicate hasActualResult(Location location, string element, string tag, string value) {
1321
tag = "hasXPathInjection" and
14-
exists(DataFlow::Node src, DataFlow::Node sink, XPathInjectionConfiguration conf |
15-
conf.hasFlow(src, sink)
16-
|
22+
exists(DataFlow::Node src, DataFlow::Node sink, Conf conf | conf.hasFlow(src, sink) |
1723
sink.getLocation() = location and
1824
element = sink.toString() and
1925
value = ""

0 commit comments

Comments
 (0)