Skip to content

Commit 6823855

Browse files
authored
Merge pull request github#6203 from smowton/smowton/admin/avoid-config-imports-from-qlls
Java: Reduce DataFlow Configuration pollution from Random.qll and JexlInjection.qll
2 parents ca1bf77 + a51154a commit 6823855

File tree

16 files changed

+268
-250
lines changed

16 files changed

+268
-250
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
lgtm,codescanning
2+
* Library `semmle.code.java.security.Random` is split into `RandomQuery`, for use by randomness-related queries, and `RandomValueSource`, for use by libraries wishing to augment the built-in set of random value sources. Any code importing `Random` will need changing to import one or other of these.

java/ql/src/Likely Bugs/Arithmetic/BadAbsOfRandom.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
*/
1212

1313
import java
14-
import semmle.code.java.security.Random
14+
import semmle.code.java.security.RandomQuery
1515

1616
from MethodAccess ma, Method abs, Method nextIntOrLong, RandomDataSource nma
1717
where

java/ql/src/Likely Bugs/Arithmetic/RandomUsedOnce.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
*/
1414

1515
import java
16-
import semmle.code.java.security.Random
16+
import semmle.code.java.security.RandomQuery
1717

1818
from RandomDataSource ma
1919
where ma.getQualifier() instanceof ClassInstanceExpr

java/ql/src/Security/CWE/CWE-094/JexlInjection.ql

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

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

19-
/**
20-
* A taint-tracking configuration for unsafe user input
21-
* that is used to construct and evaluate a JEXL expression.
22-
* It supports both JEXL 2 and 3.
23-
*/
24-
class JexlInjectionConfig extends TaintTracking::Configuration {
25-
JexlInjectionConfig() { this = "JexlInjectionConfig" }
26-
27-
override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }
28-
29-
override predicate isSink(DataFlow::Node sink) { sink instanceof JexlEvaluationSink }
30-
31-
override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) {
32-
any(JexlInjectionAdditionalTaintStep c).step(node1, node2)
33-
}
34-
}
35-
3618
from DataFlow::PathNode source, DataFlow::PathNode sink, JexlInjectionConfig conf
3719
where conf.hasFlowPath(source, sink)
3820
select sink.getNode(), source, sink, "JEXL injection from $@.", source.getNode(), "this user input"

java/ql/src/Security/CWE/CWE-129/ArraySizing.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import java
22
import semmle.code.java.dataflow.DataFlow
33
import semmle.code.java.dataflow.DefUse
4-
import semmle.code.java.security.Random
4+
import semmle.code.java.security.RandomDataSource
55
private import BoundingChecks
66

77
/**

java/ql/src/Security/CWE/CWE-190/ArithmeticUncontrolled.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
import java
1616
import semmle.code.java.dataflow.TaintTracking
17-
import semmle.code.java.security.Random
17+
import semmle.code.java.security.RandomQuery
1818
import semmle.code.java.security.SecurityTests
1919
import ArithmeticCommon
2020
import DataFlow::PathGraph

java/ql/src/Security/CWE/CWE-335/PredictableSeed.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
*/
1212

1313
import java
14-
import semmle.code.java.security.Random
14+
import semmle.code.java.security.RandomQuery
1515

1616
from GetRandomData da, RValue use, PredictableSeedExpr source
1717
where

java/ql/src/semmle/code/java/dataflow/ExternalFlow.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ private import FlowSummary
7777
*/
7878
private module Frameworks {
7979
private import internal.ContainerFlow
80+
private import semmle.code.java.frameworks.android.XssSinks
8081
private import semmle.code.java.frameworks.ApacheHttp
8182
private import semmle.code.java.frameworks.apache.Collections
8283
private import semmle.code.java.frameworks.apache.Lang
@@ -91,10 +92,9 @@ private module Frameworks {
9192
private import semmle.code.java.frameworks.spring.SpringBeans
9293
private import semmle.code.java.security.ResponseSplitting
9394
private import semmle.code.java.security.InformationLeak
94-
private import semmle.code.java.security.XSS
95+
private import semmle.code.java.security.JexlInjectionSinkModels
9596
private import semmle.code.java.security.LdapInjection
9697
private import semmle.code.java.security.XPath
97-
private import semmle.code.java.security.JexlInjection
9898
private import semmle.code.java.frameworks.android.SQLite
9999
private import semmle.code.java.frameworks.Jdbc
100100
private import semmle.code.java.frameworks.SpringJdbc

java/ql/src/semmle/code/java/dataflow/RangeAnalysis.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ private import SSA
6868
private import RangeUtils
6969
private import semmle.code.java.dataflow.internal.rangeanalysis.SsaReadPositionCommon
7070
private import semmle.code.java.controlflow.internal.GuardsLogic
71-
private import semmle.code.java.security.Random
71+
private import semmle.code.java.security.RandomDataSource
7272
private import SignAnalysis
7373
private import ModulusAnalysis
7474
private import semmle.code.java.Reflection
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/** Provides XSS sink models relating to the `android.webkit.WebView` class. */
2+
3+
import java
4+
private import semmle.code.java.dataflow.ExternalFlow
5+
6+
/** CSV sink models representing methods susceptible to XSS attacks. */
7+
private class DefaultXssSinkModel extends SinkModelCsv {
8+
override predicate row(string row) {
9+
row =
10+
[
11+
"android.webkit;WebView;false;loadData;;;Argument[0];xss",
12+
"android.webkit;WebView;false;loadUrl;;;Argument[0];xss",
13+
"android.webkit;WebView;false;loadDataWithBaseURL;;;Argument[1];xss"
14+
]
15+
}
16+
}

0 commit comments

Comments
 (0)