Skip to content

Commit 3311b3b

Browse files
committed
Convert experimental queries' isBarrier to use instanceof SimpleScalarSanitizer
1 parent 67dfca2 commit 3311b3b

File tree

7 files changed

+15
-31
lines changed

7 files changed

+15
-31
lines changed

java/ql/src/experimental/Security/CWE/CWE-020/Log4jJndiInjection.ql

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import java
1919
import semmle.code.java.dataflow.TaintTracking
2020
import semmle.code.java.dataflow.FlowSources
2121
import semmle.code.java.dataflow.ExternalFlow
22+
private import semmle.code.java.security.dataflow.CommonSanitizers
2223
import Log4jInjectionFlow::PathGraph
2324

2425
private class ActivateModels extends ActiveExperimentalModels {
@@ -33,11 +34,7 @@ class Log4jInjectionSink extends DataFlow::Node {
3334
/**
3435
* A node that sanitizes a message before logging to avoid log injection.
3536
*/
36-
class Log4jInjectionSanitizer extends DataFlow::Node {
37-
Log4jInjectionSanitizer() {
38-
this.getType() instanceof BoxedType or this.getType() instanceof PrimitiveType
39-
}
40-
}
37+
class Log4jInjectionSanitizer extends DataFlow::Node instanceof SimpleScalarSanitizer { }
4138

4239
/**
4340
* A taint-tracking configuration for tracking untrusted user input used in log entries.

java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.ql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import semmle.code.java.dataflow.ExternalFlow
1818
import semmle.code.java.dataflow.FlowSources
1919
import JFinalController
2020
import semmle.code.java.security.PathSanitizer
21+
private import semmle.code.java.security.dataflow.CommonSanitizers
2122
import InjectFilePathFlow::PathGraph
2223

2324
private class ActivateModels extends ActiveExperimentalModels {
@@ -56,7 +57,7 @@ module InjectFilePathConfig implements DataFlow::ConfigSig {
5657
}
5758

5859
predicate isBarrier(DataFlow::Node node) {
59-
exists(Type t | t = node.getType() | t instanceof BoxedType or t instanceof PrimitiveType)
60+
node instanceof SimpleScalarSanitizer
6061
or
6162
node instanceof PathInjectionSanitizer
6263
}

java/ql/src/experimental/Security/CWE/CWE-078/CommandInjectionRuntimeExec.qll

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import java
22
import semmle.code.java.frameworks.javaee.ejb.EJBRestrictions
33
import semmle.code.java.dataflow.DataFlow
44
import semmle.code.java.dataflow.FlowSources
5+
private import semmle.code.java.security.dataflow.CommonSanitizers
56

67
module ExecCmdFlowConfig implements DataFlow::ConfigSig {
78
predicate isSource(DataFlow::Node source) {
@@ -20,8 +21,7 @@ module ExecCmdFlowConfig implements DataFlow::ConfigSig {
2021
node instanceof AssignToNonZeroIndex or
2122
node instanceof ArrayInitAtNonZeroIndex or
2223
node instanceof StreamConcatAtNonZeroIndex or
23-
node.getType() instanceof PrimitiveType or
24-
node.getType() instanceof BoxedType
24+
node instanceof SimpleScalarSanitizer
2525
}
2626
}
2727

@@ -41,10 +41,7 @@ module ExecUserFlowConfig implements DataFlow::ConfigSig {
4141
)
4242
}
4343

44-
predicate isBarrier(DataFlow::Node node) {
45-
node.getType() instanceof PrimitiveType or
46-
node.getType() instanceof BoxedType
47-
}
44+
predicate isBarrier(DataFlow::Node node) { node instanceof SimpleScalarSanitizer }
4845
}
4946

5047
/** Tracks flow of unvalidated user input that is used in Runtime.Exec */

java/ql/src/experimental/Security/CWE/CWE-089/MyBatisAnnotationSqlInjection.ql

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,15 @@ import MyBatisCommonLib
1717
import MyBatisAnnotationSqlInjectionLib
1818
import semmle.code.java.dataflow.FlowSources
1919
import semmle.code.java.dataflow.TaintTracking
20+
private import semmle.code.java.security.dataflow.CommonSanitizers
2021
import MyBatisAnnotationSqlInjectionFlow::PathGraph
2122

2223
private module MyBatisAnnotationSqlInjectionConfig implements DataFlow::ConfigSig {
2324
predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource }
2425

2526
predicate isSink(DataFlow::Node sink) { sink instanceof MyBatisAnnotatedMethodCallArgument }
2627

27-
predicate isBarrier(DataFlow::Node node) {
28-
node.getType() instanceof PrimitiveType or
29-
node.getType() instanceof BoxedType or
30-
node.getType() instanceof NumberType
31-
}
28+
predicate isBarrier(DataFlow::Node node) { node instanceof SimpleScalarSanitizer }
3229

3330
predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) {
3431
exists(MethodCall ma |

java/ql/src/experimental/Security/CWE/CWE-089/MyBatisMapperXmlSqlInjection.ql

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,15 @@ import MyBatisCommonLib
1717
import MyBatisMapperXmlSqlInjectionLib
1818
import semmle.code.xml.MyBatisMapperXML
1919
import semmle.code.java.dataflow.FlowSources
20+
private import semmle.code.java.security.dataflow.CommonSanitizers
2021
import MyBatisMapperXmlSqlInjectionFlow::PathGraph
2122

2223
private module MyBatisMapperXmlSqlInjectionConfig implements DataFlow::ConfigSig {
2324
predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource }
2425

2526
predicate isSink(DataFlow::Node sink) { sink instanceof MyBatisMapperMethodCallAnArgument }
2627

27-
predicate isBarrier(DataFlow::Node node) {
28-
node.getType() instanceof PrimitiveType or
29-
node.getType() instanceof BoxedType or
30-
node.getType() instanceof NumberType
31-
}
28+
predicate isBarrier(DataFlow::Node node) { node instanceof SimpleScalarSanitizer }
3229

3330
predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) {
3431
exists(MethodCall ma |

java/ql/src/experimental/Security/CWE/CWE-348/ClientSuppliedIpUsedInSecurityCheck.ql

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java
1515
import semmle.code.java.dataflow.TaintTracking
1616
import semmle.code.java.dataflow.FlowSources
17+
import semmle.code.java.security.dataflow.CommonSanitizers
1718
import ClientSuppliedIpUsedInSecurityCheckLib
1819
import ClientSuppliedIpUsedInSecurityCheckFlow::PathGraph
1920

@@ -38,9 +39,7 @@ module ClientSuppliedIpUsedInSecurityCheckConfig implements DataFlow::ConfigSig
3839
not aa.getIndexExpr().(CompileTimeConstantExpr).getIntValue() = 0
3940
)
4041
or
41-
node.getType() instanceof PrimitiveType
42-
or
43-
node.getType() instanceof BoxedType
42+
node instanceof SimpleScalarSanitizer
4443
}
4544
}
4645

java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ private import semmle.code.java.dataflow.FlowSources
55
private import semmle.code.java.dataflow.StringPrefixes
66
private import semmle.code.java.frameworks.javaee.ejb.EJBRestrictions
77
private import experimental.semmle.code.java.frameworks.SpringResource
8+
private import semmle.code.java.security.dataflow.CommonSanitizers
89

910
private class ActiveModels extends ActiveExperimentalModels {
1011
ActiveModels() { this = "unsafe-url-forward" }
@@ -128,12 +129,7 @@ private class SpringModelAndViewSink extends UnsafeUrlForwardSink {
128129
}
129130
}
130131

131-
private class PrimitiveSanitizer extends UnsafeUrlForwardSanitizer {
132-
PrimitiveSanitizer() {
133-
this.getType() instanceof PrimitiveType or
134-
this.getType() instanceof BoxedType or
135-
this.getType() instanceof NumberType
136-
}
132+
private class PrimitiveSanitizer extends UnsafeUrlForwardSanitizer instanceof SimpleScalarSanitizer {
137133
}
138134

139135
private class SanitizingPrefix extends InterestingPrefix {

0 commit comments

Comments
 (0)