Skip to content

Commit daad62c

Browse files
committed
Java: Add TaintedPath test.
1 parent 1ab75eb commit daad62c

File tree

3 files changed

+24
-3
lines changed

3 files changed

+24
-3
lines changed

java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.expected

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,19 @@ edges
22
| Test.java:19:18:19:38 | getHostName(...) : String | Test.java:24:20:24:23 | temp |
33
| Test.java:19:18:19:38 | getHostName(...) : String | Test.java:27:21:27:24 | temp |
44
| Test.java:19:18:19:38 | getHostName(...) : String | Test.java:30:44:30:47 | temp |
5+
| Test.java:19:18:19:38 | getHostName(...) : String | Test.java:34:21:34:24 | temp |
6+
| Test.java:79:74:79:97 | getInputStream(...) : ServletInputStream | Test.java:81:67:81:81 | ... + ... |
57
nodes
68
| Test.java:19:18:19:38 | getHostName(...) : String | semmle.label | getHostName(...) : String |
79
| Test.java:24:20:24:23 | temp | semmle.label | temp |
810
| Test.java:27:21:27:24 | temp | semmle.label | temp |
911
| Test.java:30:44:30:47 | temp | semmle.label | temp |
12+
| Test.java:34:21:34:24 | temp | semmle.label | temp |
13+
| Test.java:79:74:79:97 | getInputStream(...) : ServletInputStream | semmle.label | getInputStream(...) : ServletInputStream |
14+
| Test.java:81:67:81:81 | ... + ... | semmle.label | ... + ... |
1015
#select
1116
| Test.java:24:11:24:24 | new File(...) | Test.java:19:18:19:38 | getHostName(...) : String | Test.java:24:20:24:23 | temp | $@ flows to here and is used in a path. | Test.java:19:18:19:38 | getHostName(...) | User-provided value |
1217
| Test.java:27:11:27:25 | get(...) | Test.java:19:18:19:38 | getHostName(...) : String | Test.java:27:21:27:24 | temp | $@ flows to here and is used in a path. | Test.java:19:18:19:38 | getHostName(...) | User-provided value |
1318
| Test.java:30:11:30:48 | getPath(...) | Test.java:19:18:19:38 | getHostName(...) : String | Test.java:30:44:30:47 | temp | $@ flows to here and is used in a path. | Test.java:19:18:19:38 | getHostName(...) | User-provided value |
19+
| Test.java:34:12:34:25 | new File(...) | Test.java:19:18:19:38 | getHostName(...) : String | Test.java:34:21:34:24 | temp | $@ flows to here and is used in a path. | Test.java:19:18:19:38 | getHostName(...) | User-provided value |
20+
| Test.java:81:52:81:88 | new FileWriter(...) | Test.java:79:74:79:97 | getInputStream(...) : ServletInputStream | Test.java:81:67:81:81 | ... + ... | $@ flows to here and is used in a path. | Test.java:79:74:79:97 | getInputStream(...) | User-provided value |

java/ql/test/query-tests/security/CWE-022/semmle/tests/Test.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
package test.cwe22.semmle.tests;
44

55

6+
import javax.servlet.http.*;
7+
import javax.servlet.ServletException;
68

7-
8-
import java.io.IOException;
9-
import java.io.File;
9+
import java.io.*;
1010
import java.net.InetAddress;
1111
import java.nio.file.Path;
1212
import java.nio.file.Paths;
@@ -28,6 +28,11 @@ void doGet1(InetAddress address)
2828

2929
// BAD: construct a path with user input
3030
path = FileSystems.getDefault().getPath(temp);
31+
32+
// BAD: insufficient check
33+
if (temp.startsWith("/some_safe_dir/")) {
34+
file = new File(temp);
35+
}
3136
}
3237

3338
void doGet2(InetAddress address)
@@ -68,4 +73,12 @@ boolean isSortOfSafe(String pathSpec) {
6873
return false;
6974
return true;
7075
}
76+
77+
public class MyServlet extends HttpServlet {
78+
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
79+
BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));
80+
String filename = br.readLine();
81+
BufferedWriter bw = new BufferedWriter(new FileWriter("dir/"+filename, true));
82+
}
83+
}
7184
}
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/servlet-api-2.4

0 commit comments

Comments
 (0)