@@ -8,6 +8,8 @@ private import semmle.code.java.security.Validation
8
8
private import semmle.code.java.frameworks.android.Intent
9
9
private import semmle.code.java.frameworks.Guice
10
10
private import semmle.code.java.frameworks.Protobuf
11
+ private import semmle.code.java.frameworks.spring.SpringController
12
+ private import semmle.code.java.frameworks.spring.SpringHttp
11
13
private import semmle.code.java.Maps
12
14
private import semmle.code.java.dataflow.internal.ContainerFlow
13
15
private import semmle.code.java.frameworks.jackson.JacksonSerializability
@@ -252,6 +254,22 @@ private predicate constructorStep(Expr tracked, ConstructorCall sink) {
252
254
or
253
255
// a custom InputStream that wraps a tainted data source is tainted
254
256
inputStreamWrapper ( sink .getConstructor ( ) , argi )
257
+ or
258
+ // A SpringHttpEntity is a wrapper around a body and some headers
259
+ // Track flow through iff body is a String
260
+ exists ( SpringHttpEntity she |
261
+ sink .getConstructor ( ) = she .getAConstructor ( ) and
262
+ argi = 0 and
263
+ tracked .getType ( ) instanceof TypeString
264
+ )
265
+ or
266
+ // A SpringRequestEntity is a wrapper around a body and some headers
267
+ // Track flow through iff body is a String
268
+ exists ( SpringResponseEntity sre |
269
+ sink .getConstructor ( ) = sre .getAConstructor ( ) and
270
+ argi = 0 and
271
+ tracked .getType ( ) instanceof TypeString
272
+ )
255
273
)
256
274
}
257
275
0 commit comments