@@ -17,40 +17,43 @@ import java
1717import semmle.code.java.security.XmlParsers
1818import semmle.code.java.dataflow.FlowSources
1919import semmle.code.java.dataflow.TaintTracking2
20- import DataFlow:: PathGraph
20+ // import DataFlow::PathGraph
2121import github.LocalSources
2222
23- class SafeSAXSourceFlowConfig extends TaintTracking2 :: Configuration {
24- SafeSAXSourceFlowConfig ( ) { this = "XmlParsers::SafeSAXSourceFlowConfig" }
23+ module SafeSAXSourceFlowConfig implements DataFlow :: ConfigSig {
24+ predicate isSource ( DataFlow :: Node src ) { src . asExpr ( ) instanceof SafeSaxSource }
2525
26- override predicate isSource ( DataFlow:: Node src ) { src .asExpr ( ) instanceof SafeSaxSource }
27-
28- override predicate isSink ( DataFlow:: Node sink ) {
26+ predicate isSink ( DataFlow:: Node sink ) {
2927 sink .asExpr ( ) = any ( XmlParserCall parse ) .getSink ( )
3028 }
3129
32- override int fieldFlowBranchLimit ( ) { result = 0 }
30+ int fieldFlowBranchLimit ( ) { result = 0 }
3331}
3432
33+ module SafeSAXSourceFlow = TaintTracking:: Global< SafeSAXSourceFlowConfig > ;
34+
3535class UnsafeXxeSink extends DataFlow:: ExprNode {
3636 UnsafeXxeSink ( ) {
37- not exists ( SafeSAXSourceFlowConfig safeSource | safeSource . hasFlowTo ( this ) ) and
37+ not SafeSAXSourceFlow :: flowTo ( this ) and
3838 exists ( XmlParserCall parse |
3939 parse .getSink ( ) = this .getExpr ( ) and
4040 not parse .isSafe ( )
4141 )
4242 }
4343}
4444
45- class XxeConfig extends TaintTracking:: Configuration {
46- XxeConfig ( ) { this = "XXE.ql::XxeConfig" }
45+ module XXELocalConfig implements DataFlow:: ConfigSig {
46+ predicate isSource ( DataFlow:: Node source ) {
47+ source instanceof LocalUserInput and
48+ not exists ( DataFlow:: Node src | src .asExpr ( ) instanceof SafeSaxSource ) }
4749
48- override predicate isSource ( DataFlow:: Node src ) { src instanceof LocalUserInput }
49-
50- override predicate isSink ( DataFlow:: Node sink ) { sink instanceof UnsafeXxeSink }
50+ predicate isSink ( DataFlow:: Node sink ) { sink instanceof UnsafeXxeSink }
5151}
5252
53- from DataFlow:: PathNode source , DataFlow:: PathNode sink , XxeConfig conf
54- where conf .hasFlowPath ( source , sink )
53+ module XXELocalFlow = TaintTracking:: Global< XXELocalConfig > ;
54+ import XXELocalFlow:: PathGraph
55+
56+ from XXELocalFlow:: PathNode source , XXELocalFlow:: PathNode sink
57+ where XXELocalFlow:: flowPath ( source , sink )
5558select sink .getNode ( ) , source , sink , "Unsafe parsing of XML file from $@." , source .getNode ( ) ,
5659 "user input"
0 commit comments