File tree Expand file tree Collapse file tree 2 files changed +25
-5
lines changed
experimental/Security/CWE/CWE-036
semmle/code/java/frameworks/guava Expand file tree Collapse file tree 2 files changed +25
-5
lines changed Original file line number Diff line number Diff line change 8
8
import java
9
9
import semmle.code.java.dataflow.TaintTracking
10
10
import semmle.code.java.dataflow.FlowSources
11
+ import semmle.code.java.dataflow.ExternalFlow
11
12
import DataFlow:: PathGraph
12
13
13
14
class URLConstructor extends ClassInstanceExpr {
@@ -21,6 +22,13 @@ class URLConstructor extends ClassInstanceExpr {
21
22
}
22
23
}
23
24
25
+ class URLOpenStreamCsv extends SinkModelCsv {
26
+ override predicate row ( string row ) {
27
+ //"package;type;overrides;name;signature;ext;inputspec;kind",
28
+ row = "java.net;URL;true;openStream;();;Argument[-1];url-open-stream"
29
+ }
30
+ }
31
+
24
32
class URLOpenStreamMethod extends Method {
25
33
URLOpenStreamMethod ( ) {
26
34
this .getDeclaringType ( ) instanceof TypeUrl and
@@ -33,11 +41,7 @@ class RemoteURLToOpenStreamFlowConfig extends TaintTracking::Configuration {
33
41
34
42
override predicate isSource ( DataFlow:: Node source ) { source instanceof RemoteFlowSource }
35
43
36
- override predicate isSink ( DataFlow:: Node sink ) {
37
- exists ( MethodAccess m |
38
- sink .asExpr ( ) = m .getQualifier ( ) and m .getMethod ( ) instanceof URLOpenStreamMethod
39
- )
40
- }
44
+ override predicate isSink ( DataFlow:: Node sink ) { sinkNode ( sink , "url-open-stream" ) }
41
45
42
46
override predicate isAdditionalTaintStep ( DataFlow:: Node node1 , DataFlow:: Node node2 ) {
43
47
exists ( URLConstructor u |
Original file line number Diff line number Diff line change @@ -80,3 +80,19 @@ private class GuavaIoCsv extends SummaryModelCsv {
80
80
]
81
81
}
82
82
}
83
+
84
+ private class GuavaIoSinkCsv extends SinkModelCsv {
85
+ override predicate row ( string row ) {
86
+ row =
87
+ [
88
+ //"package;type;overrides;name;signature;ext;inputspec;kind",
89
+ "com.google.common.io;Resources;false;asByteSource;(URL);;Argument[0];url-open-stream" ,
90
+ "com.google.common.io;Resources;false;asCharSource;(URL,Charset);;Argument[0];url-open-stream" ,
91
+ "com.google.common.io;Resources;false;copy;(URL,OutputStream);;Argument[0];url-open-stream" ,
92
+ "com.google.common.io;Resources;false;asByteSource;(URL);;Argument[0];url-open-stream" ,
93
+ "com.google.common.io;Resources;false;readLines;;;Argument[0];url-open-stream" ,
94
+ "com.google.common.io;Resources;false;toByteArray;(URL);;Argument[0];url-open-stream" ,
95
+ "com.google.common.io;Resources;false;toString;(URL,Charset);;Argument[0];url-open-stream"
96
+ ]
97
+ }
98
+ }
You can’t perform that action at this time.
0 commit comments