4
4
5
5
import semmle.code.java.dataflow.FlowSources
6
6
private import semmle.code.java.dataflow.TaintTracking2
7
+ private import semmle.code.java.dispatch.VirtualDispatch
7
8
private import semmle.code.java.frameworks.Kryo
8
9
private import semmle.code.java.frameworks.XStream
9
10
private import semmle.code.java.frameworks.SnakeYaml
@@ -15,6 +16,7 @@ private import semmle.code.java.frameworks.HessianBurlap
15
16
private import semmle.code.java.frameworks.Castor
16
17
private import semmle.code.java.frameworks.Jackson
17
18
private import semmle.code.java.frameworks.Jabsorb
19
+ private import semmle.code.java.frameworks.Jms
18
20
private import semmle.code.java.frameworks.JoddJson
19
21
private import semmle.code.java.frameworks.Flexjson
20
22
private import semmle.code.java.frameworks.google.Gson
@@ -225,9 +227,10 @@ predicate unsafeDeserialization(MethodCall ma, Expr sink) {
225
227
sink = ma .getArgument ( 0 ) and
226
228
UnsafeTypeFlow:: flowToExpr ( ma .getArgument ( 1 ) )
227
229
or
228
- m .getASourceOverriddenMethod * ( )
229
- .hasQualifiedName ( [ "javax" , "jakarta" ] + ".jms" , "ObjectMessage" , "getObject" ) and
230
- sink = ma .getQualifier ( ) .getUnderlyingExpr ( )
230
+ m .getASourceOverriddenMethod * ( ) instanceof ObjectMessageGetObjectMethod and
231
+ sink = ma .getQualifier ( ) .getUnderlyingExpr ( ) and
232
+ // If we can see an implementation, we trust dataflow to find a path to the other sinks instead
233
+ not exists ( viableCallable ( ma ) )
231
234
)
232
235
}
233
236
0 commit comments