Skip to content

Commit 45cf50c

Browse files
committed
Apply JMS sink only when there isn't an implementation available
1 parent 7af3d23 commit 45cf50c

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/** Provides definitions for working with the JMS library. */
2+
3+
import java
4+
5+
/** The method `ObjectMessage.getObject`. */
6+
class ObjectMessageGetObjectMethod extends Method {
7+
ObjectMessageGetObjectMethod() {
8+
this.hasQualifiedName(["javax", "jakarta"] + ".jms", "ObjectMessage", "getObject")
9+
}
10+
}

java/ql/lib/semmle/code/java/security/UnsafeDeserializationQuery.qll

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import semmle.code.java.dataflow.FlowSources
66
private import semmle.code.java.dataflow.TaintTracking2
7+
private import semmle.code.java.dispatch.VirtualDispatch
78
private import semmle.code.java.frameworks.Kryo
89
private import semmle.code.java.frameworks.XStream
910
private import semmle.code.java.frameworks.SnakeYaml
@@ -15,6 +16,7 @@ private import semmle.code.java.frameworks.HessianBurlap
1516
private import semmle.code.java.frameworks.Castor
1617
private import semmle.code.java.frameworks.Jackson
1718
private import semmle.code.java.frameworks.Jabsorb
19+
private import semmle.code.java.frameworks.Jms
1820
private import semmle.code.java.frameworks.JoddJson
1921
private import semmle.code.java.frameworks.Flexjson
2022
private 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

Comments
 (0)