44
55import semmle.code.java.dataflow.FlowSources
66private import semmle.code.java.dataflow.TaintTracking2
7+ private import semmle.code.java.dispatch.VirtualDispatch
78private import semmle.code.java.frameworks.Kryo
89private import semmle.code.java.frameworks.XStream
910private import semmle.code.java.frameworks.SnakeYaml
@@ -15,6 +16,7 @@ private import semmle.code.java.frameworks.HessianBurlap
1516private import semmle.code.java.frameworks.Castor
1617private import semmle.code.java.frameworks.Jackson
1718private import semmle.code.java.frameworks.Jabsorb
19+ private import semmle.code.java.frameworks.Jms
1820private import semmle.code.java.frameworks.JoddJson
1921private import semmle.code.java.frameworks.Flexjson
2022private import semmle.code.java.frameworks.google.Gson
@@ -225,9 +227,10 @@ predicate unsafeDeserialization(MethodCall ma, Expr sink) {
225227 sink = ma .getArgument ( 0 ) and
226228 UnsafeTypeFlow:: flowToExpr ( ma .getArgument ( 1 ) )
227229 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 ) )
231234 )
232235}
233236
0 commit comments