Skip to content
This repository was archived by the owner on Apr 4, 2025. It is now read-only.

Commit 837f32e

Browse files
author
Keith Hoodlet
committed
Add corrected code - still has some errors
1 parent d59520e commit 837f32e

1 file changed

Lines changed: 10 additions & 7 deletions

File tree

java/CWE-611/XXELocal.ql

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,22 @@ import semmle.code.java.dataflow.TaintTracking2
2020
//import DataFlow::PathGraph
2121
import github.LocalSources
2222

23-
class SafeSAXSourceFlowConfig extends TaintTracking2::Configuration {
24-
SafeSAXSourceFlowConfig() { this = "XmlParsers::SafeSAXSourceFlowConfig" }
2523

26-
override predicate isSource(DataFlow::Node src) { src.asExpr() instanceof SafeSaxSource }
24+
module SafeSAXSourceFlowConfig implements DataFlow::ConfigSig{
25+
predicate isSource(DataFlow::Node src) { src.asExpr() instanceof SafeSaxSource }
2726

28-
override predicate isSink(DataFlow::Node sink) {
27+
predicate isSink(DataFlow::Node sink) {
2928
sink.asExpr() = any(XmlParserCall parse).getSink()
3029
}
3130

32-
override int fieldFlowBranchLimit() { result = 0 }
31+
int fieldFlowBranchLimit() { result = 0 }
3332
}
3433

34+
module SafeSAXSourceFlow = TaintTracking::Global<SafeSAXSourceFlowConfig>;
35+
3536
class UnsafeXxeSink extends DataFlow::ExprNode {
3637
UnsafeXxeSink() {
37-
not exists(SafeSAXSourceFlowConfig safeSource | safeSource.hasFlowTo(this)) and
38+
not exists(SafeSAXSourceFlow::flowPath(this)) and
3839
exists(XmlParserCall parse |
3940
parse.getSink() = this.getExpr() and
4041
not parse.isSafe()
@@ -43,7 +44,9 @@ class UnsafeXxeSink extends DataFlow::ExprNode {
4344
}
4445

4546
module XXELocalConfig implements DataFlow::ConfigSig {
46-
predicate isSource(DataFlow::Node source) { source instanceof LocalUserInput }
47+
predicate isSource(DataFlow::Node source) {
48+
source instanceof LocalUserInput and
49+
not exists(DataFlow::Node src | src.asExpr() instanceof SafeSaxSource)}
4750

4851
predicate isSink(DataFlow::Node sink) { sink instanceof UnsafeXxeSink }
4952
}

0 commit comments

Comments
 (0)