Skip to content

Commit 6d7cb48

Browse files
Refactored the query for unsafe deserialization
1 parent 09ae779 commit 6d7cb48

File tree

3 files changed

+295
-284
lines changed

3 files changed

+295
-284
lines changed

java/ql/src/Security/CWE/CWE-502/UnsafeDeserialization.ql

Lines changed: 1 addition & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -12,55 +12,9 @@
1212
*/
1313

1414
import java
15-
import semmle.code.java.dataflow.FlowSources
16-
import semmle.code.java.security.UnsafeDeserialization
15+
import semmle.code.java.security.UnsafeDeserializationQuery
1716
import DataFlow::PathGraph
1817

19-
class UnsafeDeserializationConfig extends TaintTracking::Configuration {
20-
UnsafeDeserializationConfig() { this = "UnsafeDeserializationConfig" }
21-
22-
override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }
23-
24-
override predicate isSink(DataFlow::Node sink) { sink instanceof UnsafeDeserializationSink }
25-
26-
override predicate isAdditionalTaintStep(DataFlow::Node pred, DataFlow::Node succ) {
27-
exists(ClassInstanceExpr cie |
28-
cie.getArgument(0) = pred.asExpr() and
29-
cie = succ.asExpr() and
30-
(
31-
cie.getConstructor().getDeclaringType() instanceof JsonIoJsonReader or
32-
cie.getConstructor().getDeclaringType() instanceof YamlBeansReader or
33-
cie.getConstructor().getDeclaringType().getASupertype*() instanceof UnsafeHessianInput or
34-
cie.getConstructor().getDeclaringType() instanceof BurlapInput
35-
)
36-
)
37-
or
38-
exists(MethodAccess ma |
39-
ma.getMethod() instanceof BurlapInputInitMethod and
40-
ma.getArgument(0) = pred.asExpr() and
41-
ma.getQualifier() = succ.asExpr()
42-
)
43-
or
44-
createJacksonJsonParserStep(pred, succ)
45-
or
46-
createJacksonTreeNodeStep(pred, succ)
47-
}
48-
49-
override predicate isSanitizer(DataFlow::Node node) {
50-
exists(ClassInstanceExpr cie |
51-
cie.getConstructor().getDeclaringType() instanceof JsonIoJsonReader and
52-
cie = node.asExpr() and
53-
exists(SafeJsonIoConfig sji | sji.hasFlowToExpr(cie.getArgument(1)))
54-
)
55-
or
56-
exists(MethodAccess ma |
57-
ma.getMethod() instanceof JsonIoJsonToJavaMethod and
58-
ma.getArgument(0) = node.asExpr() and
59-
exists(SafeJsonIoConfig sji | sji.hasFlowToExpr(ma.getArgument(1)))
60-
)
61-
}
62-
}
63-
6418
from DataFlow::PathNode source, DataFlow::PathNode sink, UnsafeDeserializationConfig conf
6519
where conf.hasFlowPath(source, sink)
6620
select sink.getNode().(UnsafeDeserializationSink).getMethodAccess(), source, sink,

0 commit comments

Comments
 (0)