Skip to content

Commit b58eb3a

Browse files
committed
Java: Add TemplateEngine.createTemplate as a groovy injection sink
1 parent f943502 commit b58eb3a

File tree

6 files changed

+74
-0
lines changed

6 files changed

+74
-0
lines changed

java/ql/lib/ext/groovy.lang.model.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,4 @@ extensions:
2929
- ["groovy.lang", "GroovyShell", False, "run", "(String,String,String[])", "", "Argument[0]", "groovy", "manual"]
3030
- ["groovy.lang", "GroovyShell", False, "run", "(URI,List)", "", "Argument[0]", "groovy", "manual"]
3131
- ["groovy.lang", "GroovyShell", False, "run", "(URI,String[])", "", "Argument[0]", "groovy", "manual"]
32+
- ["groovy.text", "TemplateEngine", True, "createTemplate", "", "", "Argument[0]", "groovy", "manual"]
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
category: minorAnalysis
3+
---
4+
* The query `java/groovy-injection` now recognizes `groovy.text.TemplateEngine.createTemplate` as a sink.
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import java.io.File;
2+
import java.io.IOException;
3+
import java.io.Reader;
4+
import java.net.URL;
5+
import javax.servlet.ServletException;
6+
import javax.servlet.http.HttpServlet;
7+
import javax.servlet.http.HttpServletRequest;
8+
import javax.servlet.http.HttpServletResponse;
9+
import groovy.text.TemplateEngine;
10+
11+
public class TemplateEngineTest extends HttpServlet {
12+
13+
private Object source(HttpServletRequest request) {
14+
return request.getParameter("script");
15+
}
16+
17+
protected void doGet(HttpServletRequest request, HttpServletResponse response)
18+
throws ServletException, IOException {
19+
try {
20+
Object script = source(request);
21+
TemplateEngine engine = null;
22+
engine.createTemplate(request.getParameter("script")); // $ hasGroovyInjection
23+
engine.createTemplate((File) script); // $ hasGroovyInjection
24+
engine.createTemplate((Reader) script); // $ hasGroovyInjection
25+
engine.createTemplate((URL) script); // $ hasGroovyInjection
26+
} catch (Exception e) {
27+
}
28+
29+
}
30+
}

java/ql/test/stubs/groovy-all-3.0.7/groovy/lang/Writable.java

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

java/ql/test/stubs/groovy-all-3.0.7/groovy/text/Template.java

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

java/ql/test/stubs/groovy-all-3.0.7/groovy/text/TemplateEngine.java

Lines changed: 17 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)