@@ -15,7 +15,7 @@ import java
1515import semmle.code.java.dataflow.TaintTracking
1616import semmle.code.java.dataflow.FlowSources
1717import semmle.code.java.dataflow.ExternalFlow
18- import DataFlow :: PathGraph
18+ import RemoteUrlToOpenStreamFlow :: PathGraph
1919
2020class UrlConstructor extends ClassInstanceExpr {
2121 UrlConstructor ( ) { this .getConstructor ( ) .getDeclaringType ( ) instanceof TypeUrl }
@@ -28,30 +28,32 @@ class UrlConstructor extends ClassInstanceExpr {
2828 }
2929}
3030
31- class RemoteUrlToOpenStreamFlowConfig extends TaintTracking :: Configuration {
32- RemoteUrlToOpenStreamFlowConfig ( ) { this = "OpenStream::RemoteURLToOpenStreamFlowConfig" }
31+ module RemoteUrlToOpenStreamFlowConfig implements DataFlow :: ConfigSig {
32+ predicate isSource ( DataFlow :: Node source ) { source instanceof RemoteFlowSource }
3333
34- override predicate isSource ( DataFlow:: Node source ) { source instanceof RemoteFlowSource }
35-
36- override predicate isSink ( DataFlow:: Node sink ) {
34+ predicate isSink ( DataFlow:: Node sink ) {
3735 exists ( MethodAccess m |
3836 sink .asExpr ( ) = m .getQualifier ( ) and m .getMethod ( ) instanceof UrlOpenStreamMethod
3937 )
4038 or
4139 sinkNode ( sink , "url-open-stream" )
4240 }
4341
44- override predicate isAdditionalTaintStep ( DataFlow:: Node node1 , DataFlow:: Node node2 ) {
42+ predicate isAdditionalFlowStep ( DataFlow:: Node node1 , DataFlow:: Node node2 ) {
4543 exists ( UrlConstructor u |
4644 node1 .asExpr ( ) = u .stringArg ( ) and
4745 node2 .asExpr ( ) = u
4846 )
4947 }
5048}
5149
52- from DataFlow:: PathNode source , DataFlow:: PathNode sink , MethodAccess call
50+ module RemoteUrlToOpenStreamFlow = TaintTracking:: Global< RemoteUrlToOpenStreamFlowConfig > ;
51+
52+ from
53+ RemoteUrlToOpenStreamFlow:: PathNode source , RemoteUrlToOpenStreamFlow:: PathNode sink ,
54+ MethodAccess call
5355where
5456 sink .getNode ( ) .asExpr ( ) = call .getQualifier ( ) and
55- any ( RemoteUrlToOpenStreamFlowConfig c ) . hasFlowPath ( source , sink )
57+ RemoteUrlToOpenStreamFlow :: flowPath ( source , sink )
5658select call , source , sink ,
5759 "URL on which openStream is called may have been constructed from remote source."
0 commit comments