Skip to content

Commit 69973da

Browse files
authored
Merge pull request #7548 from zbazztian/spring-taint-summaries
Java: Add Spring and Apache Common Langs taint flow steps
2 parents 40ad88b + a6e4f29 commit 69973da

File tree

17 files changed

+217
-25
lines changed

17 files changed

+217
-25
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ private module Frameworks {
103103
private import semmle.code.java.frameworks.ratpack.Ratpack
104104
private import semmle.code.java.frameworks.ratpack.RatpackExec
105105
private import semmle.code.java.frameworks.spring.SpringCache
106+
private import semmle.code.java.frameworks.spring.SpringContext
106107
private import semmle.code.java.frameworks.spring.SpringHttp
107108
private import semmle.code.java.frameworks.spring.SpringUtil
108109
private import semmle.code.java.frameworks.spring.SpringUi

java/ql/lib/semmle/code/java/frameworks/apache/Lang.qll

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,15 @@ private class ApacheArrayUtilsModel extends SummaryModelCsv {
7373
}
7474
}
7575

76+
private class ApacheStringEscapeUtilsModel extends SummaryModelCsv {
77+
override predicate row(string row) {
78+
row =
79+
[
80+
"org.apache.commons.lang3;StringEscapeUtils;false;escapeJson;;;Argument[0];ReturnValue;taint"
81+
]
82+
}
83+
}
84+
7685
private class ApacheStringUtilsModel extends SummaryModelCsv {
7786
override predicate row(string row) {
7887
row =

java/ql/lib/semmle/code/java/frameworks/spring/Spring.qll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import semmle.code.java.frameworks.spring.SpringBeanFile
99
import semmle.code.java.frameworks.spring.SpringBeans
1010
import semmle.code.java.frameworks.spring.SpringBeanRefType
1111
import semmle.code.java.frameworks.spring.SpringCache
12+
import semmle.code.java.frameworks.spring.SpringContext
1213
import semmle.code.java.frameworks.spring.SpringComponentScan
1314
import semmle.code.java.frameworks.spring.SpringConstructorArg
1415
import semmle.code.java.frameworks.spring.SpringController
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/**
2+
* Provides models for the `org.springframework.context` package.
3+
*/
4+
5+
import java
6+
private import semmle.code.java.dataflow.ExternalFlow
7+
8+
private class StringSummaryCsv extends SummaryModelCsv {
9+
override predicate row(string row) {
10+
row =
11+
[
12+
//`namespace; type; subtypes; name; signature; ext; input; output; kind`
13+
"org.springframework.context;MessageSource;true;getMessage;(String,Object[],String,Locale);;ArrayElement of Argument[1];ReturnValue;taint",
14+
"org.springframework.context;MessageSource;true;getMessage;(String,Object[],String,Locale);;Argument[2];ReturnValue;taint",
15+
"org.springframework.context;MessageSource;true;getMessage;(String,Object[],Locale);;ArrayElement of Argument[1];ReturnValue;taint"
16+
]
17+
}
18+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import org.apache.commons.lang3.StringEscapeUtils;
2+
3+
public class StringEscapeUtilsTest {
4+
String taint() { return "tainted"; }
5+
6+
void sink(Object o) {}
7+
8+
void test() throws Exception {
9+
sink(StringEscapeUtils.escapeJson(taint())); // $hasTaintFlow
10+
}
11+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import org.springframework.context.support.StaticMessageSource;
2+
import java.util.Locale;
3+
4+
public class Test {
5+
6+
public static String code = "mycode";
7+
public static Locale locale = Locale.US;
8+
9+
String taint() { return "tainted"; }
10+
11+
void sink(Object o) {}
12+
13+
public void test() {
14+
StaticMessageSource sms = new StaticMessageSource();
15+
sms.addMessage(code, locale, "hello {0}");
16+
sink(sms.getMessage(code, new String[]{ taint() }, locale)); // $hasTaintFlow
17+
sink(sms.getMessage(code, new String[]{ taint() }, "", locale)); // $hasTaintFlow
18+
sink(sms.getMessage(code, null, taint(), locale)); // $hasTaintFlow
19+
}
20+
}

java/ql/test/library-tests/frameworks/spring/context/flow.expected

Whitespace-only changes.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
import java
2+
import TestUtilities.InlineFlowTest
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/springframework-5.3.8:${testdir}/../../../../stubs/apache-commons-logging-1.2/

java/ql/test/stubs/apache-commons-lang3-3.7/org/apache/commons/lang3/StringEscapeUtils.java

Lines changed: 42 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)