Skip to content

Commit 7d555a7

Browse files
committed
Java: Track flow through HttpEntity and ResponseEntity
- Only track if the body is a String type, as that is the only type at risk of XSS.
1 parent 1d12340 commit 7d555a7

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

java/ql/src/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ private import semmle.code.java.security.Validation
88
private import semmle.code.java.frameworks.android.Intent
99
private import semmle.code.java.frameworks.Guice
1010
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
1113
private import semmle.code.java.Maps
1214
private import semmle.code.java.dataflow.internal.ContainerFlow
1315
private import semmle.code.java.frameworks.jackson.JacksonSerializability
@@ -252,6 +254,22 @@ private predicate constructorStep(Expr tracked, ConstructorCall sink) {
252254
or
253255
// a custom InputStream that wraps a tainted data source is tainted
254256
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+
)
255273
)
256274
}
257275

0 commit comments

Comments
 (0)